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 + -
显示快捷键?