⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tas440_01.pas.svn-base

📁 一个用Delphi开发的ERP软件
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
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 + -