atdprocess.pas
来自「pasa人力资源考勤管理系统」· PAS 代码 · 共 1,026 行 · 第 1/5 页
PAS
1,026 行
while not Adopersonal.eof do
begin
basemoney:=0;
addmoney:=0;
workno:=adopersonalworkno.asstring;
earlydec:=0; latedec:=0; kuanggongdec:=0;
leavedec:=0; otmoney:=0; eveningmoney:=0;
basemoney:=0;addmoney:=0;
lastrq:='';
adonormal.Close;
adonormal.commandtext:='Select * from '+source+' where process=0 and workno='''+workno+''' order by rq,workno ';
adonormal.Open;
adonormal.First;
while not adonormal.eof do
begin
eveningot:=0;
overtimeot:=0;
eveninghours:=0;
presentdec:=0;
process:=true;
rq:=adonormalrq.asstring;
//计算底薪及津贴
//求出本月应出勤天由行事历得来
if adosalsetdivmode.AsBoolean then
begin
days:=Getdays(copy(rq,5,2),copy(rq,1,4));
Query3.Close;
Query3.SQL.Text:='Select count(*) as con from pub06010 where (left(comdate,4)+substring(comdate,6,2)='''+copy(rq,1,6)+''') '+
' and comcode='''+adopersonaldothing.asstring+''' ';
Query3.Open;
days:=days-query3.fieldbyname('con').value;
end
else days:=adosalsetfixdays.AsFloat;
//查找有无调薪
Query1.close;
Query1.sql.add('Select * from per27012 where workno='''+workno+''' order by cpushdate ');
Query1.open;
if Query1.RecordCount>0 then //只有一次调薪
begin
if Query1.RecordCount>1 then//有多次调薪
begin
Query1.first;
if rq<Query1.fieldbyname('cpushdate').value then //在第一次调薪之前
begin
basemoney:=Query1.fieldbyname('basepay').value/days;
fixot:=adopersonalfixot.asfloat;
m:=adosalsetadditems.AsString;
while length(m)>0 do
begin
i:=pos('/',m); //找出FieldName
x:=copy(m,1,i-1);
delete(m,1,i);
if x='profmoney' then
addmoney:=addmoney+Query1.fieldbyname('profpay').value
else if x='techmoney' then
addmoney:=addmoney+Query1.fieldbyname('techpay').value
else if x='deptmoney' then
addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
end;
addmoney:=addmoney/days; //时津贴
end //第一次调薪
else
begin //88
Query1.Last;
if rq>=Query1.fieldbyname('cpusedate').value then //在最后一次调薪之后
goto normal
else //多次调薪之中
begin //77
Query1.first; //返回第一笔顺序向下找确定属于那次调薪
while not Query1.Eof do
begin //while out
bookmark1:=Query1.Getbookmark;
firstrq:=Query1.fieldbyname('cpusedate').value;
Query1.next;
if not Query1.eof then
begin //66
if (rq>=firstrq) and (rq<Query1.fieldbyname('cpusedate').value) then
begin //55
Query1.GotoBookmark(bookmark1);
basemoney:=Query1.fieldbyname('basepay').value/days;
fixot:=adopersonalfixot.asfloat;
m:=adosalsetadditems.AsString;
while length(m)>0 do
begin //while
i:=pos('/',m); //找出FieldName
x:=copy(m,1,i-1);
delete(m,1,i);
if x='profmoney' then
addmoney:=addmoney+Query1.fieldbyname('profpay').value
else if x='techmoney' then
addmoney:=addmoney+Query1.fieldbyname('techpay').value
else if x='deptmoney' then
addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
end; //while
addmoney:=addmoney/days; //时津贴
end //55
else
begin //else
if rq>=firstrq then
begin //55
Query1.GotoBookmark(bookmark1);
basemoney:=Query1.fieldbyname('basepay').value/days;
fixot:=adopersonalfixot.asfloat;
m:=adosalsetadditems.AsString;
while length(m)>0 do
begin //while
i:=pos('/',m); //找出FieldName
x:=copy(m,1,i-1);
delete(m,1,i);
if x='profmoney' then
addmoney:=addmoney+Query1.fieldbyname('profpay').value
else if x='techmoney' then
addmoney:=addmoney+Query1.fieldbyname('techpay').value
else if x='deptmoney' then
addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
end; //while
addmoney:=addmoney/days; //时津贴
end; //55
end; //else
end; //66
end; //while out
end; //77
end; //88
end else
begin
if rq>=Query1.fieldbyname('cpusedate').value then //
goto normal
else
begin
basemoney:=Query1.fieldbyname('basepay').value/days;
fixot:=adopersonalfixot.asfloat;
m:=adosalsetadditems.AsString;
while length(m)>0 do
begin
i:=pos('/',m); //找出FieldName
x:=copy(m,1,i-1);
delete(m,1,i);
if x='profmoney' then
addmoney:=addmoney+Query1.fieldbyname('profpay').value
else if x='techmoney' then
addmoney:=addmoney+Query1.fieldbyname('techpay').value
else if x='deptmoney' then
addmoney:=addmoney+Query1.fieldbyname('deptpay').value;
addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
end;
addmoney:=addmoney/days; //时津贴
end;
end;
end else //无调薪
begin
normal:
basemoney:=adopersonalbasepay.AsFloat/days; //时薪
fixot:=adopersonalfixot.AsFloat;
//找出津贴项目设定
m:=adosalsetadditems.AsString;
while length(m)>0 do
begin
i:=pos('/',m); //找出FieldName
x:=copy(m,1,i-1);
delete(m,1,i);
addmoney:=addmoney+Adopersonal.fieldbyname(x).value;
end;
addmoney:=addmoney/days; //时津贴
end;
//查找有无调薪
//计算底薪及津贴
otkind:=adonormal.fieldbyname('otkind').asstring;
if (otkind=null) or (trim(otkind)='') then otkind:='平时加班';
mustgo:=adonormal.fieldbyname('mustgo').asstring;
mustout:=adonormal.fieldbyname('mustout').asstring;
factgo:=adonormal.fieldbyname('factgo').asstring;
factout:=adonormal.fieldbyname('factout').asstring;
date1:=copy(rq,1,4)+dateseparator+copy(rq,5,2)+dateseparator+copy(rq,7,2)+' '+copy(mustgo,1,2)+timeseparator+copy(mustgo,3,2);
date2:=copy(rq,1,4)+dateseparator+copy(rq,5,2)+dateseparator+copy(rq,7,2)+' '+copy(mustout,1,2)+timeseparator+copy(mustout,3,2);
late:=date1decdate2minute(date1,copy(factgo,1,16));
early:=date1decdate2minute(date2,copy(factout,1,16));
musthours:=adonormal.fieldbyname('musthours').value;
facthours:=date1decdate2hour(adonormal.fieldbyname('factgo').asstring,adonormal.fieldbyname('factout').asstring,adonormal.fieldbyname('decrease').asinteger);
Query1.Close;
Query1.Sql.Text:='Select * from '+dest+' where workno='''+workno+''' and rq='''+rq+''' ';
Query1.open;
if Query1.eof then //
begin
Query2.Close;
Query2.sql.text:='Insert into '+dest+' (workno,cardno,rq,facthours,eveninghours,late,early,kuanggong,ot,leavehave,leavenon,tempvalue,process) '+
' select a.workno,a.cardno,'''+rq+''',0,0,0,0,0,0,0,0,'''',0,0 from per24010 as a where a.workno='''+workno+''' ';
Query2.ExecSQL;
end;
Query2.Close;
Query2.sql.clear;
//本时段为加班且加班有考勤或不为加班
if (not adonormal.fieldbyname('addtime').AsBoolean) or (adonormal.fieldbyname('addtime').asboolean and adoatdsetaddtime.asboolean) then
begin
Query2.sql.add('Update '+dest+' set tempvalue=case when '+inttostr(late)+'>0 then '+inttostr(late)+' else 0 end where rq='''+rq+''' and workno='''+workno+''' ');
if adoatdsetlatecal.asboolean then //迟到加基数 atd07010.latestyle=1 早迟按时间计atd07010.latestyle=0 按次数计
Query2.Sql.add('Update '+dest+' set late=isnull(late,0)+case when tempvalue>b.latetime then'+
' case when b.latestyle=1 then tempvalue else 1 end else 0 end '+
' from '+dest+' as a,atd07010 as b where a.rq='''+rq+''' and a.workno='''+workno+''' ')
else //迟到不加基数
Query2.sql.add('Update '+dest+' set late=isnull(late,0)+case when tempvalue>b.latetime then'+
' case when b.latestyle=1 then tempvalue-b.latetime else 1 end else0 end '+
' from '+dest+' as a,atd07010 as b where a.rq='''+rq+''' and a.workno='''+workno+''' ');
//计算旷工
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?