考勤系统,主要是统计每天早上迟到的分钟数和早退的分钟数。统计的时间主要是来自于指纹考勤机。每天每个员工可能会有多次摁手印的情况。数据库字段也很简单AttendTime(ID int,UID int ,AttendTime DateTime ). 规定早上上班时间是8 点,下午下班时间是5点,周六例外,上午8点,下午12点。现在棘手的问题是
1.当某人某天多次摁了手印时,应该如何判断她的上班时间和下班时间?
2.当某人某天上午摁了手印,下午忘记了摁手印时,应该如何判断?
3.下午的早退的时间应该如何算呢?
希望大家能够给个思路.....谢谢。。。
1. 如果没有规定进出必须都打手印的话,那就只好第一次打手印当进入,第二次当离开,第三次覆盖第二次的时间,还是当离开
2. 如果他离开的时候不按手印,你无法知道离开时见,设置一个timeout,比如,系统自动在23:59时记录他离开
3. 记录进出时间和计算迟到早退应该分开来各做各的,当你通过记录得知进出时间后,只要用两个时间跟规定时间比对就可以了
如果没有规章的话就没法统计,按手印和打卡无异,不按规定做的话损失自负并发现后处罚。
指纹机应设在门口,有专人看管,要求每次进出都按才行,这样每对进出时间(单双)构成一个区间,当日的区间累积起来就是当日在职时间,可以据此来统计工时。
以下是在进出门都会强制按手印的基础上进行的判断:
1.由于进出必须按手印,当日第一次就是上班时间,最后一次就是下班时间。
2.还是由于进出必须按手印,只要他进来了就得有记录,没有记录直接无视就行。
3.根据第一条,最后一次如早于当日规定下班时间就是早退。或者也可以用累计在职区间计算是否早退。
前阵子也做了这方面的,要有你的考勤系统,前提是这个就是依据,大家必须去做。
程序方面只是一个时间统计与筛选的问题
楼主公司的情况和我公司基本一样,我们这里是进出打卡,中午吃饭进出也需要打卡,进出公司其他门禁也需要打卡,所以每个人每天会有很多打卡。在数据库(SQL Server)中只有一个表(Checkinout)记录所有门打卡信息(卡号,门号,打卡时间)。而且我们还有上夜班的操作员工,所以他们的上班考勤和正常班的还不一样。
在每月做考勤时,我是通过一个Procedure对Checkinout进行处理,将公司所有员工作为一个大循环,针对每一个员工到Checkinout表中取其每天的打卡信息,以当天为例:
上班:取当天最早一个打卡时间T1为上班时间,若T1<8:00,则为正常,若T1>8:00,则为迟到。迟到时间为:T1-8:00。
下班:取当天最晚一个打卡时间T2为下班时间,若T2>17:00,则为正常,若T2<17:00,则为早退。早退时间为:17:00-T2。
当然你也可以按常规来取打卡时间,比如上班应该在8:00或以前打卡,下班应该在17:00或以后打卡,但有迟到或早退的情况你就取不到数了,所以可以用12:00来区分。
对于忘打卡问题:其实上班和下班都存在忘打卡问题,最特殊的情况是,早晚都没打,但一天当中打过多次,凭经验来说靠程序和系统是无法判断该员工的出勤情况,所以我就把上面Procedure处理的数据写到Attend_day表,即可生成HR需要的员工考勤表,然后每月执行一次把考勤表打印出来发给员工写原因、签字。
总的来说,通过系统想完全判断出勤情况很难,必须有HR介入出每月考勤表。