?? ser420_01.pas.svn-base
字號:
unit Ser420_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
TSer420_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 ByClass(AFromDate,AToDate:TDateTime); //按服務類別
procedure ByPerson(AFromDate,AToDate:TDateTime); //按接聽人員
procedure ByCustomer(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
Ser420_01Form: TSer420_01Form;
implementation
uses SYSDATA, CommFun, Ser500_01;
{$R *.dfm}
procedure TSer420_01Form.SetInterface;
begin
inherited;
Caption:=GetDBString('SER42001001'); //接聽時間分析
lblDate.Caption:=GetDBString('SER42001002'); //起止日期
lblType.Caption:=GetDBString('SER42001003'); //類型
sbSearch.Caption:=GetDBString('SER42001004'); //查詢
ADODataSet1FName.DisplayLabel:=GetDBString('SER42001005'); //名稱
ADODataSet1FTotal.DisplayLabel:=GetDBString('SER42001006'); //總的時間
ADODataSet1FFinish.DisplayLabel:=GetDBString('SER42001007'); //日均時間
ADODataSet1FPercent.DisplayLabel:=GetDBString('SER42001008'); //所占比率
cbType.Clear;
cbType.Items.Add(GetDBString('SER42001009')); //按服務類別
cbType.Items.Add(GetDBString('SER42001010')); //按接聽人員
cbType.Items.Add(GetDBString('SER42001011')); //按客戶
cbType.ItemIndex:=0;
DBChart1.Series[0].Title:=GetDBString('SER42001012'); //總的時間
DBChart1.Series[1].Title:=GetDBString('SER42001013'); //日均時間
end;
procedure TSer420_01Form.FormCreate(Sender: TObject);
var
ADate:TDateTime;
begin
inherited;
SetInterface;
ADate:=GetServerDate;
edtFromDate.Date:=GetMonthFirstDate(ADate);
edtToDate.Date:=GetMonthEndDate(ADate);
sbSearch.Click;
end;
procedure TSer420_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
ADOQuery1.Close;
end;
//將下級服務類別數量累加到上級服務類別
procedure TSer420_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 TSer420_01Form.ByClass(AFromDate,AToDate:TDateTime); //按服務類別
var
ABookmark:TBookmark;
AValue,AParentNo:Integer;
ADays:Double;
begin
//接聽時間總數 按來電日期來統計
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select sum(S500_009) as FTotal,S100_001,S100_002,S100_003');
ADOQuery1.SQL.Add(' from SER500,SER100 where S500_004=S100_001 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;
//日均時間、所占比率統計 日均時間=總時間/總天數 , 所占比率=(日均時間/480)*100%
ADays:=AToDate-AFromDate+1;
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ADODataSet1.Edit;
ADODataSet1.FieldByName('FFinish').Value:=ADODataSet1.FieldByName('FTotal').Value/ADays;
ADODataSet1.FieldByName('FPercent').Value:=(ADODataSet1.FieldByName('FFinish').Value/480)*100;
ADODataSet1.Post;
ATotal[2]:=ATotal[2]+ADODataSet1.FieldByName('FFinish').Value;
ADODataSet1.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 TSer420_01Form.ByPerson(AFromDate,AToDate:TDateTime); //按接聽人員
var
ADays:Double;
begin
//總的時間統計
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select sum(S500_009) as FTotal,H150_001,H150_003');
ADOQuery1.SQL.Add(' from SER500,HRM150 where S500_010=H150_001 and S500_007>='+GetDateString(AFromDate)+' and S500_007<='+GetDateString(AToDate));
ADOQuery1.SQL.Add(' group by H150_001,H150_003');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('H150_001').Value;
ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('H150_003').Value;
ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('H150_001').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;
//日均時間、所占比率統計 日均時間=總時間/總天數 , 所占比率=(日均時間/480)*100%
ADays:=AToDate-AFromDate+1;
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ADODataSet1.Edit;
ADODataSet1.FieldByName('FFinish').Value:=ADODataSet1.FieldByName('FTotal').Value/ADays;
ADODataSet1.FieldByName('FPercent').Value:=(ADODataSet1.FieldByName('FFinish').Value/480)*100;
ADODataSet1.Post;
ATotal[2]:=ATotal[2]+ADODataSet1.FieldByName('FFinish').Value;
ADODataSet1.Next;
end;
end;
procedure TSer420_01Form.ByCustomer(AFromDate,AToDate:TDateTime); //按客戶
var
ADays:Double;
begin
//總的時間統計
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select sum(S500_009) as FTotal,O150_001,O150_003');
ADOQuery1.SQL.Add(' from SER500,HRM150 where S500_017=O150_001 and S500_007>='+GetDateString(AFromDate)+' and S500_007<='+GetDateString(AToDate));
ADOQuery1.SQL.Add(' group by O150_001,O150_003');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('O150_001').Value;
ADODataSet1.FieldByName('FName').Value:=ADOQuery1.FieldByName('O150_003').Value;
ADODataSet1.FieldByName('FParent').Value:=ADOQuery1.FieldByName('O150_001').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;
//日均時間、所占比率統計 日均時間=總時間/總天數 , 所占比率=(日均時間/480)*100%
ADays:=AToDate-AFromDate+1;
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ADODataSet1.Edit;
ADODataSet1.FieldByName('FFinish').Value:=ADODataSet1.FieldByName('FTotal').Value/ADays;
ADODataSet1.FieldByName('FPercent').Value:=(ADODataSet1.FieldByName('FFinish').Value/480)*100;
ADODataSet1.Post;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -