&&&&&&&&&&&源码源码,请进...
表1:
卡号 打卡时间
1 2001/11/1 08:00
1 2001/11/1 12:00
2 2001/11/1 07:59
2 2001/11/1 12:03
3 2001/11/1 20:00
3 2001/11/2 08:00
............
表2:
计工资日期 卡号 班组 打卡时间1 打卡时间2 打卡时间3 打卡时间4
2001/11/1 1 白班 08:00 12:00
2001/11/1 2 白班 07:59 12:03
2001/11/1 3 晚班 20:00 08:00
.........
如何由表1和班组库得出表2.
表2中,员工3虽然打卡时间为2001/11/2 08:00为2号,但计算工资时应计入2001/11/1号.
求解答,送分
问题点数:38、回复次数:7Top
1 楼hzlan(^只有你能帮到我^)回复于 2001-11-13 13:49:18 得分 0
请帮忙解答.感谢...........Top
2 楼zcfgarfield(加菲)回复于 2001-11-13 14:30:14 得分 33
很好弄啊.
首先表1按卡号,时间排序,一天一查询,对每组卡号添加入表2,计工资日期=第一条日期,卡号=卡号,班组=(if 第一条时间在17:30以前(自己定义晚上时间)then 班组为‘白班 ’ else 为‘晚班’) ,打卡时间1 =第一条时间,打卡时间2 =第一条时间2,...Top
3 楼cobi(我是小新)回复于 2001-11-13 15:01:42 得分 3
重点关注Top
4 楼sillyou()回复于 2001-11-13 15:17:14 得分 2
关注。Top
5 楼hzlan(^只有你能帮到我^)回复于 2001-11-13 15:23:19 得分 0
to:zcfgarfield(加菲)
我是已知员工的班组,需要根据班组来确定将打卡的时间写入到表2中.因为第二天的打卡时间有可能要将他计算到先一天的出勤.Top
6 楼hzlan(^只有你能帮到我^)回复于 2001-11-13 15:54:17 得分 0
先给你分先.Top
7 楼zcfgarfield(加菲)回复于 2001-11-13 16:36:21 得分 0
我的算法(前提:班种固定,一个白班,一个晚班,统计范围不超过一个月,动态数组太麻烦):
var
WorkTimeflag : array[1..31] of boolean;//0:休息,1:日班,2:夜班
WorkTime : array[1..31,1..2] of TDateTime;//记录规定工作时间,如果固定,就不需要了,如果有多个工作时间段,可以自己改动
begin
while 每一个员工 do
begin
清空WorkTimeflag,WorkTime
查询员工在统计范围内的班组情况,设置WorkTimeflag,WorkTime
while 每条员工在统计范围内的打卡记录 do
begin
排除重复刷卡(1分钟之内的多次刷卡只算一次)
根据WorkTimeflag的情况判断该条打卡记录的属于哪天的记录(当天还是昨天)
若一天的打卡记录处理完毕,则整理数据添加入库
end;
如果统计的最后一天是夜班,则获取最后一天的下一天的第一条记录,整理入库
end;
end;Top




