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

📄 ser400_01.pas.svn-base

📁 开源的网站整站程序,功能强大带采集系统.
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
unit Ser400_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, StdCtrls, wwfltdlg, fr_Class,
  wwdbdatetimepicker, Buttons, TeeProcs, TeEngine, Chart, DbChart, Series,
  dxDBTLCl;

type
  TSer400_01Form = class(TBas200_12Form)
    lblDate: TLabel;
    lblType: TLabel;
    sbSearch: TSpeedButton;
    edtFromDate: TwwDBDateTimePicker;
    edtToDate: TwwDBDateTimePicker;
    cbType: TComboBox;
    ADODataSet1FNo: TIntegerField;
    ADODataSet1FName: TStringField;
    ADODataSet1FParent: TIntegerField;
    ADODataSet1FTotal: TIntegerField;
    ADODataSet1FFinish: TIntegerField;
    ADODataSet1FPercent: TFloatField;
    dxDBTreeList1FName: TdxDBTreeListMaskColumn;
    ADOQuery1: TADOQuery;
    Splitter1: TSplitter;
    dxDBTreeList1FTotal: TdxDBTreeListCurrencyColumn;
    dxDBTreeList1FFinish: TdxDBTreeListCurrencyColumn;
    dxDBTreeList1FPercent: TdxDBTreeListCurrencyColumn;
    ActOpen: TAction;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    Panel2: TPanel;
    DBChart2: TDBChart;
    Series1: TBarSeries;
    Series2: TBarSeries;
    Splitter2: TSplitter;
    DBChart1: TDBChart;
    BarSeries1: TBarSeries;
    BarSeries2: TBarSeries;
    ADODataSet2: TADODataSet;
    ADODataSet3: TADODataSet;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure sbSearchClick(Sender: TObject);
    procedure dxDBTreeList1DblClick(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 dxDBTreeList1FFinishDrawSummaryFooter(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 ADODataSet1AfterScroll(DataSet: TDataSet);
  private
    ABusy:Boolean;
    ATotal:array[1..2] of double;
    procedure ByServerClass(AFromDate,AToDate:TDateTime);  //按服务類別
    procedure ByCallClass(AFromDate,AToDate:TDateTime);  //按来电類別
    procedure ByPROClass(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
  Ser400_01Form: TSer400_01Form;

implementation

uses SYSDATA, CommFun;

{$R *.dfm}

procedure TSer400_01Form.SetInterface;
begin
  inherited;
  Caption:=GetDBString('SER40001001');  //来电数量分析
  lblDate.Caption:=GetDBString('SER40001002');  //起止日期
  lblType.Caption:=GetDBString('SER40001003');  //类型
  sbSearch.Caption:=GetDBString('SER40001004');  //查询
  ADODataSet1FName.DisplayLabel:=GetDBString('SER40001005');  //名称
  ADODataSet1FTotal.DisplayLabel:=GetDBString('SER40001006');  //来电总数
  ADODataSet1FFinish.DisplayLabel:=GetDBString('SER40001007');  //已完成数
  ADODataSet1FPercent.DisplayLabel:=GetDBString('SER40001008');  //完成比率
  cbType.Clear;
  cbType.Items.Add(GetDBString('SER40001009'));  //按服务类别
  cbType.Items.Add(GetDBString('SER40001010'));  //按来电类型
  cbType.Items.Add(GetDBString('SER40001011'));  //按产品类别
  cbType.ItemIndex:=0;
  DBChart1.Title.Text.Text:=GetDBString('SER40001014');  //总数分析
  DBChart2.Title.Text.Text:=GetDBString('SER40001015');  //分类分析
  DBChart1.Series[0].Title:=GetDBString('SER40001012');  //来电总数
  DBChart1.Series[1].Title:=GetDBString('SER40001013');  //已完成数
  DBChart2.Series[0].Title:=GetDBString('SER40001012');  //来电总数
  DBChart2.Series[1].Title:=GetDBString('SER40001013');  //已完成数
end;

procedure TSer400_01Form.FormCreate(Sender: TObject);
var
  ADate:TDateTime;
begin
  inherited;
  SetInterface;
  ADate:=GetServerDate;
  edtFromDate.Date:=GetMonthFirstDate(ADate);
  edtToDate.Date:=GetMonthEndDate(ADate);
  sbSearch.Click;
end;

procedure TSer400_01Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  ADOQuery1.Close;
end;

//将下级任务类别数量累加到上级服务类别
procedure TSer400_01Form.UpdateParent(AParentNo:Integer;AValue:Double;ADataSet:TDataSet;AFieldName:string);
var
  AParent:Integer;
  AClassName:String;
begin
  AParent:=GetValue('select S100_003 from SER100 where S100_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 S100_002 from SER100 where S100_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.FieldByName('FPercent').Value:=0;
    ADataSet.Post;
  end;
  //查找任务类别表中该记录是否有上级类别
  if AParent<>0 then UpdateParent(AParent,AValue,ADataSet,AFieldName);
end;

procedure TSer400_01Form.ByServerClass(AFromDate,AToDate:TDateTime);  //按服务类别
var
  ABookmark:TBookmark;
  AValue,AParentNo:Integer;
begin
  //按服务类别
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(S500_001) as FTotal,S100_001,S100_002,S100_003');
  ADOQuery1.SQL.Add('from SER100,SER500 where SER100.S100_001=SER500.S500_004 and S500_007>='+GetDateString(AFromDate)+' and S500_007<='+GetDateString(AToDate));
  ADOQuery1.SQL.Add('group by S100_001,S100_002,S100_003');
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    ADODataSet1.Append;
    ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('S100_001').Value;
    ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('S100_002').Value;
    ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('S100_003').Value;
    ADODataSet1.FieldByName('FTotal').Value:=ADOQuery1.FieldByName('FTotal').Value;
    ADODataSet1.FieldByName('FFinish').Value:=0;
    ADODataSet1.FieldByName('FPercent').Value:=0;
    ADODataSet1.Post;
    ATotal[1]:=ATotal[1]+ADOQuery1.FieldByName('FTotal').Value;
    ADOQuery1.Next;
  end;

  //已完成數量統計   按实际完成日期来统计
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(S500_001) as FFinish,S100_001,S100_002,S100_003');
  ADOQuery1.SQL.Add('from SER100,SER500,SER110 where S100_001=S500_004 and S500_026>='+GetDateString(AFromDate)+' and S500_026<='+GetDateString(AToDate));
  ADOQuery1.SQL.Add('and S500_003=S110_001 and S110_002=12');
  ADOQuery1.SQL.Add('group by S100_001,S100_002,S100_003');
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    if ADODataSet1.Locate('FNo',ADOQuery1.FieldByName('S100_001').Value,[]) then
    begin
      ADODataSet1.Edit;
      ADODataSet1.FieldByName('FFinish').Value:=ADOQuery1.FieldByName('FFinish').Value;
      ADODataSet1.FieldByName('FPercent').Value:=(ADOQuery1.FieldByName('FFinish').Value/ADODataSet1.FieldByName('FTotal').Value)*100;
      ADODataSet1.Post;
    end else
    begin
      ADODataSet1.Append;
      ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('S100_001').Value;
      ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('S100_002').Value;
      ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('S100_003').Value;
      ADODataSet1.FieldByName('FTotal').Value:=0;
      ADODataSet1.FieldByName('FFinish').Value:=ADOQuery1.FieldByName('FFinish').Value;
      ADODataSet1.FieldByName('FPercent').Value:=100;
      ADODataSet1.Post;
    end;
    ATotal[2]:=ATotal[2]+ADOQuery1.FieldByName('FFinish').Value;
    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').AsInteger;
      UpdateParent(AParentNo,AValue,ADODataSet1,'FTotal');
      ADODataSet1.GotoBookmark(ABookmark);
      AValue:=ADODataSet1.FieldByName('FFinish').AsInteger;
      UpdateParent(AParentNo,AValue,ADODataSet1,'FFinish');
    end;
    ADODataSet1.GotoBookmark(ABookmark);
    ADODataSet1.FreeBookmark(ABookmark);
    ADODataSet1.Edit;
    if ADODataSet1.FieldByName('FTotal').IsNull then
      ADODataSet1.FieldByName('FPercent').Value:=0
    else
      ADODataSet1.FieldByName('FPercent').Value:=(ADODataSet1.FieldByName('FFinish').AsInteger/ADODataSet1.FieldByName('FTotal').AsInteger)*100;
    ADODataSet1.Post;
    ADODataSet1.Next;
  end;
end;

procedure TSer400_01Form.ByCallClass(AFromDate,AToDate:TDateTime);  //按来电类型
begin
  //按来电类型   -- 来电统计
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(S500_001) AS FTotal,S500_006');
  ADOQuery1.SQL.Add('  from SER500');
  ADOQuery1.SQL.Add('  where');
  ADOQuery1.SQL.Add( ' S500_007>='+GetDateString(AFromDate)+' and S500_007<='+GetDateString(AToDate));
  ADOQuery1.SQL.Add('  GROUP BY S500_006');
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    ADODataSet1.Append;
    ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('S500_006').Value;
    if ADOQuery1.FieldByName('S500_006').Value=0 then  ADODataSet1.FieldByName('FName').Value:='电话';
    if ADOQuery1.FieldByName('S500_006').Value=1 then  ADODataSet1.FieldByName('FName').Value:='传真';
    if ADOQuery1.FieldByName('S500_006').Value=2 then  ADODataSet1.FieldByName('FName').Value:='电邮';
    if ADOQuery1.FieldByName('S500_006').Value=3 then  ADODataSet1.FieldByName('FName').Value:='其他';
    ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('S500_006').Value;
    ADODataSet1.FieldByName('FTotal').Value:=ADOQuery1.FieldByName('FTotal').Value;
    ADODataSet1.FieldByName('FFinish').Value:=0;
    ADODataSet1.FieldByName('FPercent').Value:=0;
    ADODataSet1.Post;  
    ATotal[1]:=ATotal[1]+ADOQuery1.FieldByName('FTotal').Value;
    ADOQuery1.Next;
  end;
  //已完成數量統計   按实际完成日期来统计
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(S500_001) AS FFinish,S500_006');
  ADOQuery1.SQL.Add('  from SER500,SER110');
  ADOQuery1.SQL.Add('  where SER500.S500_003=SER110.S110_001 and  SER110.S110_002=12');
  ADOQuery1.SQL.Add( ' and S500_026>='+GetDateString(AFromDate)+' and S500_026<='+GetDateString(AToDate));
  ADOQuery1.SQL.Add('  GROUP BY S500_006');
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    if ADODataSet1.Locate('FNo',ADOQuery1.FieldByName('S500_006').Value,[]) then
    begin
      ADODataSet1.Edit;
      ADODataSet1.FieldByName('FFinish').Value:=ADOQuery1.FieldByName('FFinish').Value;
      ADODataSet1.FieldByName('FPercent').Value:=(ADOQuery1.FieldByName('FFinish').Value/ADODataSet1.FieldByName('FTotal').Value)*100;
      ADODataSet1.Post;
    end else
    begin
      ADODataSet1.Append;
      ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('S500_006').Value;
      if ADOQuery1.FieldByName('S500_006').Value=0 then  ADODataSet1.FieldByName('FName').Value:='电话';
      if ADOQuery1.FieldByName('S500_006').Value=1 then  ADODataSet1.FieldByName('FName').Value:='传真';
      if ADOQuery1.FieldByName('S500_006').Value=2 then  ADODataSet1.FieldByName('FName').Value:='电邮';
      if ADOQuery1.FieldByName('S500_006').Value=3 then  ADODataSet1.FieldByName('FName').Value:='其他';
      ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('S500_006').Value;
      ADODataSet1.FieldByName('FTotal').Value:=0;
      ADODataSet1.FieldByName('FFinish').Value:=ADOQuery1.FieldByName('FFinish').Value;
      ADODataSet1.FieldByName('FPercent').Value:=100;
      ADODataSet1.Post;
    end;
    ATotal[2]:=ATotal[2]+ADOQuery1.FieldByName('FFinish').Value;
    ADOQuery1.Next;
  end;
end;

procedure TSer400_01Form.ByPROClass(AFromDate,AToDate:TDateTime);  //按产品类别
begin
  //产品类别統計
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(S500_001) as FTotal,I120_003,I150_005');
  ADOQuery1.SQL.Add('  from SER500,INV120,INV150,SER110');
  ADOQuery1.SQL.Add('  where SER500.S500_018=INV150.I150_005 and INV150.I150_005=INV120.I120_001 and SER500.S500_003=SER110.S110_001 and  SER110.S110_002=12');
  ADOQuery1.SQL.Add('  and S500_007>='+GetDateString(AFromDate)+' and S500_007<='+GetDateString(AToDate));
  ADOQuery1.SQL.Add('  GROUP BY I150_005,I120_003');
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    ADODataSet1.Append;
    ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('I150_005').Value;
    ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('I120_003').Value;
    ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('I150_005').Value;
    ADODataSet1.FieldByName('FTotal').Value:=ADOQuery1.FieldByName('FTotal').Value;
    ADODataSet1.FieldByName('FFinish').Value:=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -