repwork.~pas
来自「一个电力企业的后台管理程序」· ~PAS 代码 · 共 360 行
~PAS
360 行
unit RepWork;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, Spin, Buttons, fcButton, fcImgBtn,
fcShapeBtn,Form_WorkSel;
type
TFrm_AgentWork = class(TForm)
PC_Content: TPageControl;
TabSheet1: TTabSheet;
Panel3: TPanel;
Bevel1: TBevel;
Panel4: TPanel;
Panel1: TPanel;
Panel2: TPanel;
Panel5: TPanel;
Label1: TLabel;
RB_AllWork: TRadioButton;
RB_PWork: TRadioButton;
Chb_Busy: TCheckBox;
Chb_Ready: TCheckBox;
RB_ByDay: TRadioButton;
Rb_ByMon: TRadioButton;
Label3: TLabel;
Label4: TLabel;
DTP_CountDate: TDateTimePicker;
Se_Year: TSpinEdit;
Label5: TLabel;
Se_Mon: TSpinEdit;
Rb_Normal: TRadioButton;
Rb_Word: TRadioButton;
Sb_SelfDef: TfcShapeBtn;
Se_Ok: TfcShapeBtn;
Se_Cancel: TfcShapeBtn;
SB_SelWork: TfcShapeBtn;
Edt_SeledWork: TEdit;
Label2: TLabel;
procedure Se_OkClick(Sender: TObject);
procedure SB_SelWorkClick(Sender: TObject);
procedure Se_CancelClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RB_AllWorkClick(Sender: TObject);
procedure RB_PWorkClick(Sender: TObject);
procedure RB_ByDayClick(Sender: TObject);
procedure Rb_ByMonClick(Sender: TObject);
procedure Sb_SelfDefClick(Sender: TObject);
private
{ Private declarations }
Frm_WorkSel : TFrm_WorkSel;
function GetPWorStr:String;
function MakeSqlStr: String;
function MakeDateStr:String;
procedure FillTable;
public
{ Public declarations }
m_ASelWorkID: Array of String;
end;
const
SimpleAgentWork = '工号,签入时间,签出时间,工作时长,示忙时长,示闲次数,示忙次数,通话次数';
AllAgentWork = '工号,签入时间,签出时间,工作时长,示忙时长,示闲次数,示忙次数,通话次数,操作时间,操作类型';
EndTime_zjs='%1899%';
var
Frm_AgentWork: TFrm_AgentWork;
implementation
uses dbtables, SystemDM, pubReport, CommonFunc;
{$R *.DFM}
procedure TFrm_AgentWork.Se_OkClick(Sender: TObject);
var
Str : String;
begin
if Rb_PWork.Checked then
begin
if Edt_SeledWork.Text = '' then
begin
Application.MessageBox('你没选择工号,请选择工号','信息提示',MB_OK+MB_ICONINFORMATION);
Exit;
end;
end;
Str := 'SELECT WORKID,STARTTIME,ENDTIME,WORKTIMELENGTH,BUSYTIMELENGTH,SHOWREADYTIME,SHOWBUSYTIMES,CALLTIMES'+
' FROM STAT_WORKTIME_SEG_TABLE';
FillTable;
if Rb_Normal.Checked then
begin
if (not Chb_Busy.Checked) and (not Chb_Ready.Checked) then
PreviewReport('SAgentWork','SELECT * FROM STAT_WORKTIME_SEG_TABLE','','','座席工作情况统计')
else
PreviewReport('AgentWork','SELECT * FROM STAT_WORKTIME_SEG_TABLE','','','座席工作情况统计');
end;
if Rb_Word.Checked then
begin
if (not Chb_Busy.Checked) and (not Chb_Ready.Checked) then
MakeWordReport(SysDm.WReport,Str,SimpleAgentWork,'座席情况统计')
else
MakeWordReport(SysDm.WReport,'SELECT * FROM STAT_WORKTIME_SEG_TABLE',AllAgentWork,'座席情况统计');
end;
close;
end;
procedure TFrm_AgentWork.SB_SelWorkClick(Sender: TObject);
var
I: Integer;
begin
// .ShowModal;
Frm_WorkSel.ShowModal;
// begin
for I := Low(Frm_WorkSel.m_ASelWorkID) to High(Frm_WorkSel.m_ASelWorkID) do
begin
if I = Low(Frm_WorkSel.m_ASelWorkID)then
Edt_SeledWork.Text := Frm_WorkSel.m_ASelWorkID[I]
else
Edt_SeledWork.Text := Edt_SeledWork.Text + ',' + Frm_WorkSel.m_ASelWorkID[I];
end;
// end;
end;
procedure TFrm_AgentWork.FillTable;
var
I : Integer;
Qry_Insert: TQuery;
Str: String;
begin
Qry_Insert := TQuery.Create(nil);
Qry_Insert.DatabaseName := SysDM.DBMain.DatabaseName;
with TQuery.Create(nil) do
try
Close;
DataBaseName := SysDM.DBMain.DatabaseName;
Sql.Text := 'TRUNCATE TABLE STAT_WORKTIME_SEG_TABLE';
ExecSql;
Close;
Sql.Text := MakeSqlStr;
Open;
//showmessage(inttostr(FieldCount));
if FieldCount = 9 then
begin
for I := 0 to RecordCount - 1 do
begin
Qry_Insert.Close;
Qry_Insert.Sql.Text := Format('INSERT INTO STAT_WORKTIME_SEG_TABLE (ID,'+
'WORKID,STARTTIME,ENDTIME,WORKTIMELENGTH,'+
'BUSYTIMELENGTH,SHOWBUSYTIMES,SHOWREADYTIM'+
'E,CALLTIMES) VALUES (''%S'',''%S'',:A,:B,'+
'%D,%D,%D,%D,%D)',[Fields[0].AsString,Fields[1].AsString,
Fields[4].AsInteger,Fields[5].AsInteger,Fields[6].AsInteger,
Fields[7].AsInteger,Fields[8].AsInteger]);
Qry_Insert.ParamByName('A').AsDateTime := Fields[2].AsDateTime;
Qry_Insert.ParamByName('B').AsDateTime := Fields[3].AsDateTime;
Qry_Insert.ExecSQL;
Next;
end;
end;
if FieldCount = 11 then
begin
for I := 0 to RecordCount - 1 do
begin
if Fields[10].AsString = '0' then
Str := '示闲';
if Fields[10].AsString = '1' then
Str := '示忙';
Qry_Insert.Close;
Qry_Insert.Sql.Text := Format('INSERT INTO STAT_WORKTIME_SEG_TABLE VALUES '+
'(''%S'',''%S'',:A,:B,%D,%D,%D,%D,%D,:C,''%S'')',
[Fields[0].AsString,Fields[1].AsString,Fields[4].AsInteger
,Fields[5].AsInteger,Fields[6].AsInteger,Fields[7].AsInteger
,Fields[8].AsInteger,Str]);
Qry_Insert.ParamByName('A').AsDateTime := Fields[2].AsDateTime;
Qry_Insert.ParamByName('B').AsDateTime := Fields[3].AsDateTime;
Qry_Insert.ParamByName('C').AsDateTime := Fields[9].AsDateTime;
Qry_Insert.ExecSQL;
Next;
end;
end;
finally
Qry_Insert.Free;
Free;
end;
end;
function TFrm_AgentWork.MakeSqlStr: String;
var
Str,SDateCon,SPWork :String;
begin
Str := '';
SDateCon := MakeDateStr;
if Rb_AllWork.Checked then
begin
if (not Chb_Busy.Checked) and (not Chb_Ready.Checked) then
Str := 'SELECT A.* FROM STAT_WORKTIME_SEG A ' + SDateCon;
if (not Chb_Busy.Checked) and (Chb_Ready.Checked) then
Str := 'SELECT A.*,B.REDYORBUSYTIME,B.OPRATIONTYPE '+
'FROM STAT_WORKTIME_SEG A,STAT_BUSYANDREADY_DETAIL B '+ SDateCon +
' AND A.ID = B.ID AND B.OPRATIONTYPE = ''0''';
if (Chb_Busy.Checked) and (not Chb_Ready.Checked) then
Str := 'SELECT A.*,B.REDYORBUSYTIME,B.OPRATIONTYPE '+
'FROM STAT_WORKTIME_SEG A,STAT_BUSYANDREADY_DETAIL B '+ SDateCon +
' AND A.ID = B.ID AND B.OPRATIONTYPE = ''1''';
if (Chb_Busy.Checked) and (Chb_Ready.Checked) then
Str := 'SELECT A.*,B.REDYORBUSYTIME,B.OPRATIONTYPE '+
'FROM STAT_WORKTIME_SEG A,STAT_BUSYANDREADY_DETAIL B '+ SDateCon +
' AND A.ID = B.ID';
end;
if Rb_PWork.Checked then
begin
SPWork := GetPWorStr;
// if SPWork = '' then
// begin
// Application.MessageBox('你没选择工号,请选择工号','信息提示',MB_OK+MB_ICONINFORMATION);
// Exit;
// end;
if (not Chb_Busy.Checked) and (not Chb_Ready.Checked) then
Str := Format('SELECT * FROM STAT_WORKTIME_SEG A %S AND(%S)',[SDateCon,SPWork]);
if (not Chb_Busy.Checked) and (Chb_Ready.Checked) then
Str := Format('SELECT A.*,B.REDYORBUSYTIME,B.OPRATIONTYPE FROM '+
'STAT_WORKTIME_SEG A,STAT_BUSYANDREADY_DETAIL B '+
'%S AND(%S) AND A.ID = B.ID AND B.OPRATIONTYPE = ''0''',
[SDateCon,SPWork]);
if (Chb_Busy.Checked) and (not Chb_Ready.Checked) then
Str := Format('SELECT A.*,B.REDYORBUSYTIME,B.OPRATIONTYPE FROM '+
'STAT_WORKTIME_SEG A,STAT_BUSYANDREADY_DETAIL B '+
'%S AND(%S) AND A.ID = B.ID AND B.OPRATIONTYPE = ''0''',
[SDateCon,SPWork]);
if (Chb_Busy.Checked) and (Chb_Ready.Checked) then
Str := Format('SELECT A.*,B.REDYORBUSYTIME,B.OPRATIONTYPE FROM '+
'STAT_WORKTIME_SEG A,STAT_BUSYANDREADY_DETAIL B '+
'%S AND(%S) AND A.ID = B.ID',
[SDateCon,SPWork]);
end;
Result := Str;
end;
function TFrm_AgentWork.GetPWorStr: String;
var
I: Integer;
Str : String;
begin
Str := '';
for I := Low(Frm_WorkSel.m_ASelWorkID) to High(Frm_WorkSel.m_ASelWorkID) do
begin
if I = Low(Frm_WorkSel.m_ASelWorkID) then
Str := 'WORKID = ''' + Frm_WorkSel.m_ASelWorkID[I] + ''''
else
Str := Str + ' OR WORKID = ''' + Frm_WorkSel.m_ASelWorkID[I] + '''';
end;
Result := Str;
end;
function TFrm_AgentWork.MakeDateStr: String;
var
SYear,SMon,SDay,Str: String;
begin
Str := '';
if Rb_ByDay.Checked then
begin
SYear := FormatDateTime('YYYY',Dtp_CountDate.Date);
SMon := FormatDateTime('MM',Dtp_CountDate.Date);
SDay := FormatDateTime('DD',Dtp_CountDate.Date);
Str := Format('WHERE YEAR(A.STARTTIME) = %S AND MONTH(A.STARTTIME) = %S'+
' AND DAY(A.STARTTIME) = %S',[SYear,SMon,SDay]);
end;
if Rb_ByMon.Checked then
begin
Str := Format('WHERE YEAR(A.STARTTIME) = %D AND MONTH(A.STARTTIME) = %D',
[Se_Year.Value,Se_Mon.Value]);
end;
Result := Str;
end;
procedure TFrm_AgentWork.Se_CancelClick(Sender: TObject);
begin
Close;
end;
procedure TFrm_AgentWork.FormCreate(Sender: TObject);
begin
Frm_WorkSel := TFrm_WorkSel.Create(Self);
DTP_CountDate.Date := Date;
Se_Year.Value := StrToInt(FormatDateTime('YYYY',Date));
Se_Mon.Value := StrToInt(FormatDateTime('M',Date));
end;
procedure TFrm_AgentWork.RB_AllWorkClick(Sender: TObject);
begin
if Rb_AllWork.Checked then
SB_SelWork.Enabled := False
else
SB_SelWork.Enabled := True;
if Rb_PWork.Checked then
SB_SelWork.Enabled := True
else
SB_SelWork.Enabled := False;
end;
procedure TFrm_AgentWork.RB_PWorkClick(Sender: TObject);
begin
if Rb_AllWork.Checked then
SB_SelWork.Enabled := False
else
SB_SelWork.Enabled := True;
if Rb_PWork.Checked then
SB_SelWork.Enabled := True
else
SB_SelWork.Enabled := False;
end;
procedure TFrm_AgentWork.RB_ByDayClick(Sender: TObject);
begin
if Rb_ByDay.Checked then
Dtp_CountDate.Enabled := True
else
Dtp_CountDate.Enabled := False;
if Rb_ByMon.Checked then
begin
Se_Year.Enabled := True;
Se_Mon.Enabled := True;
end
else
begin
Se_Year.Enabled := False;
Se_Mon.Enabled := False;
end;
end;
procedure TFrm_AgentWork.Rb_ByMonClick(Sender: TObject);
begin
if Rb_ByDay.Checked then
Dtp_CountDate.Enabled := True
else
Dtp_CountDate.Enabled := False;
if Rb_ByMon.Checked then
begin
Se_Year.Enabled := True;
Se_Mon.Enabled := True;
end
else
begin
Se_Year.Enabled := False;
Se_Mon.Enabled := False;
end;
end;
procedure TFrm_AgentWork.Sb_SelfDefClick(Sender: TObject);
begin
FillTable;
if (not Chb_Busy.Checked) and (not Chb_Ready.Checked) then
DesignReport('SAgentWork','SELECT * FROM STAT_WORKTIME_SEG_TABLE','','','座席工作情况统计')
else
DesignReport('AgentWork','SELECT * FROM STAT_WORKTIME_SEG_TABLE','','','座席工作情况统计');
// DesignReport('CLIENTASKTYPE',CreateAskSql,'','','用户咨询报表');
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?