📄 tas435_01.pas.svn-base
字号:
unit Tas435_01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Bas200_12, dxExEdtr, DB, TeEngine, Series, TeeProcs, Chart, wwfltdlg,
DbChart, ExtCtrls, ADODB, StdCtrls, wwdbdatetimepicker, Buttons, fr_Class,
ActnList, Menus, dxCntner, dxTL, dxDBCtrl, dxDBTL, ComCtrls, ToolWin;
type
TTas435_01Form = class(TBas200_12Form)
lblDate: TLabel;
lblType: TLabel;
sbSearch: TSpeedButton;
edtFromDate: TwwDBDateTimePicker;
edtToDate: TwwDBDateTimePicker;
cbType: TComboBox;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
ADOQuery1: TADOQuery;
ADODataSet2: TADODataSet;
ADODataSet3: TADODataSet;
Panel2: TPanel;
Splitter2: TSplitter;
DBChart1: TDBChart;
Series1: TBarSeries;
DBChart2: TDBChart;
Series2: TBarSeries;
Splitter1: TSplitter;
ADODataSet1FNo: TIntegerField;
ADODataSet1FName: TStringField;
ADODataSet1FParent: TIntegerField;
ADODataSet1FTotal1: TIntegerField;
ADODataSet1FTotal2: TIntegerField;
ADODataSet1FTotal3: TIntegerField;
ADODataSet1FTotal4: TIntegerField;
ADODataSet1FTotal5: TIntegerField;
ADODataSet1FTotal6: TIntegerField;
ADODataSet1FTotal: TIntegerField;
dxDBTreeList1FName: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal1: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal2: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal3: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal4: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal5: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal6: TdxDBTreeListMaskColumn;
dxDBTreeList1FTotal: TdxDBTreeListMaskColumn;
ActOpen: TAction;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure sbSearchClick(Sender: TObject);
procedure ADODataSet1AfterScroll(DataSet: TDataSet);
procedure dxDBTreeList1FTotal1DrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FTotal2DrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FTotal3DrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FTotal4DrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FTotal5DrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FTotal6DrawSummaryFooter(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
procedure dxDBTreeList1FTotalDrawSummaryFooter(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);
private
ATotal:array[1..7] of double;
procedure GetData(AFromDate,AToDate:TDateTime); //按产品
procedure SetFieldValue(ADays,AValue:Integer);
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
Tas435_01Form: TTas435_01Form;
implementation
uses SYSDATA, CommFun, Tas520_01;
{$R *.dfm}
procedure TTas435_01Form.SetInterface;
var
ADate:TDateTime;
begin
inherited;
Caption:=GetDBString('TAS43501001'); //工单完成分析
lblDate.Caption:=GetDBString('TAS43001002'); //起止日期
lblType.Caption:=GetDBString('TAS43001003'); //类型
sbSearch.Caption:=GetDBString('TAS43001004'); //查询
ADODataSet1FName.DisplayLabel:=GetDBString('TAS43001006'); //任务类别
ADODataSet1FTotal.DisplayLabel:=GetDBString('TAS43001013'); //小计
cbType.Clear;
cbType.Items.Add(GetDBString('TAS43001014')); //按日
cbType.Items.Add(GetDBString('TAS43001015')); //按周
cbType.Items.Add(GetDBString('TAS43001016')); //按月
cbType.ItemIndex:=0;
ADate:=GetServerDate;
edtFromDate.Date:=GetMonthFirstDate(ADate);
edtToDate.Date:=GetMonthEndDate(ADate);
end;
procedure TTas435_01Form.FormCreate(Sender: TObject);
begin
inherited;
sbSearch.Click;
end;
procedure TTas435_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
ADOQuery1.Close;
end;
procedure TTas435_01Form.sbSearchClick(Sender: TObject);
var
AUnit:string;
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;
ATotal[4]:=0;
ATotal[5]:=0;
ATotal[6]:=0;
ATotal[7]:=0;
Screen.Cursor:=crHourGlass;
if Assigned(SYSDM.wwFilterDialog1.Form) then SYSDM.wwFilterDialog1.ClearFilter;
ADOQuery1.Close;
ADODataSet1.DisableControls;
case cbType.ItemIndex of
0:AUnit:=GetDBString('TAS43001017'); //天
1:AUnit:=GetDBString('TAS43001018'); //周
2:AUnit:=GetDBString('TAS43001019'); //月
end;
ADODataSet1FTotal1.DisplayLabel:=GetDBString('TAS43001007')+AUnit; //一
ADODataSet1FTotal2.DisplayLabel:=GetDBString('TAS43001008')+AUnit; //二
ADODataSet1FTotal3.DisplayLabel:=GetDBString('TAS43001009')+AUnit; //三
ADODataSet1FTotal4.DisplayLabel:=GetDBString('TAS43001010')+AUnit; //四
ADODataSet1FTotal5.DisplayLabel:=GetDBString('TAS43001011')+AUnit; //五
ADODataSet1FTotal6.DisplayLabel:=GetDBString('TAS43001012')+AUnit; //超过五
dxDBTreeList1.Refresh;
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('FTotal1',ftInteger,0);
ADODataSet1.FieldDefs.Add('FTotal2',ftInteger,0);
ADODataSet1.FieldDefs.Add('FTotal3',ftInteger,0);
ADODataSet1.FieldDefs.Add('FTotal4',ftInteger,0);
ADODataSet1.FieldDefs.Add('FTotal5',ftInteger,0);
ADODataSet1.FieldDefs.Add('FTotal6',ftInteger,0);
ADODataSet1.FieldDefs.Add('FTotal',ftInteger,0);
ADODataSet1.CreateDataSet;
GetData(edtFromDate.Date,edtToDate.Date);
ADODataSet1.EnableControls;
ADODataSet2.Close;
ADODataSet2.FieldDefs.Clear;
ADODataSet2.FieldDefs.Add('FDays',ftString,20);
ADODataSet2.FieldDefs.Add('FTotal',ftInteger,0);
ADODataSet2.CreateDataSet;
ADODataSet2.Append;
ADODataSet2.FieldByName('FDays').Value:=ADODataSet1.FieldByName('FTotal1').DisplayLabel;
ADODataSet2.FieldByName('FTotal').Value:=ATotal[1];
ADODataSet2.Post;
ADODataSet2.Append;
ADODataSet2.FieldByName('FDays').Value:=ADODataSet1.FieldByName('FTotal2').DisplayLabel;
ADODataSet2.FieldByName('FTotal').Value:=ATotal[2];
ADODataSet2.Post;
ADODataSet2.Append;
ADODataSet2.FieldByName('FDays').Value:=ADODataSet1.FieldByName('FTotal3').DisplayLabel;
ADODataSet2.FieldByName('FTotal').Value:=ATotal[3];
ADODataSet2.Post;
ADODataSet2.Append;
ADODataSet2.FieldByName('FDays').Value:=ADODataSet1.FieldByName('FTotal4').DisplayLabel;
ADODataSet2.FieldByName('FTotal').Value:=ATotal[4];
ADODataSet2.Post;
ADODataSet2.Append;
ADODataSet2.FieldByName('FDays').Value:=ADODataSet1.FieldByName('FTotal5').DisplayLabel;
ADODataSet2.FieldByName('FTotal').Value:=ATotal[5];
ADODataSet2.Post;
ADODataSet2.Append;
ADODataSet2.FieldByName('FDays').Value:=ADODataSet1.FieldByName('FTotal6').DisplayLabel;
ADODataSet2.FieldByName('FTotal').Value:=ATotal[6];
ADODataSet2.Post;
DBChart1.RefreshData;
Screen.Cursor:=crDefault;
end;
procedure TTas435_01Form.SetFieldValue(ADays,AValue:Integer);
begin
if not (ADODataSet1.State in [dsInsert,dsEdit]) then Exit;
case ADays of
0,1: ADODataSet1.FieldByName('FTotal1').Value:=ADODataSet1.FieldByName('FTotal1').AsInteger+AValue;
2: ADODataSet1.FieldByName('FTotal2').Value:=ADODataSet1.FieldByName('FTotal2').AsInteger+AValue;
3: ADODataSet1.FieldByName('FTotal3').Value:=ADODataSet1.FieldByName('FTotal3').AsInteger+AValue;
4: ADODataSet1.FieldByName('FTotal4').Value:=ADODataSet1.FieldByName('FTotal4').AsInteger+AValue;
5: ADODataSet1.FieldByName('FTotal5').Value:=ADODataSet1.FieldByName('FTotal5').AsInteger+AValue;
else
ADODataSet1.FieldByName('FTotal6').Value:=ADODataSet1.FieldByName('FTotal6').AsInteger+AValue;
end;
ADODataSet1.FieldByName('FTotal').Value:=ADODataSet1.FieldByName('FTotal').AsInteger+AValue;
if ADays=0 then ADays:=1;
if ADays>=6 then ADays:=6;
ATotal[ADays]:=ATotal[ADays]+AValue;
ATotal[7]:=ATotal[7]+AValue;
end;
//将下级任务类别数量累加到上级任务类别
procedure TTas435_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;
procedure TTas435_01Form.GetData(AFromDate, AToDate: TDateTime);
var
AValue,ADays,AParentNo:Integer;
ABookmark:TBookmark;
begin
//完工数据 按实际完成日期统计
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select count(T520_001) as FTotal,T100_001,T100_002,T100_003,T520_008 as FDays');
ADOQuery1.SQL.Add('from TAS520,TAS510,TAS100');
ADOQuery1.SQL.Add('where T520_002=T510_001 and T510_004=T100_001 and '+AByFinish+'>='+GetDateString(AFromDate)+' and '+AByFinish+'<='+GetDateString(AToDate));
ADOQuery1.SQL.Add(' and T510_003 in ('+AStatusNo+') group by T100_001,T100_002,T100_003,T520_008');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
if ADODataSet1.Locate('FNo',ADOQuery1.FieldByName('T100_001').Value,[]) then
begin
ADODataSet1.Edit;
AValue:=ADOQuery1.FieldByName('FTotal').AsInteger;
ADays:=RoundB(ADOQuery1.FieldByName('FDays').AsFloat); //按日
case cbType.ItemIndex of
0:ADays:=RoundB(ADOQuery1.FieldByName('FDays').AsFloat); //按日
1:ADays:=RoundB(ADOQuery1.FieldByName('FDays').AsFloat/5); //按周
2:ADays:=RoundB(ADOQuery1.FieldByName('FDays').AsFloat/22); //按月
end;
SetFieldValue(ADays,AValue);
ADODataSet1.Post;
end else
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('T100_001').Value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -