📄 tas440_01.pas.svn-base
字号:
unit Tas440_01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Bas200_12, dxExEdtr, TeeProcs, TeEngine, Chart, DbChart, fr_Class,
ExtCtrls, DB, ADODB, ActnList, Menus, dxCntner, dxTL, dxDBCtrl, dxDBTL,
ComCtrls, ToolWin, Buttons, StdCtrls, wwdbdatetimepicker, Series, wwfltdlg, fr_prntr;
type
TTas440_01Form = class(TBas200_12Form)
ADOQuery1: TADOQuery;
lblDate: TLabel;
edtFromDate: TwwDBDateTimePicker;
edtToDate: TwwDBDateTimePicker;
Panel2: TPanel;
Splitter1: TSplitter;
DBChart2: TDBChart;
ADODataSet2: TADODataSet;
Series2: TPieSeries;
Splitter2: TSplitter;
DBChart1: TDBChart;
Series1: TBarSeries;
sbSearch: TSpeedButton;
ActOpen: TAction;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure sbSearchClick(Sender: TObject);
procedure ADODataSet1AfterScroll(DataSet: TDataSet);
procedure dxDBTreeList1DblClick(Sender: TObject);
procedure ActOpenExecute(Sender: TObject);
procedure ActPrintExecute(Sender: TObject);
private
ABusy:Boolean;
ATotal:array of double;
ACount:Integer;
procedure GetData(AFromDate,AToDate:TDateTime);
procedure SetFieldValue(AStatus,AValue:Integer);
procedure UpdateParent(AParentNo:Integer;AValue:Double;ADataSet:TDataSet;AFieldName:string);
procedure DrawSummaryFooter(
Sender: TObject; ACanvas: TCanvas; ARect: TRect; var AText: String;
var AAlignment: TAlignment; AFont: TFont; var AColor: TColor;
var ADone: Boolean);
// procedure MenuItemClick(Sender: TObject);
// procedure CreatePopmeun(AGrid:TdxDBTreeList);
procedure BuildReport;
{ Private declarations }
public
procedure SetInterface; override;
procedure RefreshEvent; override;
procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
{ Public declarations }
end;
var
Tas440_01Form: TTas440_01Form;
implementation
uses SYSDATA, CommFun, Tas510_01;
{$R *.dfm}
procedure TTas440_01Form.SetInterface;
var
ADate:TDateTime;
begin
inherited;
Caption:=GetDBString('TAS44001001'); //未完任務分析
lblDate.Caption:=GetDBString('TAS44001002'); //起止日期
sbSearch.Caption:=GetDBString('TAS44001004'); //查询
ADate:=GetServerDate;
edtFromDate.Date:=GetMonthFirstDate(ADate);
edtToDate.Date:=GetMonthEndDate(ADate);
end;
procedure TTas440_01Form.FormCreate(Sender: TObject);
begin
inherited;
SetInterface;
sbSearch.Click;
end;
procedure TTas440_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
ADOQuery1.Close;
end;
procedure TTas440_01Form.sbSearchClick(Sender: TObject);
var
AFieldName:string;
AColumn:TdxDBTreeListColumn;
I:Integer;
S: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;
Screen.Cursor:=crHourGlass;
if Assigned(SYSDM.wwFilterDialog1.Form) then SYSDM.wwFilterDialog1.ClearFilter;
ABusy:=True;
ADODataSet1.DisableControls;
dxDBTreeList1.DestroyColumns;
ADODataSet1.Close;
ADODataSet1.FieldDefs.Clear;
ADODataSet1.FieldDefs.Add('FNo',ftInteger,0);
ADODataSet1.FieldDefs.Add('FName',ftString,50);
ADODataSet1.FieldDefs.Add('FParent',ftInteger,0);
AColumn:=dxDBTreeList1.CreateColumn(TdxDBTreeListMaskColumn);
AColumn.FieldName:='FName';
AColumn.HeaderAlignment:=taCenter;
AColumn.BandIndex:=0;
AColumn.DisableEditor:=False;
AColumn.Width:=220;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from TAS120 where T120_001 not in ('+AStatusNo+')');
ADOQuery1.Open;
ACount:=ADOQuery1.RecordCount;
SetLength(ATotal,ACount+1);
I:=0;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
ATotal[I]:=0;
AFieldName:='F'+ADOQuery1.FieldByName('T120_001').AsString;
ADODataSet1.FieldDefs.Add(AFieldName,ftInteger,0);
AColumn:=dxDBTreeList1.CreateColumn(TdxDBTreeListMaskColumn);
AColumn.FieldName:=AFieldName;
AColumn.HeaderAlignment:=taCenter;
AColumn.BandIndex:=1;
AColumn.DisableEditor:=False;
AColumn.SummaryFooterFormat:='0';
AColumn.SummaryFooterType:=cstSum;
AColumn.OnDrawSummaryFooter:=DrawSummaryFooter;
AColumn.Tag:=I;
AColumn.Width:=60;
ADOQuery1.Next;
I:=I+1;
end;
ATotal[ACount]:=0;
ADODataSet1.FieldDefs.Add('FTotal',ftInteger,0);
AColumn:=dxDBTreeList1.CreateColumn(TdxDBTreeListMaskColumn);
AColumn.FieldName:='FTotal';
AColumn.HeaderAlignment:=taCenter;
AColumn.BandIndex:=2;
AColumn.DisableEditor:=False;
AColumn.SummaryFooterFormat:='0';
AColumn.SummaryFooterType:=cstSum;
AColumn.OnDrawSummaryFooter:=DrawSummaryFooter;
AColumn.Tag:=ACount;
AColumn.Width:=80;
ADODataSet1.CreateDataSet;
ADODataSet1.FieldByName('FNo').Visible:=False;
ADODataSet1.FieldByName('FParent').Visible:=False;
//取得字段的名稱
ADODataSet1.FieldByName('FName').DisplayLabel:=GetDBString('TAS44001006'); //任务类别
ADODataSet1.FieldByName('FTotal').DisplayLabel:=GetDBString('TAS44001007'); //小计
dxDBTreeList1.DisableAlign;
for I:=0 to ADODataSet1.FieldCount-1 do
begin
AFieldName:=ADODataSet1.Fields[I].FieldName;
S:=AFieldName;
Delete(S,1,1);
if ADOQuery1.Locate('T120_001',S,[]) then
ADODataSet1.FieldByName(AFieldName).DisplayLabel:=ADOQuery1.FieldByName('T120_003').AsString;
end;
dxDBTreeList1.Refresh;
// CreatePopmeun(dxDBTreeList1);
GetData(edtFromDate.Date,edtToDate.Date);
ADODataSet1.EnableControls;
DBChart1.RefreshData;
ABusy:=False;
ADODataSet1AfterScroll(ADODataSet1);
DBChart2.RefreshData;
Screen.Cursor:=crDefault;
end;
procedure TTas440_01Form.SetFieldValue(AStatus,AValue:Integer);
var
AFieldName:string;
begin
if not (ADODataSet1.State in [dsInsert,dsEdit]) then Exit;
AFieldName:='F'+IntToStr(AStatus);
ADODataSet1.FieldByName(AFieldName).Value:=ADODataSet1.FieldByName(AFieldName).AsInteger+AValue;
ADODataSet1.FieldByName('FTotal').Value:=ADODataSet1.FieldByName('FTotal').AsInteger+AValue;
ATotal[ACount]:=ATotal[ACount]+AValue;
end;
//将下级任务类别数量累加到上级任务类别
procedure TTas440_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 TTas440_01Form.GetData(AFromDate, AToDate: TDateTime);
var
AValue,AStatus,AParentNo,ANo:Integer;
ABookmark:TBookmark;
AFieldName:string;
begin
//未完成数量 按申报日期统计
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select count(T510_001) as FTotal,T100_001,T100_002,T100_003,T120_001');
ADOQuery1.SQL.Add('from TAS510,TAS100,TAS120');
ADOQuery1.SQL.Add('where T510_004=T100_001 and T510_003=T120_001 and '+AByTotal+'>='+GetDateString(AFromDate)+' and '+AByTotal+'<='+GetDateString(AToDate));
ADOQuery1.SQL.Add(' and T510_003 not in ('+AStatusNo+') group by T100_001,T100_002,T100_003,T120_001');
ADOQuery1.SQL.Add('order by T100_003,T100_001');
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;
AStatus:=ADOQuery1.FieldByName('T120_001').AsInteger;
SetFieldValue(AStatus,AValue);
ADODataSet1.Post;
AFieldName:='F'+IntToStr(AStatus);
ANo:=dxDBTreeList1.ColumnByFieldName(AFieldName).Tag;
ATotal[ANo]:=ATotal[ANo]+AValue;
end else
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').AsInteger;
AStatus:=ADOQuery1.FieldByName('T120_001').AsInteger;
SetFieldValue(AStatus,AValue);
ADODataSet1.Post;
AFieldName:='F'+IntToStr(AStatus);
ANo:=dxDBTreeList1.ColumnByFieldName(AFieldName).Tag;
ATotal[ANo]:=ATotal[ANo]+AValue;
end;
ADOQuery1.Next;
end;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from TAS120 where T120_001 not in ('+AStatusNo+')');
ADOQuery1.Open;
//累加數量到上級類別
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ABookmark:=ADODataSet1.GetBookmark;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -