弹性班场景主要有二把请假、出差时间点拿进来,再重新算异常一、全天弹性一天上满8小时即可,设置弹性班类似:08:00----17:00,中间12:00-13:00休息如果[排班班次名称]="弹性班"那么弹性时长=实际出勤时数+请假时长(小时)+出差时长(小时)其余弹性时长=0如果[排班班次名称]="弹性班"并且弹性时长>=7.5那么旷工小时数=0再滤[排班班次名称]="弹性班"并且弹性时长<7.5那么旷工小时数=8-弹性时长其余旷工小时数=旷工小时数如果[排班班次名称]="弹性班"并且弹性时长>=8那么早退分钟=0再滤[排班班次名称]="弹性班"并且弹性时长>=7.5并且弹性时长<8那么早退分钟=8-弹性时长再滤[排班班次名称]="弹性班"并且弹性时长<7.5那么早退分钟=0其余早退分钟=早退分钟如果[排班班次名称]="弹性班"那么迟到分钟=0其余迟到分钟=迟到分钟如果[排班班次名称]="弹性班"并且旷工小时数>0那么旷工次数=1再滤[排班班次名称]="弹性班"并且旷工小时数=0那么旷工次数=0其余旷工次数=旷工次数如果[排班班次名称]="弹性班"并且早退分钟>0那么早退次数=1再滤[排班班次名称]="弹性班"并且早退分钟=0那么早退次数=0其余早退次数=早退次数如果[排班班次名称]="弹性班"那么迟到次数=0其余迟到次数=迟到次数二、范围弹性这里以常用的弹性一段班为例:弹性班次08:00~09:00----17:00~18:00,中间12:00-13:00休息规则:1、弹性段(08:00-18:00)内,需满8个小时;2、09:00之后来算迟到或者旷工;3、17:00之前走算早退或者旷工。设置班次08:00--17:00,中间12:00-13:00休息,标准工时为8h。客户实际迟到允许值、早退允许值、旷工起始值假设分别为0、0、30,但这里设置为60、0、90。(也可设置班次08:00--18:00,中间12:00-13:00休息,此时标准工时是9h,将其改为8h。迟到允许值、早退允许值、旷工起始值分别设置为60、60、90。下面第二个公式再稍微改一下)然后用公式计算出a、b、m、n的长度:如果[排班班次名称]="弹性班"并且第一段上班时间<>""并且[第一段上班时间含日期]<>""并且第一段上班时间<[第一段上班时间含日期]那么a=取相差日期值(第一段上班时间,[第一段上班时间含日期])其余a=0弹性下班点=取当前考勤日期()+"18:00:00"如果[排班班次名称]="弹性班"并且第一段下班时间<>""并且第一段下班时间>弹性下班点那么b=取相差日期值(弹性下班点,第一段下班时间)其余b=0如果[排班班次名称]="弹性班"并且第一段上班时间<>""并且第一段上班时间>取当前考勤日期()+"09:00:00"那么m=取相差日期值("09:00:00",第一段下班时间)其余m=0如果[排班班次名称]="弹性班"并且第一段下班时间<>""并且第一段下班时间<取当前考勤日期()+"17:00:00"那么n=取相差日期值(第一段下班时间,"17:00:00")其余n=0然后取弹性段内(08:00-18:00)的出勤分钟数:总体逻辑是实际出勤时数-a-b,但考虑到计算异常时,还要算请假单、出差单,所以要把单据加进来算异常的话,就是实际出勤时数-a-b+请假时长+出差时长-请假和打卡和弹性段的交集-出差和打卡和弹性段的交集。(请假单和出差单可能同时存在,这里不考虑请假单和出差单有交集的场景)举例,下图中实际出勤时数为11h,a为0,b为4h,请假4h,请假和打卡和弹性段的交集为2h则弹性段内的出勤时数为:11-0-4+4-2=9h(也就是08:00-18:00,被请假单冲销异常后,再没有异常)nmb取m、n算迟到、早退:取弹性班次外出勤:班次:08:0017:0009:0008:0017:0018:00a18:00下图中实际出勤时数为6h,a为2h,b为0,请假7h,请假和打卡和弹性段的交集为4h。则弹性段内的出勤时数为:6-2-0+7-4=7h(最后也就是16:00-17:00旷工)现在取请假和打卡的交集,出差单的类似,不另外再写。(x1x2交集=min(y1,y2,y3)-max(x1,x2,x3))如果[排班班次名称]="弹性班"并且[请假开始时间]<>""并且[请假结束时间]<>""并且[第一段上班时间含日期]<>""并且弹性下班点<>""并且[请假结束时间]<=弹性下班点那么请假排班取小=[请假结束时间]再滤[排班班次名称]="弹性班"并且[请假开始时间]<>""并且[请假结束时间]<>""并且[第一段上班时间含日期]<>""并且弹性下班点<>""并且[请假结束时间]>弹性下班点那么请假排班取小=弹性下班点其余请假排班取小=""如果[排班班次名称]="弹性班"[请假开始时间]<>""并且[请假结束时间]<>""并且[第一段上班时间含日期]<>""并且弹性下班点<>""并且[请假开始时间]<=[第一段上班时间含日期]那么请假排班取大=[第一段上班时间含日期]再滤[排班班次名称]="弹性班"[请假开始时间]<>""并且[请假结束时间]<>""并且[第一段上班时间含日期]<>""并且弹性下班点<>""并且[请假开始时间]>[第一段上班时间含日期]那么请假排班取大=[请假开始时间]其余请假排班取大=""如果请假排班取小<>""并且请假排班取大<>""并且请假排班取小>请假排班取大并且第一段上班时间<>""并且第一段下班时间<>""并且请假排班取小<=第一段下班时间那么项目一=请假排班取小再滤请假排班取小<>""并且请假排班取大<>""并且请假排班取小>请假排班取大并且第一段上班时间<>""并且第一段下班时间<>""并且请假排班取小>第一段下班时间那么项目一=第一段下班时间其余项目一=""如果请假排班取小<>""并且请假排班取大<>""并且请假排班取小>请假排班打卡08:00x318:00y310:00x208:00x122:00y212:00y1请假打卡08:00x318:00y306:00x207:00x112:00y216:00y1请假取大并且第一段上班时间<>""并且第一段下班时间<>""并且请假排班取大<=第一段下班时间那么项目二=第一段下班时间再滤请假排班取小<>""并且请假排班取大<>""并且请假排班取小>请假排班取大并且第一段上班时间<>""并且第一段下班时间<>""并且请假排班取大>第一段下班时间那么项目二=请假排班取大其余项目二=""如果项目一<>""并且项目二<>""并且项目一>项目二那么交集1=取相差日期值(项目二,项目一)其余交集1=0再取弹性段内的出勤分钟数:如果[排班班次名称]="弹性班"并且实际出勤时数>0那么弹性出勤分钟=实际出勤时数*60-a-b+请假时长(小时)*60+出差时长(小时)*60–交集1–交集2再滤[排班班次名称]="弹性班"并且实际出勤时数=0那么弹性出勤分钟=请假时长(小时)*60+出差时长(小时)*60其余弹性出勤分钟=0如果弹性出勤分钟>=540那么弹性出勤分钟=540再滤弹性出勤分钟>0并且弹性出勤分钟<540那么弹性出勤分钟=弹性出勤分钟其余弹性出勤分钟=0然后再计算旷工、迟到、早退:1、如果[排班班次名称]="弹性班"并且弹性出勤分钟>450并且弹性出勤分钟<480并且m>0那么迟到分钟=[排班标准工时]*60-弹性出勤分钟再滤[排班班次名称]="弹性班"并且弹性出勤分钟>450并且弹性出勤分钟<480并且m=0那么迟到分钟=0其余迟到分钟=迟到分钟如果[排班班次名称]="弹性班"并且弹性出勤分钟>450并且弹性出勤分钟<480并且n>0那么早退分钟=[排班标准工时]*60-弹性出勤分钟再滤[排班班次名称]="弹性班"并且弹性出勤分钟>450并且弹性出勤分钟<480并且n>0那么早退分钟=0其余早退分钟=早退分钟再滤[排班班次名称]="弹性班"并且弹性出勤分钟>450并且弹性出勤分钟<480并且m=0并且n=0那么早退分钟=[排班标准工时]*60-弹性出勤分钟其余早退分钟=早退分钟2、如果[排班班次名称]="弹性班"并且弹性出勤分钟<=450那么旷工小时数=[排班标准工时]-弹性出勤分钟/60其余旷工小时数=旷工小时数如果[排班班次名称]="弹性班"并且弹性出勤分钟<=450那么迟到分钟=0其余迟到分钟=迟到分钟如果[排班班次名称]="弹性班"并且弹性出勤分钟<=450那么早退分钟=0其余早退分钟=早退分钟3、如果[排班班次名称]="弹性班"并且弹性出勤分钟>=480那么旷工小时数=0其余旷工小时数=旷工小时数如果[排班班次名称]="弹性班"并且弹性出勤分钟>=480那么迟到分钟=0其余迟到分钟=迟到分钟如果[排班班次名称]="弹性班"并且弹性出勤分钟>=480那么早退分钟=0其余早退分钟=早退分钟