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

📄 tas460_01.pas.svn-base

📁 这是一个功能齐全的,代码完整的ERP企业信息管理系统,现在上传和大家分享
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
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 + -