📄 tas460_01.pas.svn-base
字号:
unit Tas460_01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, BAS200_12, dxExEdtr, DB, ADODB, ActnList, Menus, dxCntner, dxTL,
dxDBCtrl, dxDBTL, ExtCtrls, ComCtrls, ToolWin, TeeProcs, TeEngine, Chart,
DbChart, Buttons, StdCtrls, wwdbdatetimepicker, Series, wwfltdlg, fr_Class;
type
TTas460_01Form = class(TBas200_12Form)
Splitter1: TSplitter;
ADOQuery1: TADOQuery;
lblDate: TLabel;
edtFromDate: TwwDBDateTimePicker;
edtToDate: TwwDBDateTimePicker;
lblType: TLabel;
cbType: TComboBox;
sbSearch: TSpeedButton;
ADODataSet1FNo: TIntegerField;
ADODataSet1FName: TStringField;
ADODataSet1FParent: TIntegerField;
ADODataSet1FPercent: TFloatField;
ActOpen: TAction;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Panel2: TPanel;
DBChart1: TDBChart;
Series1: TBarSeries;
Splitter2: TSplitter;
DBChart2: TDBChart;
BarSeries1: TBarSeries;
ADODataSet2: TADODataSet;
IntegerField1: TIntegerField;
StringField1: TStringField;
IntegerField2: TIntegerField;
IntegerField3: TIntegerField;
FloatField1: TFloatField;
ADODataSet3: TADODataSet;
IntegerField4: TIntegerField;
StringField2: TStringField;
IntegerField5: TIntegerField;
IntegerField6: TIntegerField;
FloatField2: TFloatField;
ADODataSet1FTotal: TFloatField;
ADODataSet1FQty: TFloatField;
ADODataSet1FAvg: TFloatField;
dxDBTreeList1FName: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal: TdxDBTreeListMaskColumn;
dxDBTreeList1FQty: TdxDBTreeListMaskColumn;
dxDBTreeList1FAvg: TdxDBTreeListMaskColumn;
dxDBTreeList1FPercent: TdxDBTreeListMaskColumn;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure sbSearchClick(Sender: TObject);
procedure dxDBTreeList1FTotalDrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FPercentDrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure ActOpenExecute(Sender: TObject);
procedure ActPrintExecute(Sender: TObject);
procedure dxDBTreeList1FQtyDrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FAvgDrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
private
ATotal:array[1..3] of double;
procedure ByTaskClass(AFromDate,AToDate:TDateTime); //按任务类别
procedure ByProject(AFromDate,AToDate:TDateTime); //按項目
procedure ByCustomer(AFromDate,AToDate:TDateTime); //按客戶
procedure ByItemClass(AFromDate,AToDate:TDateTime); //按产品类别
procedure ByItem(AFromDate,AToDate:TDateTime); //按产品
procedure UpdateParent(AParentNo:Integer;AValue:Double;ADataSet:TDataSet;AFieldName:string);
{ Private declarations }
public
procedure SetInterface; override;
procedure RefreshEvent; override;
procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
{ Public declarations }
end;
var
Tas460_01Form: TTas460_01Form;
implementation
uses SYSDATA, CommFun, Tas510_01;
{$R *.dfm}
procedure TTas460_01Form.SetInterface;
var
ADate:TDateTime;
begin
inherited;
Caption:=GetDBString('TAS46001001'); //资源使用分析
lblDate.Caption:=GetDBString('TAS46001002'); //起止日期
lblType.Caption:=GetDBString('TAS46001003'); //类型
sbSearch.Caption:=GetDBString('TAS46001004'); //查询
ADODataSet1FName.DisplayLabel:=GetDBString('TAS46001006'); //名称
ADODataSet1FTotal.DisplayLabel:=GetDBString('TAS46001007'); //总人工天
ADODataSet1FPercent.DisplayLabel:=GetDBString('TAS46001008'); //所占比重
ADODataSet1FQty.DisplayLabel:=GetDBString('TAS46001013'); //任务数量
ADODataSet1FAvg.DisplayLabel:=GetDBString('TAS46001014'); //平均人工天
cbType.Clear;
cbType.Items.Add(GetDBString('TAS46001009')); //按任务类别
cbType.Items.Add(GetDBString('TAS46001010')); //按项目
cbType.Items.Add(GetDBString('TAS46001011')); //按客户
cbType.Items.Add(GetDBString('TAS46001015')); //按产品类别
cbType.Items.Add(GetDBString('TAS46001016')); //按产品
cbType.ItemIndex:=0;
ADate:=GetServerDate;
edtFromDate.Date:=GetMonthFirstDate(ADate);
edtToDate.Date:=GetMonthEndDate(ADate);
end;
procedure TTas460_01Form.FormCreate(Sender: TObject);
begin
inherited;
SetInterface;
sbSearch.Click;
end;
procedure TTas460_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
ADOQuery1.Close;
end;
procedure TTas460_01Form.sbSearchClick(Sender: TObject);
begin
inherited;
//查询
if (edtFromDate.Text='') or (edtToDate.Text='') then
begin
ShowMsg('UMS10000319'); //起止日期不可为空
if edtFromDate.Text='' then edtFromDate.SetFocus else edtToDate.SetFocus;
Abort;
end;
if edtFromDate.Date>edtToDate.Date then
begin
ShowMsg('UMS10000320'); //结束日期不能小于起始日期
edtToDate.SetFocus;
Abort;
end;
ATotal[1]:=0;
ATotal[2]:=0;
ATotal[3]:=0;
Screen.Cursor:=crHourGlass;
if Assigned(SYSDM.wwFilterDialog1.Form) then SYSDM.wwFilterDialog1.ClearFilter;
ADODataSet1.DisableControls;
ADODataSet1.Close;
ADODataSet1.FieldDefs.Clear;
ADODataSet1.FieldDefs.Add('FNo',ftInteger,0);
ADODataSet1.FieldDefs.Add('FName',ftString,50);
ADODataSet1.FieldDefs.Add('FParent',ftInteger,0);
ADODataSet1.FieldDefs.Add('FTotal',ftFloat,0);
ADODataSet1.FieldDefs.Add('FQty',ftFloat,0);
ADODataSet1.FieldDefs.Add('FAvg',ftFloat,0);
ADODataSet1.FieldDefs.Add('FPercent',ftFloat,0);
ADODataSet1.CreateDataSet;
case cbType.ItemIndex of
0:ByTaskClass(edtFromDate.Date,edtToDate.Date); //按任务类别
1:ByProject(edtFromDate.Date,edtToDate.Date); //按项目
2:ByCustomer(edtFromDate.Date,edtToDate.Date); //按客户
3:ByItemClass(edtFromDate.Date,edtToDate.Date); //按产品类别
4:ByItem(edtFromDate.Date,edtToDate.Date); //按产品
end;
ADODataSet1.EnableControls;
ADODataSet2.Close;
ADODataSet2.FieldDefs.Clear;
ADODataSet2.FieldDefs.Add('FNo',ftInteger,0);
ADODataSet2.FieldDefs.Add('FName',ftString,50);
ADODataSet2.FieldDefs.Add('FParent',ftInteger,0);
ADODataSet2.FieldDefs.Add('FTotal',ftInteger,0);
ADODataSet2.FieldDefs.Add('FPercent',ftFloat,0);
ADODataSet2.CreateDataSet;
ADODataSet3.Close;
ADODataSet3.FieldDefs.Clear;
ADODataSet3.FieldDefs.Add('FNo',ftInteger,0);
ADODataSet3.FieldDefs.Add('FName',ftString,50);
ADODataSet3.FieldDefs.Add('FParent',ftInteger,0);
ADODataSet3.FieldDefs.Add('FTotal',ftInteger,0);
ADODataSet3.FieldDefs.Add('FPercent',ftFloat,0);
ADODataSet3.CreateDataSet;
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
if ADODataSet1.FieldByName('FParent').Value=0 then
begin
ADODataSet2.Append;
ADODataSet2.FieldByName('FNo').Value:=ADODataSet1.FieldByName('FNo').Value;
ADODataSet2.FieldByName('FName').Value:=ADODataSet1.FieldByName('FName').Value;
ADODataSet2.FieldByName('FParent').Value:=ADODataSet1.FieldByName('FParent').Value;
ADODataSet2.FieldByName('FTotal').Value:=ADODataSet1.FieldByName('FTotal').Value;
ADODataSet2.FieldByName('FPercent').Value:=ADODataSet1.FieldByName('FPercent').Value;
ADODataSet2.Post;
end else
begin
ADODataSet3.Append;
ADODataSet3.FieldByName('FNo').Value:=ADODataSet1.FieldByName('FNo').Value;
ADODataSet3.FieldByName('FName').Value:=ADODataSet1.FieldByName('FName').Value;
ADODataSet3.FieldByName('FParent').Value:=ADODataSet1.FieldByName('FParent').Value;
ADODataSet3.FieldByName('FTotal').Value:=ADODataSet1.FieldByName('FTotal').Value;
ADODataSet3.FieldByName('FPercent').Value:=ADODataSet1.FieldByName('FPercent').Value;
ADODataSet3.Post;
end;
ADODataSet1.Next;
end;
DBChart1.RefreshData;
DBChart2.RefreshData;
Screen.Cursor:=crDefault;
end;
//将下级任务类别数量累加到上级任务类别
procedure TTas460_01Form.UpdateParent(AParentNo:Integer;AValue:Double;ADataSet:TDataSet;AFieldName:string);
var
AParent:Integer;
AClassName:String;
begin
//查找任务类别表中该记录是否有上级分类
AParent:=GetValue('select T100_003 from TAS100 where T100_001='+IntToStr(AParentNo));
if ADataSet.Locate('FNo',AParentNo,[]) then
begin
ADataSet.Edit;
ADataSet.FieldByName(AFieldName).Value:=ADataSet.FieldByName(AFieldName).AsFloat+AValue;
ADataSet.Post;
end else
begin
AClassName:=GetValue('select T100_002 from TAS100 where T100_001='+IntToStr(AParentNo));
ADataSet.Append;
ADataSet.FieldByName('FNo').Value:=AParentNo;
ADataSet.FieldByName('FName').Value:=AClassName;
ADataSet.FieldByName('FParent').Value:=AParent;
ADataSet.FieldByName(AFieldName).Value:=AValue;
ADataSet.Post;
end;
//查找任务类别表中该记录是否有上级类别
// if AParent<>0 then UpdateParent(AParent,AValue,ADataSet,AFieldName);
end;
//获得任务数量
function GetTaskQty(ACode:String;AFromDate,AToDate:TDateTime;AType:string):Double;
begin
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
if AType='T' then //按任务类别
begin
SYSDM.qryQuery.SQL.Add('select count(T510_001)');
SYSDM.qryQuery.SQL.Add('from TAS510');
SYSDM.qryQuery.SQL.Add('where T510_003 in ('+AStatusNo+') and T510_004='+ACode+' and '+AByFinish+'>='+GetDateString(AFromDate)+' and '+AByFinish+'<='+GetDateString(AToDate));
end else
if AType='C' then //按客户
begin
SYSDM.qryQuery.SQL.Add('select count(T510_001)');
SYSDM.qryQuery.SQL.Add('from TAS510');
SYSDM.qryQuery.SQL.Add('where T510_003 in ('+AStatusNo+') and T510_016='+ACode+' and '+AByFinish+'>='+GetDateString(AFromDate)+' and '+AByFinish+'<='+GetDateString(AToDate));
end else
if AType='P' then //按项目
begin
SYSDM.qryQuery.SQL.Add('select count(T510_001)');
SYSDM.qryQuery.SQL.Add('from TAS510,TAS500');
SYSDM.qryQuery.SQL.Add('where T510_003 in ('+AStatusNo+') and T510_008=2 and T510_009=T500_001 and T500_001='+''''+ACode+''''+' and '+AByFinish+'>='+GetDateString(AFromDate)+' and '+AByFinish+'<='+GetDateString(AToDate));
end else
if AType='A' then //按产品类别
begin
SYSDM.qryQuery.SQL.Add('select count(T510_001)');
SYSDM.qryQuery.SQL.Add('from TAS510,INV150,INV120');
SYSDM.qryQuery.SQL.Add('where T510_003 in ('+AStatusNo+') and T510_017=I150_001 and I150_005=I120_001 and I120_001='+ACode+' and '+AByFinish+'>='+GetDateString(AFromDate)+' and '+AByFinish+'<='+GetDateString(AToDate));
end else
if AType='I' then //按产品
begin
SYSDM.qryQuery.SQL.Add('select count(T510_001)');
SYSDM.qryQuery.SQL.Add('from TAS510,INV150');
SYSDM.qryQuery.SQL.Add('where T510_003 in ('+AStatusNo+') and T510_017=I150_001 and I150_001='+ACode+' and '+AByFinish+'>='+GetDateString(AFromDate)+' and '+AByFinish+'<='+GetDateString(AToDate));
end;
SYSDM.qryQuery.Open;
if SYSDM.qryQuery.IsEmpty then Result:=0 else Result:=SYSDM.qryQuery.Fields[0].AsFloat;
end;
procedure TTas460_01Form.ByTaskClass(AFromDate, AToDate: TDateTime); //按任务类别
var
AValue,ASum:Double;
AParentNo:Integer;
ABookmark:TBookmark;
begin
ASum:=0;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
//统计资源耗用
ADOQuery1.SQL.Add('select sum(T520_017*T520_008) as FTotal,T100_001,T100_002,T100_003');
//统计收入
//ADOQuery1.SQL.Add('select sum(T520_008) as FTotal,T100_001,T100_002,T100_003');
ADOQuery1.SQL.Add('from TAS510,TAS100,TAS520');
ADOQuery1.SQL.Add('where T510_003 in ('+AStatusNo+') and T510_004=T100_001 and T510_001=T520_002 and '+AByFinish+'>='+GetDateString(AFromDate)+' and '+AByFinish+'<='+GetDateString(AToDate));
ADOQuery1.SQL.Add('group by T100_001,T100_002,T100_003');
ADOQuery1.SQL.Add('order by T100_003,T100_001');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('T100_001').Value;
ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('T100_002').Value;
ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('T100_003').Value;
AValue:=ADOQuery1.FieldByName('FTotal').AsFloat;
ADODataSet1.FieldByName('FTotal').Value:=ADODataSet1.FieldByName('FTotal').AsFloat+AValue;
ADODataSet1.FieldByName('FQty').Value:=GetTaskQty(ADOQuery1.FieldByName('T100_001').AsString,AFromDate,AToDate,'T');
ADODataSet1.Post;
ASum:=ASum+AValue;
ATotal[1]:=ATotal[1]+AValue;
ATotal[2]:=ATotal[2]+ADODataSet1.FieldByName('FQty').AsFloat;
ADOQuery1.Next;
end;
//累加數量到上級類別
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ABookmark:=ADODataSet1.GetBookmark;
AParentNo:=ADODataSet1.FieldByName('FParent').Value;
if AParentNo<>0 then
begin
AValue:=ADODataSet1.FieldByName('FTotal').AsFloat;
UpdateParent(AParentNo,AValue,ADODataSet1,'FTotal');
ADODataSet1.GotoBookmark(ABookmark);
AValue:=ADODataSet1.FieldByName('FQty').AsFloat;
UpdateParent(AParentNo,AValue,ADODataSet1,'FQty');
ADODataSet1.GotoBookmark(ABookmark);
end;
ADODataSet1.GotoBookmark(ABookmark);
ADODataSet1.FreeBookmark(ABookmark);
ADODataSet1.Next;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -