|
沙发

楼主 |
发表于 2014-11-18 17:31:03
|
只看该作者
[附源代码]
{ 版权所有 (C) 2008 金星纸业有限公司 }
function TfrmKQDayReport.DayKQRPT(day: Tdatetime): boolean;
var
i:integer;
qryPerson:TAdodataset;
SQL:string;
BCName:string;
KQDay:TKQday;
StandTimeList:TstringList;
FactTimeList:TStringList;
ResultList:TStringList;
AbnormityCode:integer;
//异常的标志
{0:无刷卡1:正常2:迟到3:早退}
Flag:string;
Minutes:integer;
begin
//清除歷史資料
SQL:='delete from tblKQDay where 日期=''' + datetimetostr(day) + ''''+'|';
sysconfig.ExeSQL(SQL);
//提取人事資料
qryPerson:=TAdoDataset.Create(nil);
sysconfig.OpenData(qryPerson,'select * from tblPerson');
while not(qryperson.Eof) do
begin
case qryperson.FieldByName('考勤类型').AsInteger of
1:begin //不需要打卡
SQL:=format('insert into tblKQDay (日期,员工ID,状况,待处理) values(%f,%d,''%s'',%d)',
[day,qryperson.FieldByName('ID').AsInteger,'正常',0])+'|';
end;
0:begin
BCName:=sysconfig.GetBCName(qryperson.FieldByName('公休顺延').AsBoolean,
qryperson.fieldbyname('班次范围').AsString,
qryperson.fieldbyname('周期起始日').AsDateTime,
day);
if BCName='公休日' then
begin
SQL:=format('insert into tblKQDay(日期,员工ID,状况,待处理) values(''%s'',%d,''%s'',%d)',
[DateTimeToStr(Day),qryperson.FieldByName('ID').AsInteger,'公休',0])+'|' ;
SysConfig.ExeSQL(SQL);
end
else
begin
KqDay.day := day;
kqday.EmployeeID := qryperson.FieldByName('ID').AsInteger;
kqday.BCName := BCName;
kqday.standData := sysconfig.GetStandData(BCName,kqday.planHours);
KQDay.state := '正常';
Kqday.SKData := sysConfig.GetFactData(qryperson.fieldbyname('工卡号').AsString,day);
StandTimeList:=TStringList.Create;
FactTimeList:=TStringList.Create;
StandTimeList.Assign(sysconfig.DecomposeStr(kqday.standData));
FactTimeList.Assign(sysconfig.DecomposeStr(Kqday.SKData));
//TODO:如果考勤数据有遗漏(调休/请假/出差/替班/漏卡)
resultList:=SysConfig.AnalysisKQ(StandTimeList,FactTimeList);
for i:= 0 to ResultList.Count-1 do
begin
Flag:=LeftStr(ResultList.Strings,1);//0无刷卡1正常2迟到3早退
case StrToInt(Flag) of
0:if SysConfig.LoseCard(DateTimeToStr(KqDay.day),
Copy(StandTimeList.Strings,2,length(StandTimeList.Strings)-1),
KQDay.EmployeeID,kqday) then
begin
KQDay.bPend := true;
KQDay.state := '异常';
end
else
KQDay.state := '正常';
2:begin
KQDay.bLate := true;
KQDay.LateMinutes := StrToInt(Copy(ResultList.Strings,3,length(ResultList.Strings)-2));
end;
3:begin
KQDay.bLeaveEarly := true;
KQDay.LeaveearlyMinutes := StrToInt(Copy(ResultList.Strings,3,length(ResultList.Strings)-2));
end;
end;
end;
SavetoDataBase(KQDay);
end;
end;
end;
qryperson.Next;
end;
end;
|
|