复杂排班背景下企业考勤系统优化.docx
《复杂排班背景下企业考勤系统优化.docx》由会员分享,可在线阅读,更多相关《复杂排班背景下企业考勤系统优化.docx(7页珍藏版)》请在冰豆网上搜索。
复杂排班背景下企业考勤系统优化
复杂排班背景下企业考勤系统优化
doi:
10.3969/j.issn.1673-0194.2018.07.
036
1引言
目前,通过引入考勤机来监控员工的出勤纪律,已经十分普及。
考勤机设备也发展出了刷卡式、指纹式、甚至人像识别式等多种先进型号,在事业型单位、一班制的企业等简单环境下的应用,已经相当的成熟。
但是,针对有多班次倒班、允许员工私下调班等具有复杂排班模式的企业单位,考勤系统在考勤数据的整理、出勤时间的统计、异常数据的发现等方面,统计算法还远未成熟。
2目前考勤系统存在的问题
为了应对多班次倒班等复杂的排班情况,目前流行的考勤系统主要通过和排班系统结合起来的方式来实现数据的关联。
即把所有员工的班次信息也录入系统,这样,某员工上班和下班预设的时间段就确定了下来,考勤数据与这个预设的时间段相对比,得到正常出勤和非正常出勤的情况。
这种模式的缺点有如下几个方面:
(1)根据实际生产情况,员工的排班情况是多变的。
可能这几天生产任务紧需要3班倒,过两天不太紧张了只需要上2班;某员工这一周上晚班,下周又可能上白班。
这就需要不断地往系
统里录入大量的排班信息,工作量很大,生产管理人员对于数据录入的积极性不高。
(2)对于员工众多的企业,某员工因有私事私下和工友调班是允许的,否则管理起来更加复杂。
这样就使得系统里排班数据和考勤数据对不上,还是不能自动处理。
(3)多班次倒班时,员工上班时间和下班时间可能已不在同一天,即跨日期上下班。
这给数据统计也带来了一些麻烦。
(4)员工难免有漏刷卡、重复刷卡的现象,当考勤数据不成对儿出现时,对上班刷卡还是下班刷卡的判断也会出现问题。
鉴于上述种种原因,许多企业已经放弃了考勤系统的统计功能,而仅仅是从系统中导出考勤记录,在Excel中手工逐条处理数据,工作量之大可想而知。
3改进思路
3.1措施一:
上下班考勤机分离针对以上问题,一个有效的改进途径是上下班考勤机分离,即上班和下班分别刷不同的考勤机。
这样可以大幅降低系统处理的复杂度,目前已有考勤系统支持这种方式。
通过上下班考勤机分离,使得原来复杂的业务逻辑大幅简化。
理论上,如果员工刷卡没有错误,就可以很容易计算出出勤时间。
即使出现漏刷卡、多刷卡等异常情况,系统也很容易排查出异常,甚至可以判断错误原因,免除手工排查的大量工作。
严格执行上下班分离的刷卡考勤制度,或者与门禁系统相结合,就可以随时计算出车间在岗人员数量,甚至可以列出在岗人员名单,使车间管理更加精细、更加直观。
上下班考勤机分离也有缺点。
如果考勤机安装位置设计不够合理,员工不能轻易清晰的区分上班考勤机和下班考勤机,员工刷卡时会把上班和下班弄反,同样会导致考勤数据的错乱。
所以,考勤机安装位置的设计非常关键,一定要考虑人们的思维习惯,一般设计在出入方向的右手边,并用醒目的文字标注,同时配合有效的培训和出错惩罚的管理制度。
考勤机上下班分离方案,能够以较小的投入换来较大的改进效果。
3.2措施二:
考勤数据统计算法的优化
3.2.1与排班系统分离
为了有效减少系统维护的数据量,针对有复杂排班需求的生产型企业,果断放弃考勤系统与排班系统的集成,单从考勤数据中提取员工的出勤情况。
3.2.2考勤数据的整理
在生成报表前,先对考勤数据进行预处理。
比如剔除无效数据、补充遗漏数据等。
当然首先是提取出某时间段数据,再针对该部分数据进行处理。
实践中,一般以一个月为一个统计周期。
代码略。
3.2.2.1无效刷卡数据的剔除针对员工难免出现的重复刷卡的现象,系统尽可能的删除无效刷卡数据。
可以采取的策略有:
(1)间隔5分钟内重复刷上班卡,以最后1次为准(代码以SQLServer为例,下同)。
DELETEa
FROM#taJOIN#tb
ONa.工号=b.工号ANDa.日期=b.日期ANDa.考勤?
C=b.
考勤机
WHERDEATEDIF(Fss,a.日期时间,b.日期时间)BETWEEN1AND300
ANDa.刷卡用途='上班';
(2)间隔5分钟内重复刷下班卡,以第1次为准。
DELETEa
FROM#taJOIN#tb
ONa.工号=b.工号ANDa.日期=b.日期ANDa.考勤机=b.考勤机
WHERDEATEDIF(Fss,b.日期时间,a.日期时间)BETWEEN1AND300
ANDa.刷卡用途='下班';
注意DATEDIFF()函数中,日期时间的参数顺序与第
(1)条的顺序相反。
(3)间隔2分钟内刷上班和下班卡,以最后1次为准。
DELETEa
FROM#taJOIN#tb
DATEDIF(Fss,a.日期时间,b.日期时间)BETWEEN1AND120;
3.2.2.2跨日期上下班考勤数据的预处理最直观的报表形式为每日出勤情况,所以针对跨日期上下班
考勤数据,需要进行一些预处理。
(1)一天第1次刷卡为下班卡的,若为9点之前下班,则认为是跨零点上班,即前一天上班当天下班。
当天从零点计算出勤时间。
系统补零点上班卡。
INSERTINTO#t(工号,姓名,部门,二级部门,三级部门
,日期,序号,视同时间,刷卡用途
)
SELECT工号,姓名,部门,二级部门,三级部门,日期,0序号
CASEWHEN刷卡时间'15:
00:
00'THEN23:
59:
59'END视同时间
,'下班'刷卡用途
FROMt2;
3.2.2.3漏刷卡数据处理
经过上述数据处理之后,相邻两次刷卡刷卡用途还相同,即均为上班卡或均为下班卡的,则认为中间缺一次刷卡操作,系统补1次时间为空的刷卡记录。
(1)重新整理序号,方便后面相邻两次相同用途刷卡数据处理。
;withtAS
(
SELECT工号,日期,序号
,rn=ROW_NUMBE(R)OVER(PARTITIONBY工号,日期
ORDERBY序号)
FROM#t
)
UPDATE#t
SET#t.序号=t.rn
FROM#tJOINtON#t.工号=t.工号
AND#t.日期=t.日期AND#t.序号=t.序号;
(2)补1次时间为空的刷卡记录,用以报表中提示缺1次
刷卡操作。
INSERTINTO#t(工号,姓名,部门,二级部门,三级
部门
,日期,序号,刷卡用途
)
SELECTa.工号,a.姓名,a.部门,a.二级部门,a.三
级部门
,a.日期
,a.序号-0.5序号
,CASEa.刷卡用途WHEN'下班'THEN'上班'ELSE'下班'END刷卡用途
FROM#taJOIN#tbONa.工号=b.工号ANDa.日期=b.日期
ANDa.序号=b.序号+1
WHEREa刷卡用途=b.刷卡用途;
3.2.2.4数据预处理注意事项以上数据预处理步骤,充分运用了顺序号这一字段。
所以,维护好顺序号,是数据处理的关键。
不同目的数据处理操作的先后顺序,也要仔细考量。
3.2.3生成出勤报表经过上述一系列的数据处理,系统终于可以生成出勤数据?
蟊砹恕?
witht1AS
(
SELECT工号,姓名,部门,二级部门,三级部门,日期,视同时间,刷卡用途
,Row_Numbe(r)Over(partitionby工号,日期,刷
卡用途orderby序号)序号
FROM#t
),t2AS
(
SELECT工号,姓名,部门,二级部门,三级部门,日期,序号
CASEWHEN序号=1AND刷卡用途='上班'THEN视同时间END上班1
CASEWHEN序号=1AND刷9卡用途='下班'THEN视同时间END下班1
CASEWHEN序号=2AND刷9卡用途='上班'THEN视同时间END上班2
CASEWHEN序号=2AND刷9卡用途='下班'THEN视同时间END下班2,CASEWHEN序号=3AND刷9卡用途='上
班'THEN视同时间END上班3
CASEWHEN序号=3AND刷9卡用途='下班'THEN视同时间END下班3
CASEWHEN序号=4AND刷9卡用途='上班'THEN视同时
间END上班4
CASEWHEN序号=4AND刷9卡用途='下班'THEN视同时
间END下班4
CASEWHEN序号=5AND刷卡用途='上班'THEN视同时
间END上班5
CASEWHEN序号=5AND刷9卡用途='下班'THEN视同时间END下班5
CASEWHEN序号=6AND刷卡用途='上班'THEN视同时
间END上班6
CASEWHEN序号=6AND刷9卡用途='下班'THEN视同时
间END下班6
FROMt1
),t3AS
(
SELECT工号,姓名,部门,二级部门,三级部门,日
期
MAX(上班1)上班1
MAX(下班1)下班1
,MAX(上班2)上班2
,MAX(下班2)下班2
,MAX(上班3)上班3
,MAX(下班3)下班3
,MAX(上班4)上班4
,MAX(下班4)下班4
,MAX(上班5)上班5
,MAX(下班5)下班5
,MAX(上班6)上班6
,MAX(下班6)下班6
FROMt2
GROUBPY工?
,姓名,部门,二级部门,三级部门,日期
)
SELECT工号,姓名,部门,二级部门,三级部门,日期
,上班1,下班1
,上班2,下班2
,上班3,下班3
,上班4,下班4
,上班5,下班5
,上班6,下班6
,ROUND((ISNULL(DateDiff(n,上班1,下班1),
+ISNULL(DateDiff
(n,
上班
2,
下班
2),
0)
+ISNULL(DateDiff
(n,
上班
3,
下班
3),
0)
+ISNULL(DateDiff
(n,
上班
4,
下班
4),
0)
+ISNULL(DateDiff
(n,
上班
5,
下班
5),
0)
+ISNULL(DateDiff
(n,
上班
6,
下班
6),
0)
)*1.0/60,1)出勤时间
FROMt3
ORDERBY工号,日期;
某一天的出勤数据报表预览示例如表1所示
通过报表预览可以很明显的发现,工号为2010023的员工盘
XX漏刷了一次下班卡。
后来通过视频监控录像证实了该员工正常按时下班,因漏刷卡对该员工给予警告处理。
在手工补齐下班考勤数据后,即可正式生成报表。
经过数据整理,针对部分重复刷卡的无效数据已经剔除,漏刷卡情况也给与明确提示。
通过报表预览,可以快速的发现数据错误,进行手工的数据处理后再生成最终报表,统计效率得以极大改善。
4结论
经某企业的应用实践证明,复杂排班环境下的生产型企业,勤统计人员的工作量大幅减少,户的好评。
通过方案改进和算法改进,对于考勤系统的实用性大大提高,考极大地提高了工作效率,得到用