📄 tas470_01.pas.svn-base
字号:
unit Tas470_01;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Bas200_11, dxExEdtr, DB, ADODB, ActnList, Menus, dxCntner, dxTL,
dxDBCtrl, dxDBGrid, ExtCtrls, ComCtrls, ToolWin, TeeProcs, TeEngine, fr_Class,
Chart, DbChart, Buttons, StdCtrls, wwdbdatetimepicker, Series, TeeFunci, wwfltdlg;
type
TTas470_01Form = class(TBas200_11Form)
lblDate: TLabel;
edtFromDate: TwwDBDateTimePicker;
edtToDate: TwwDBDateTimePicker;
sbSearch: TSpeedButton;
ADOQuery1: TADOQuery;
ADODataSet1FEmpID: TStringField;
ADODataSet1FEmpName: TStringField;
ADODataSet1FEngName: TStringField;
ADODataSet1FDept: TStringField;
ADODataSet1FPost: TStringField;
ADODataSet1FTotal: TIntegerField;
ADODataSet1FFinish: TIntegerField;
ADODataSet1FReturn: TIntegerField;
ADODataSet1FPercent: TFloatField;
dxDBGrid1FEmpID: TdxDBGridMaskColumn;
dxDBGrid1FEmpName: TdxDBGridMaskColumn;
dxDBGrid1FEngName: TdxDBGridMaskColumn;
dxDBGrid1FDept: TdxDBGridMaskColumn;
dxDBGrid1FPost: TdxDBGridMaskColumn;
dxDBGrid1FTotal: TdxDBGridMaskColumn;
dxDBGrid1FFinish: TdxDBGridMaskColumn;
dxDBGrid1FReturn: TdxDBGridMaskColumn;
dxDBGrid1FPercent: TdxDBGridMaskColumn;
ADODataSet1FNo: TIntegerField;
ActOpen: TAction;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure sbSearchClick(Sender: TObject);
procedure ActOpenExecute(Sender: TObject);
procedure dxDBGrid1DblClick(Sender: TObject);
procedure ActPrintExecute(Sender: TObject);
private
procedure GetData(AFromDate, AToDate: TDateTime);
procedure SetFieldValue(AValue:Integer;APerson,AFieldName:string);
{ Private declarations }
public
procedure SetInterface; override;
procedure RefreshEvent; override;
procedure ReportGetValue(const ParName: String; var ParValue: Variant); override;
{ Public declarations }
end;
var
Tas470_01Form: TTas470_01Form;
implementation
uses SYSDATA, CommFun, Tas520_01;
{$R *.dfm}
procedure TTas470_01Form.SetInterface;
var
ADate:TDateTime;
begin
inherited;
Caption:=GetDBString('TAS47001001'); //员工绩效分析
lblDate.Caption:=GetDBString('TAS47001002'); //起止日期
sbSearch.Caption:=GetDBString('TAS47001004'); //查询
ADODataSet1FEmpID.DisplayLabel:=GetDBString('TAS47001006'); //员工编号
ADODataSet1FEmpName.DisplayLabel:=GetDBString('TAS47001007'); //员工姓名
ADODataSet1FEngName.DisplayLabel:=GetDBString('TAS47001008'); //英文姓名
ADODataSet1FDept.DisplayLabel:=GetDBString('TAS47001009'); //部门名称
ADODataSet1FPost.DisplayLabel:=GetDBString('TAS47001010'); //职务名称
ADODataSet1FTotal.DisplayLabel:=GetDBString('TAS47001011'); //任务总数
ADODataSet1FFinish.DisplayLabel:=GetDBString('TAS47001012'); //已完成数
ADODataSet1FReturn.DisplayLabel:=GetDBString('TAS47001013'); //返工数量
ADODataSet1FPercent.DisplayLabel:=GetDBString('TAS47001014'); //绩效比率
ADate:=GetServerDate;
edtFromDate.Date:=GetMonthFirstDate(ADate);
edtToDate.Date:=GetMonthEndDate(ADate);
end;
procedure TTas470_01Form.FormCreate(Sender: TObject);
begin
inherited;
SetInterface;
sbSearch.Click;
end;
procedure TTas470_01Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
ADOQuery1.Close;
end;
procedure TTas470_01Form.sbSearchClick(Sender: TObject);
begin
inherited;
//查询
if (edtFromDate.Text='') or (edtToDate.Text='') then
begin
ShowMsg('UMS10000319'); //起止日期不可为空
if edtFromDate.Text='' then edtFromDate.SetFocus else edtToDate.SetFocus;
Abort;
end;
if edtFromDate.Date>edtToDate.Date then
begin
ShowMsg('UMS10000320'); //结束日期不能小于起始日期
edtToDate.SetFocus;
Abort;
end;
try
Screen.Cursor:=crHourGlass;
if Assigned(SYSDM.wwFilterDialog1.Form) then SYSDM.wwFilterDialog1.ClearFilter;
ADODataSet1.DisableControls;
ADODataSet1.Close;
ADODataSet1.FieldDefs.Clear;
ADODataSet1.FieldDefs.Add('FNo',ftInteger,0);
ADODataSet1.FieldDefs.Add('FEmpID',ftString,20);
ADODataSet1.FieldDefs.Add('FEmpName',ftString,20);
ADODataSet1.FieldDefs.Add('FEngName',ftString,20);
ADODataSet1.FieldDefs.Add('FDept',ftString,50);
ADODataSet1.FieldDefs.Add('FPost',ftString,30);
ADODataSet1.FieldDefs.Add('FTotal',ftInteger,0);
ADODataSet1.FieldDefs.Add('FFinish',ftInteger,0);
ADODataSet1.FieldDefs.Add('FReturn',ftInteger,0);
ADODataSet1.FieldDefs.Add('FPercent',ftFloat,0);
ADODataSet1.CreateDataSet;
GetData(edtFromDate.Date,edtToDate.Date);
finally
ADODataSet1.EnableControls;
// DBChart1.RefreshData;
Screen.Cursor:=crDefault;
end;
end;
procedure TTas470_01Form.SetFieldValue(AValue:Integer;APerson,AFieldName:string);
var
I:Integer;
S:String;
ANoStrList:TStringList;
begin
ANoStrList:=TStringList.Create;
for I:=1 to Length(APerson) do
begin
if Copy(APerson,I,1)='[' then
S:=''
else if Copy(APerson,I,1)=']' then
begin
ANoStrList.Add(trim(S));
S:='';
end else
S:=S+Copy(APerson,I,1);
end;
for I:=0 to ANoStrList.Count-1 do
begin
if ADODataSet1.Locate('FNo',ANoStrList[I],[]) then
begin
ADODataSet1.Edit;
ADODataSet1.FieldByName(AFieldName).Value:=ADODataSet1.FieldByName(AFieldName).AsInteger+AValue;
ADODataSet1.Post;
end;
end;
ANoStrList.Free;
end;
procedure TTas470_01Form.GetData(AFromDate, AToDate: TDateTime);
var
AValue:Integer;
APerson:string;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select H150_001,H150_002,H150_003,H150_004,H100_002,H120_003');
ADOQuery1.SQL.Add('from HRM150,HRM100,HRM120');
ADOQuery1.SQL.Add('where H150_005=H100_001 and H150_008=H120_001 order by H150_002');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ADODataSet1.Append;
ADODataSet1.FieldByName('FNo').Value:=ADOQuery1.FieldByName('H150_001').Value;
ADODataSet1.FieldByName('FEmpID').Value:=ADOQuery1.FieldByName('H150_002').Value;
ADODataSet1.FieldByName('FEmpName').Value:=ADOQuery1.FieldByName('H150_003').Value;
ADODataSet1.FieldByName('FEngName').Value:=ADOQuery1.FieldByName('H150_004').Value;
ADODataSet1.FieldByName('FDept').Value:=ADOQuery1.FieldByName('H100_002').Value;
ADODataSet1.FieldByName('FPost').Value:=ADOQuery1.FieldByName('H120_003').Value;
ADODataSet1.Post;
ADOQuery1.Next;
end;
//任务总数
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select count(T510_001) as FTotal,T520_003');
ADOQuery1.SQL.Add('from TAS510,TAS520');
ADOQuery1.SQL.Add('where T510_001=T520_002 and T520_006>='+GetDateString(AFromDate)+' and T520_006<='+GetDateString(AToDate));
ADOQuery1.SQL.Add('group by T520_003');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
AValue:=ADOQuery1.FieldByName('FTotal').AsInteger;
APerson:=ADOQuery1.FieldByName('T520_003').Value;
SetFieldValue(AValue,APerson,'FTotal');
ADOQuery1.Next;
end;
//已完成数
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select count(T510_001) as FFinish,T520_003');
ADOQuery1.SQL.Add('from TAS510,TAS520');
ADOQuery1.SQL.Add('where T510_001=T520_002 and T510_003=3 and T520_006>='+GetDateString(AFromDate)+' and T520_006<='+GetDateString(AToDate));
ADOQuery1.SQL.Add('group by T520_003');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
AValue:=ADOQuery1.FieldByName('FFinish').AsInteger;
APerson:=ADOQuery1.FieldByName('T520_003').Value;
SetFieldValue(AValue,APerson,'FFinish');
ADOQuery1.Next;
end;
//返工数量
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select count(T510_001) as FReturn,T520_003');
ADOQuery1.SQL.Add('from TAS510,TAS520');
ADOQuery1.SQL.Add('where T510_001=T520_002 and T510_003=4 and T520_006>='+GetDateString(AFromDate)+' and T520_006<='+GetDateString(AToDate));
ADOQuery1.SQL.Add('group by T520_003');
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
AValue:=ADOQuery1.FieldByName('FReturn').AsInteger;
APerson:=ADOQuery1.FieldByName('T520_003').Value;
SetFieldValue(AValue,APerson,'FReturn');
ADOQuery1.Next;
end;
//绩效比率
//績效比率=(已完成數-返工數量)/ 任务总数 * 100%
ADODataSet1.First;
while not ADODataSet1.Eof do
begin
ADODataSet1.Edit;
if ADODataSet1.FieldByName('FTotal').AsInteger=0 then
ADODataSet1.FieldByName('FPercent').Value:=0
else
ADODataSet1.FieldByName('FPercent').Value:=((ADODataSet1.FieldByName('FFinish').AsInteger-ADODataSet1.FieldByName('FReturn').AsInteger)/ADODataSet1.FieldByName('FTotal').AsInteger)*100;
ADODataSet1.Post;
ADODataSet1.Next;
end;
end;
procedure TTas470_01Form.ActOpenExecute(Sender: TObject);
var
AFieldInfo:TwwFieldInfo;
begin
inherited;
//查看
if ADODataSet1.IsEmpty then Exit;
Screen.Cursor:=crHourGlass;
Tas520_01Form:=TTas520_01Form.Create(Application);
Tas520_01Form.edtFromDate.Date:=edtFromDate.Date;
Tas520_01Form.edtToDate.Date:=edtToDate.Date;
Tas520_01Form.sbSearch.Click;
FilterDialog(Tas520_01Form.DataSource1,False);
AFieldInfo:=TwwFieldInfo.create;
AFieldInfo.FieldName:='T520_003';
AFieldInfo.DisplayLabel:=Tas520_01Form.ADOQuery1T520_019.DisplayLabel;
AFieldInfo.MatchType:=fdMatchAny;
AFieldInfo.CaseSensitive:=False;
AFieldInfo.NonMatching:=False;
AFieldInfo.FilterValue:=ADODataSet1FEmpName.AsString;
SYSDM.wwFilterDialog1.FieldInfo.Add(AFieldInfo);
SYSDM.wwFilterDialog1.ApplyFilter;
Tas520_01Form.ARecordCount:=GetDataSetCount(Tas520_01Form.ADOQuery1);
Screen.Cursor:=crDefault;
Tas520_01Form.ShowModal;
// if Assigned(AFieldInfo) then AFieldInfo.Free;
end;
procedure TTas470_01Form.dxDBGrid1DblClick(Sender: TObject);
begin
inherited;
ActOpen.Execute;
end;
procedure TTas470_01Form.ReportGetValue(const ParName: String; var ParValue: Variant);
begin
inherited;
if ParName='ADate' then ParValue:=lblDate.Caption //起止日期
else if ParName='AFromDate' then ParValue:=edtFromDate.Text //
else if ParName='AToDate' then ParValue:=edtToDate.Text //
else if ParName='FEmpID' then ParValue:=ADODataSet1FEmpID.DisplayLabel //员工编号
else if ParName='FEmpName' then ParValue:=ADODataSet1FEmpName.DisplayLabel //员工姓名
else if ParName='FEngName' then ParValue:=ADODataSet1FEngName.DisplayLabel //英文姓名
else if ParName='FDept' then ParValue:=ADODataSet1FDept.DisplayLabel //部门名称
else if ParName='FPost' then ParValue:=ADODataSet1FPost.DisplayLabel //职务名称
else if ParName='FTotal' then ParValue:=ADODataSet1FTotal.DisplayLabel //任务总数
else if ParName='FFinish' then ParValue:=ADODataSet1FFinish.DisplayLabel //已完成数
else if ParName='FReturn' then ParValue:=ADODataSet1FReturn.DisplayLabel //返工数量
else if ParName='FPercent' then ParValue:=ADODataSet1FPercent.DisplayLabel //绩效比率
end;
procedure TTas470_01Form.ActPrintExecute(Sender: TObject);
begin
try
SYSDM.frReport2.OnGetValue:=ReportGetValue;
inherited;
finally
SYSDM.frReport2.OnGetValue:=nil;
end;
end;
procedure TTas470_01Form.RefreshEvent;
begin
inherited;
sbSearch.Click;
end;
initialization
RegisterClass(TTas470_01Form);
finalization
UnRegisterClass(TTas470_01Form);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -