求代码例子,生成上下班记录
目的=判断的时间不重复...上下员工之间上下时间不重复.每天上下时间不重复条件1有一堆员工,一个时间段,可填写标准时间(用作标准来生成时间)
效果.1生成当月的每位员工上下班记录
2生成当天每位员工上下班记录
--------------------编程问答-------------------- 我怎么没看明白。。。 --------------------编程问答--------------------
--------------------编程问答--------------------
'当天
select * from table where name='' and date='2010-02-01'
'当月
select * from table where name='' and date >='2010-01-01' and date <='2010-01-31'
--------------------编程问答-------------------- 当月
--当天
select * from table where name='' and date='2010-02-01'
--当月
select * from table where name='' and date >='2010-01-01' and date <='2010-01-31'
select * from table where name='' and Month(date) =1
--------------------编程问答-------------------- ......自己先写着试试吧 --------------------编程问答-------------------- 我已写过.不过有问题.程序太长贴不出来
我的难题在判断上下两个时间直接不重复
我采用的是重复+随机数*-1 的方法
判断可行已过...但是出来的效果总是有一点重复...(非常难跟)
如能帮忙看的话.我可以E-MAIL代码给大家... --------------------编程问答-------------------- 把你的数据和要求的结果详细说说。
再吧你的sql的代码写写下,别的不要。 --------------------编程问答-------------------- Dim m As Integer
For i = 0 To rdEmp.RecordCount - 1
m = 0
sEmp = rdEmp![EmpID]
sDate = IIf(isNull(rdEmp![dateHired]), sDt, rdEmp![dateHired])
eDate = IIf(isNull(rdEmp![LCdate]), Date, rdEmp![LCdate])
SQL = "delete from tmp_Trans where EmpID='" & sEmp & "' and Date>=#" & sDt & "# and Date<=#" & eDt & "#"
gLTClockDB.Execute SQL
If sDate > eDt Then '入厂日期大于处理日期的最后一天时,不处理
GoTo Next_Emp
End If
If eDate < sDt Then '辞职日期小于处理日期的第一天时,不处理
GoTo Next_Emp
End If
SQL = "select * from tmp_Trans"
Set rdTmp = gLTClockDB.OpenRecordset(SQL)
currDt = sDt
Do While currDt <= eDt
If currDt > eDate Then
Exit Do
End If
If currDt < sDate Then '入厂日期的问题 2002-06-05
GoTo Next_Date
'Exit Do
End If
rdTmp.AddNew
rdTmp![EmpID] = sEmp
rdTmp![Date] = currDt --------------------编程问答-------------------- ' Randomize ''2005-09-29
' X = Round(Rnd * 10, 0) - 5 '取随机数*10,然后四舍五入,-5是上下浮动5分钟.
X = Round(Rnd * 100, 0)
tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
'Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
If dtStart3 <> "_:_" And IsDate(dtStart3) Then
tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
End If
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
tede1 = DateAdd("n", RndX(X), dtEnd1)
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
tede2 = DateAdd("n", RndX(X), dtEnd2)
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
tede3 = DateAdd("n", RndX(X), dtEnd3)
End If --------------------编程问答-------------------- If m = 0 Then '对比上一位员工
For k = 0 To 1000
If tsde1 = tsde1c Then
k = k + 1
X = Round(Rnd * 100, 0)
tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
Else
Exit For
End If
Next k
'Randomize ''2005-09-29
For k = 0 To 1000
If tsde2 = tsde2c Then
k = k + 1
X = Round(Rnd * 100, 0)
tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
Else
Exit For
End If
Next k
' Randomize ''2005-09-29
For k = 0 To 1000
If tsde3 = tsde3c Then
k = k + 1
X = Round(Rnd * 100, 0)
If dtStart3 <> "_:_" And IsDate(dtStart3) Then
tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
End If
Else
Exit For
End If
Next k
' Randomize ''2005-09-29
For k = 0 To 1000
If tede1 = tede1c Then
k = k + 1
X = Round(Rnd * 100, 0)
tede1 = DateAdd("n", RndX(X), dtEnd1)
Else
Exit For
End If
Next k
For k = 0 To 1000
If tede2 = tede2c Then
k = k + 1
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
tede2 = DateAdd("n", RndX(X), dtEnd2)
Else
Exit For
End If
Next k
For k = 0 To 1000
If tede3 = tede3c Then
k = k + 1
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
tede3 = DateAdd("n", RndX(X), dtEnd3)
End If
Else
Exit For
End If
Next k
Else '对比上次时间
For k = 0 To 1000
If tsd1 = tsde1 Then
k = k + 1
X = Round(Rnd * 100, 0)
tsde1 = DateAdd("n", RndX(X) * -1, dtStart1)
Else
Exit For
End If
Next k
'Randomize ''2005-09-29
For k = 0 To 1000
If tsd2 = tsde2 Then
k = k + 1
X = Round(Rnd * 100, 0)
tsde2 = DateAdd("n", RndX(X) * -1, dtStart2)
Else
Exit For
End If
Next k
' Randomize ''2005-09-29
For k = 0 To 1000
If tsd3 = tsde3 Then
k = k + 1
X = Round(Rnd * 100, 0)
If dtStart3 <> "_:_" And IsDate(dtStart3) Then
tsde3 = DateAdd("n", RndX(X) * -1, dtStart3)
End If
Else
Exit For
End If
Next k
' Randomize ''2005-09-29
For k = 0 To 1000
If ted1 = tede1 Then
k = k + 1
X = Round(Rnd * 100, 0)
tede1 = DateAdd("n", RndX(X), dtEnd1)
Else
Exit For
End If
Next k
For k = 0 To 1000
If ted2 = tede2 Then
k = k + 1
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
tede2 = DateAdd("n", RndX(X), dtEnd2)
Else
Exit For
End If
Next k
For k = 0 To 1000
If ted3 = tede3 Then
k = k + 1
' Randomize ''2005-09-29
X = Round(Rnd * 100, 0)
If dtEnd3 <> "_:_" And IsDate(dtEnd3) Then
tede3 = DateAdd("n", RndX(X), dtEnd3)
End If
Else
Exit For
End If
Next k
End If
rdTmp![TS1] = tsde1
rdTmp![TS2] = tsde2
rdTmp![TS3] = tsde3
rdTmp![TE1] = tede1
rdTmp![TE2] = tede2
rdTmp![TE3] = tede3
rdTmp![LateTimes] = IIf(txtLate = "", 0, txtLate)
rdTmp![OTHour] = IIf(txtOT = "", 0, txtOT)
If Weekday(currDt) = 1 Or Weekday(currDt) = 7 Then '当为星期六和星期日时
If rdTmp.Fields("TS1") <> "" And rdTmp.Fields("TE1") <> "" Then '写入工时
rdTmp.Fields("SunHour") = 4 '08-07-03 yu |rdTmp.Fields("SunHour") = 3.5
End If
If rdTmp.Fields("TS2") <> "" And rdTmp.Fields("TE2") <> "" Then '写入工时
rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + 4 '08-07-03 yu | rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + 4.5
End If
If rdTmp.Fields("OThour") <> "" Then
rdTmp.Fields("SunHour") = rdTmp.Fields("SunHour") + rdTmp.Fields("OThour")
End If
Else
If rdTmp.Fields("TS1") <> "" And rdTmp.Fields("TE1") <> "" Then '写入工时
rdTmp.Fields("apHour") = 4 '08-07-03 yu | rdTmp.Fields("apHour") = 3.5
End If
If rdTmp.Fields("TS2") <> "" And rdTmp.Fields("TE2") <> "" Then '写入工时
rdTmp.Fields("apHour") = rdTmp.Fields("apHour") + 4 '08-07-03 yu | rdTmp.Fields("apHour") = rdTmp.Fields("apHour") + 4.5
End If
If rdTmp.Fields("OThour") <> "" Then
rdTmp.Fields("EveHour") = rdTmp.Fields("OThour")
End If
End If
rdTmp.Update
tsd1 = tsde1 '取第1个,时间
tsd2 = tsde2
tsd3 = tsde3
ted1 = tede1
ted2 = tede2
ted3 = tede3
If m = 0 Then
tsde1c = tsde1 '取第2个,员工
tsde2c = tsde2
tsde3c = tsde3
tede1c = tede1
tede2c = tede2
tede3c = tede3
End If
m = m + 1 --------------------编程问答-------------------- 这么多代码?
我问你的要求,比如说哦,你的数据是怎么样的,你要得到的结果又是怎么样。
看你用了好多列的名字,数据库的结构也是要滴。 --------------------编程问答-------------------- 结构就只是利用一个临时表(空)
这个临时表包含了全部的字段了
生成后的数据插入出报表~
已上是我那里的代码
这个是循环全部员工的所有天数的6个时间的生成上下班记录(上午.下午.夜晚)
夜晚是有些不用填的
要求1:就是同一个人的第1天和第2天的上/下班时间不同
2:连续两位员工之间不能同一时间上下班(员工ID不连续) --------------------编程问答-------------------- 先看数据结构,如时间字段是什么类型:短日期、带分秒的长日期或字符串
lz判断的精度是否到分秒。 给个抓图好分析 --------------------编程问答-------------------- 假定你的原始数据为进出门的刷卡记录。
生成上下班记录只要将进出门记录进行配对即可。
循环所有员工,以员工、整个统计时间段为条件,按时间排序进行查询。
这样每个员工按照时间序循环分析进出门记录:
需要变量:上班标记,上班时间,下班时间
1)对进门记录
IF 上班标记 = 下班 THEN
上班时间 = 打卡时间
上班标记 = 上班
'ELSE
'忽略重复打卡
END IF
2)对出门记录
IF 上班标记 = 上班 THEN--------------------编程问答-------------------- 我上面也是差不多那样写的
下班时间 = 打卡时间
用 上班时间、下班时间 生成一条上下班记录
上班标记 = 下班
'ELSE
'忽略重复打卡
END IF
但是那客户刁难没办法
我的那些代码我跟过的.可以运行.判断也有走过.
但是结果只是有一点改进.但还是有重复
要求1:就是同一个人的第1天和第2天的上/下班时间不同
2:连续两位员工之间不能同一时间上下班(员工ID不连续) --------------------编程问答-------------------- 你的两个问题根本不存在。
1.是按照一次进门和一次出门来判断的,根本与哪个班次无关
2.原始数据用 员工、时间 排序两个员工没有关系;生成记录肯定有 员工ID 做区分,也没有关系。 --------------------编程问答-------------------- tigerandufo
你这个代码似乎比较糟糕哦,
我现在也在在这个考勤的问题,但是我这没你那复杂,我只要考虑一个班次就可以,不知道你是怎么考虑跨天考勤这个问题的。比如上班时间20:00,下班时间第二天02:00。 --------------------编程问答-------------------- 不好意思大家
这个没有班次的
是自定义一个时间做标准来生成上下班时间
比如填入8点上班.那我就会计算出他生成800+随机数来生成那个上班时间
现在的问题是.得出来的那个数会是A和B员工双同
(我加了判断但上面的判断有走.但是还是有相同)
--------------------编程问答-------------------- 上班 2010-2-1 20:00
下班 2010-2-2 02:00
能够正确排序,一次上班对一次下班,没有任何问题。 --------------------编程问答-------------------- 学习中,帮顶! --------------------编程问答-------------------- 跟了很久也跟不出原因.真悲剧啊我
不知道是不是写的方法有误区还是思想有误区
真不明白 --------------------编程问答-------------------- 我也写过类似的考勤记录生成,根据实际薪资,设定多样话上下班及加班时间,然后生成对应的考勤上下班时间,完事后直接把考勤记录导入到考勤软件中生成员工考勤汇总记录。当然条件可以多样化设置,让其看不出是生成的。应付人员验厂用的。 --------------------编程问答--------------------
这个是对的!试验一下吧! --------------------编程问答-------------------- 生成一个考勤时间表,在程序中控制输入的有效性。数据库中设置一个字段为生成报表项的数据,然后控制这个报表项,可能要简化一些。 --------------------编程问答--------------------
补充:VB , 基础类