📄 ser400_01.pas.svn-base
字号:
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 + -