📄 cwa550_02.pas.svn-base
字号:
ATime[3]:=qryCwa120.FieldByName('C120_006').AsString;
ATime[4]:=qryCwa120.FieldByName('C120_007').AsString;
ATime[5]:=qryCwa120.FieldByName('C120_008').AsString;
ATime[6]:=qryCwa120.FieldByName('C120_009').AsString;
AType[1]:=qryCwa120.FieldByName('C120_012').AsInteger;
AType[2]:=qryCwa120.FieldByName('C120_013').AsInteger;
AType[3]:=qryCwa120.FieldByName('C120_014').AsInteger;
ADate:=qryCwa120.FieldByName('C120_003').Value;
//取得电脑卡号
AID:=GetValue('select top 1 C130_001 from CWA130 where C130_002='+IntToStr(AEmpNo)+' and C130_003<='+GetDateString(ADate)+' order by C130_003 desc');
CalcTime(AEmpNo,AID,ADate,AMin,ATime,AType); //计算时间
qryCwa120.Next;
end;
end;
procedure TCwa550_02Form.SetInterface;
begin
Caption:=GetDBString('CWA55002001'); //计算
lblDept.Caption:=GetDBString('CWA55002002'); //部门编号
lblFromEmpID.Caption:=GetDBString('CWA55002003'); //员工编号
lblTo.Caption:=GetDBString('CWA55002004'); //至
lblYear.Caption:=GetDBString('CWA55002005'); //年份月份
cbReCalc.Caption:=GetDBString('CWA55002006'); //重新计算否
bbtnOk.Caption:=GetDBString('CWA55002007'); //确定(&O)
bbtnExit.Caption:=GetDBString('CWA55002008'); //退出(&X)
PageControl1.ActivePageIndex:=0;
end;
procedure TCwa550_02Form.FormCreate(Sender: TObject);
begin
inherited;
qryHrm150.Close;
qryHrm150.SQL.Clear;
if not ASuper then
qryHrm150.SQL.Add('select H150_001,H150_002,H150_003 from HRM150 where H150_005 in (select S500C_002 from SYS500C where S500C_003=''DEP'' and S500C_004='+GetBoolean(True)+' and S500C_001='+IntToStr(AUserID)+') order by H150_002')
else
qryHrm150.SQL.Add('select H150_001,H150_002,H150_003 from HRM150 order by H150_002');
qryHrm150.Open;
//部门资料
cbDepart.Items.Clear;
cbDepart.Items.Add(GetDBString('COM00004007')); //所有部门
qryHrm100.Close;
qryHrm100.SQL.Clear;
qryHrm100.SQL.Add('select * from HRM100 where H100_004='+GetBoolean(True));
qryHrm100.Open;
while not qryHrm100.Eof do
begin
cbDepart.Items.Add(qryHrm100.FieldByName('H100_002').AsString);
qryHrm100.Next;
end;
cbDepart.ItemIndex:=0;
GetYears(cbYear);
GetMonths(StrToInt(cbYear.Text),cbMonth);
//设置界面信息
SetInterface;
Label1.Alignment:=taLeftJustify;
Label2.Alignment:=taLeftJustify;
end;
procedure TCwa550_02Form.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
//
end;
//计算考勤
procedure TCwa550_02Form.CalcCwa(AEmpNo,AYear,AMonth,ADays,AHours:Integer;AIsCheck:Boolean);
var
AItemNo:Integer;
AItemID,AItemNm:string;
AType:Integer; //项目类型
AIsAuto:Boolean;
begin
//如果系统参数设置为"手工录入考勤数据",则由考勤事务表(CWA500)中计算出'迟到','早退','旷工'
//否则,由卡钟的考勤数据中计算'迟到','早退','旷工'
AIsAuto:=GetSysParams('CWA0007')='2'; //按卡钟数据计算考勤
qryCwa150.Close;
qryCwa150.SQL.Clear;
qryCwa150.SQL.Add('select * from CWA150 where C150_008='+GetBoolean(True)+' order by C150_007');
qryCwa150.Open;
ProgressBar1.Position:=0;
ProgressBar1.Max:=qryCwa150.RecordCount;
qryCwa150.First;
while not qryCwa150.Eof do
begin
AItemNo:=qryCwa150.FieldByName('C150_001').Value; //项目电脑编号
AItemID:=qryCwa150.FieldByName('C150_002').Value; //项目编号
AItemNm:=qryCwa150.FieldByName('C150_003').Value; //项目名称
AType:=qryCwa150.FieldByName('C150_004').Value; //0=按考勤事务处理,1=按公式计算
Application.ProcessMessages;
ProgressBar1.Position:=ProgressBar1.Position+1;
Label1.Caption:=GetDBString('CWA55002011')+'['+AItemID+']['+AItemNm+']...'; //正在计算考勤项目
Update;
if (AItemNo in [1,2,3]) and (AIsAuto) then
begin
//按卡钟数据自动计算考勤
CalcByAuto(AItemNo,AEmpNo,AYear,AMonth);
end else
begin
case AType of
0:CalcByTrans(AItemNo,AEmpNo,AYear,AMonth,AIsCheck);
1:CalcByFormalu(AItemNo,AEmpNo,AYear,AMonth,ADays,AHours);
end;
end;
qryCwa150.Next;
end;
end;
procedure TCwa550_02Form.bbtnOkClick(Sender: TObject);
var
AFromEmpID,AToEmpID,AYear,AMonth:String;
ADeptNo,AEmpNo:Integer;
AEmpID,AEmpNm:string;
I:Integer;
AMin:Integer;
ASec:Double;
ADays,AHours:Integer;
S:String;
AIsCheck:Boolean;
begin
inherited;
//确定
ADeptNo:=0;
if cbDepart.ItemIndex<>0 then
ADeptNo:=GetValue('select H100_001 from HRM100 where H100_002='+''''+cbDepart.Text+'''');
AFromEmpID:=trim(edtFromEmpID.Text);
AToEmpID:=trim(edtToEmpID.Text);
AYear:=cbYear.Text;
AMonth:=cbMonth.Text;
if AFromEmpID>AToEmpID then
begin
ShowMsg('UMS10000076'); //起始员工编号不能大于结束编号
edtFromEmpID.SetFocus;
Abort;
end;
if (AYear='') or (AMonth='') then
begin
ShowMsg('UMS10000218'); //年份或月份不能为空
if AYear='' then cbYear.SetFocus
else if AMonth='' then cbMonth.SetFocus;
Abort;
end;
//取得期段的起始结束日期
GetPeriodDate(AYear,AMonth,AStartDate,AEndDate,APeriod);
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('select 1 from CWA550A where C550A_006='+GetBoolean(True)+' and C550A_001='+AYear+' and C550A_002='+IntToStr(APeriod));
SYSDM.qryQuery.Open;
if not SYSDM.qryQuery.IsEmpty then
begin
ShowMsg('UMS10000215'); //本月数据已审核,不能重新计算
Abort;
end;
Screen.Cursor:=crHourGlass;
bbtnOk.Enabled:=False;
AStartTime:=GetTickCount;
PageControl1.ActivePageIndex:=1;
//计薪天数(1=按每月实际天数,2=按固定天数(2-3位数字表示天数))
ADays:=30;
S:=trim(GetSysParams('PAY0001'));
if copy(S,1,1)='1' then
ADays:=GetValue('select C170_005-C170_004+1 from CWA170 where C170_001='+AYear+' and C170_002='+IntToStr(APeriod))
else if copy(S,1,1)='2' then
ADays:=StrToInt(copy(S,2,2));
//每日开工时数
AHours:=StrToInt(trim(GetSysParams('CWA0006')));
//薪资考勤事务数据是否必须审核
AIsCheck:=GetSysParams('PAY0006')='Y';
if AFromEmpID='' then AFromEmpID:=VarToStr(GetValue('select min(H150_002) from HRM150'));
if AToEmpID='' then AToEmpID:=VarToStr(GetValue('select max(H150_002) from HRM150'));
//删除考勤明细数据
Label2.Caption:=GetDBString('CWA55002012')+'...'; //正在删除考勤明细数据
Update;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('delete from CWA550B');
SYSDM.qryQuery.SQL.Add('where C550B_001>='+GetDateString(AStartDate)+' and C550B_001<='+GetDateString(AEndDate));
SYSDM.qryQuery.SQL.Add(' and exists(select 1 from HRM150 where C550B_002=H150_001 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
SYSDM.qryQuery.SQL.Add(' )');
SYSDM.qryQuery.ExecSQL;
//删除考勤汇总数据
Label2.Caption:=GetDBString('CWA55002013')+'...'; //正在删除考勤汇总数据
Update;
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('delete from CWA550A where C550A_001='+AYear+' and C550A_002='+IntToStr(APeriod));
SYSDM.qryQuery.SQL.Add(' and exists(select 1 from HRM150 where C550A_003=H150_001 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
SYSDM.qryQuery.SQL.Add(')');
SYSDM.qryQuery.ExecSQL;
qryEmployee.Close;
qryEmployee.SQL.Clear;
qryEmployee.SQL.Add('select H150_001,H150_002,H150_003 from HRM150 where H150_012<>2 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
if ADeptNo<>0 then qryEmployee.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
qryEmployee.Open;
ProgressBar2.Position:=0;
ProgressBar2.Max:=qryEmployee.RecordCount;
qryEmployee.First;
I:=1;
while not qryEmployee.Eof do
begin
AEmpNo:=qryEmployee.FieldByName('H150_001').Value;
AEmpID:=qryEmployee.FieldByName('H150_002').Value;
AEmpNm:=qryEmployee.FieldByName('H150_003').Value;
Application.ProcessMessages;
ProgressBar2.Position:=ProgressBar2.Position+1;
Label2.Caption:=GetDBString('CWA55002010')+'['+AEmpID+']['+AEmpNm+']... '+IntToStr(I)+'/'+IntToStr(qryEmployee.RecordCount); //正在计算员工的考勤
Update;
CalcCwa(AEmpNo,StrToInt(AYear),APeriod,ADays,AHours,AIsCheck);
qryEmployee.Next;
I:=I+1;
end;
//考勤汇总表(考勤年份,考勤月份,员工编号,考勤项目,数值,已审核否)
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('insert into CWA550A(C550A_001,C550A_002,C550A_003,C550A_004,C550A_005,C550A_006)');
SYSDM.qryQuery.SQL.Add('select '+AYear+','+IntToStr(APeriod)+',C550B_002,C550B_003,sum(C550B_004),0 ');
SYSDM.qryQuery.SQL.Add('from CWA550B ');
SYSDM.qryQuery.SQL.Add('where C550B_001>='+GetDateString(AStartDate)+' and C550B_001<='+GetDateString(AEndDate));
SYSDM.qryQuery.SQL.Add(' and exists(select 1 from HRM150 where C550B_002=H150_001 and H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+'''');
SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
SYSDM.qryQuery.SQL.Add(')');
SYSDM.qryQuery.SQL.Add('group by C550B_002,C550B_003');
SYSDM.qryQuery.ExecSQL;
//插入没有明细数据的所有使用的考勤项目
//考勤汇总表(考勤年份,考勤月份,员工编号,考勤项目,数值,已审核否)
SYSDM.qryQuery.Close;
SYSDM.qryQuery.SQL.Clear;
SYSDM.qryQuery.SQL.Add('insert into CWA550A(C550A_001,C550A_002,C550A_003,C550A_004,C550A_005,C550A_006)');
SYSDM.qryQuery.SQL.Add('select '+AYear+','+IntToStr(APeriod)+',H150_001,C150_001,0,0 ');
SYSDM.qryQuery.SQL.Add('from HRM150 A, CWA150 B ');
SYSDM.qryQuery.SQL.Add('where H150_002>='+''''+AFromEmpID+''''+' and H150_002<='+''''+AToEmpID+''''+' and C150_008='+GetBoolean(True));
SYSDM.qryQuery.SQL.Add(' and H150_012<>2 ');
if ADeptNo<>0 then SYSDM.qryQuery.SQL.Add(' and H150_005='+IntToStr(ADeptNo));
SYSDM.qryQuery.SQL.Add(' and not exists(select 1 from CWA550A where C550A_001='+AYear+' and C550A_002='+IntToStr(APeriod)+' and C550A_003=H150_001 and C550A_004=C150_001)');
SYSDM.qryQuery.ExecSQL;
Screen.Cursor:=crDefault;
bbtnOk.Enabled:=True;
ARunTime:=(GetTickCount-AStartTime)/1000;
AMin:=Round(ARunTime) div 60;
ASec:=ARunTime-AMin*60;
ShowMsg(GetDBString('UMS10000217')+IntToStr(AMin)+GetDBString('CWA55002014')+' '+FloatToStr(ASec)+GetDBString('CWA55002015'),1); //考勤计算成功,共计耗时:
ModalResult:=1;
end;
procedure TCwa550_02Form.bbtnExitClick(Sender: TObject);
begin
inherited;
//退出
Close;
end;
procedure TCwa550_02Form.SpeedButton1Click(Sender: TObject);
begin
inherited;
//员工编号查询1
if not edtFromEmpID.Focused then edtFromEmpID.SetFocus;
HwSelDataForm:=THwSelDataForm.Create(Application);
HwSelDataForm.OpenSelData(qryHrm150,nil);
if HwSelDataForm.ShowModal=1 then
begin
edtFromEmpID.Text:=qryHrm150.FieldByName('H150_002').AsString;
end;
end;
procedure TCwa550_02Form.SpeedButton2Click(Sender: TObject);
begin
inherited;
//员工编号查询2
if not edtToEmpID.Focused then edtToEmpID.SetFocus;
HwSelDataForm:=THwSelDataForm.Create(Application);
HwSelDataForm.OpenSelData(qryHrm150,nil);
if HwSelDataForm.ShowModal=1 then
begin
edtToEmpID.Text:=qryHrm150.FieldByName('H150_002').AsString;
end;
end;
procedure TCwa550_02Form.edtFromEmpIDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if Key=vk_F4 then SpeedButton1.Click;
end;
procedure TCwa550_02Form.edtToEmpIDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if Key=vk_F4 then SpeedButton2.Click;
end;
procedure TCwa550_02Form.cbYearChange(Sender: TObject);
begin
inherited;
GetMonths(StrToInt(cbYear.Text),cbMonth);
end;
procedure TCwa550_02Form.cbMonthChange(Sender: TObject);
begin
inherited;
//取得期段的起始结束日期
GetPeriodDate(cbYear.Text,cbMonth.Text,AStartDate,AEndDate,APeriod);
end;
initialization
RegisterClass(TCwa550_02Form);
finalization
UnRegisterClass(TCwa550_02Form);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -