1、U8 知识库文档U8 开发之考勤管理算法扩展-自定义公式知识库属性适用产品 考勤管理支持版本 V890; V10.0; V10.1; V11.0; V11.1行业 通用关键字 考勤管理算法扩展、自定义公式最后更新时间 2013-10-28作者 庞丽辉摘要考勤管理针对企业实际考勤业务的个性化需求,通过将考勤算法分解成多个模块化的标准运行单元,并支持在每个标准单元中间允许用户自定义考勤算法公式来满足企业的个性需求,本文主要讲述如何在考勤算法中自定义公式。概念说明考勤算法:主要包括班段算法,日结果算法,月结果算法,年结果算法。目标通过本文档,使读者能够掌握如下内容:在考勤算法的 哪个步骤定义公式,如
2、何定义公式。文档内容一、在哪个算法适合做公式?通常情况下,大多数企业会在日结果算法和月结果汇总算法中设置自定义公式;主要包括以下两个场景: 1、日结果算法迟到/ 早退/ 旷工/加班/ 请假/出差/ 刷卡 等可以在这些算法中设计公式,通过定义的公式来修改系统中计算出的标准结果,从而达到个性化的目的。U8 知识库文档2、月结果算法签卡欠卡次数/迟到早退旷工次数/ 加班时间/请假时间/ 出差时间等可以在这些算法中设计公式,通过定义的公式来修改系统中计算的标准结果,从而达到个性化的目的。二、自定义公式放在算法中的哪个步骤?每个算法都包含多个步骤,那么公式放在哪个步骤最合适呢?以日结果算法为例,日结果计
3、算顺序如下图:其中每个步骤包含三步(如下图) ,第一步为标准算法执行前的处理逻辑,第二步为默认处理逻辑(此图为计算迟到、早退时间和次数的算法,如果把默认算法后边的复选框勾掉,那么标准算法将不执行此默认算法) ,第三步为执行完默认算法后的逻辑;U8 知识库文档假如默认算法“计算迟到、早退时间和次数”计算出的迟到时间不符合用户的要求,那么可以在此算法的后处理公式设置自定义公式,来修改迟到信息,来满足用户的业务;其他步骤的做法类似。三、如何设置自定义公式? 自定义公式主要包括:目标字段,公式说明,公式内容,计算顺序,启用;U8 知识库文档以下为具体含义:目标字段:需要更新的内容,日结果算法中,目标字
4、段主要包括日结果的相关字段,包括系统预置和用户自定义;U8 知识库文档公式说明:公式描述,可以输入任意内容;公式内容:使用系统预置函数和运算符对预置表的字段进行加工,得到想要的值(如下图) ;同时可以对处理的记录设置条件(如下图);如果对所有人都一样标准,可以不设置U8 知识库文档条件。计算顺序:每个算法步骤可以设置多个公式,每个公式的计算顺序可以设置;如果某公式 A 依赖公式 B 计算出结果进行计算,那么公式 A 的顺序要在 B 的后边;启用:可以启用和停用公式;应用案例迟到/早退/旷工场景简述 提前 10 分钟上班不算迟到如果设置班次为 8:20-17:00,班次应出勤就会多出 10 分钟
5、,请假最小单位为小时的话,整天请假就会多出 1 小时。如果将休息时间设置成 40 分钟,如果半天请假的情况,下午请假的话上午上班需要提前 10 分钟到公司,而上午请假的话,下午就不会扣除这个 10 分钟,因为这 10 分钟包含在了休息时间中,这样就对上午请假的人合算了 10 分钟。U8 知识库文档公式放置步骤日结果算法-计算迟到、早退时间和次数-第三步后处理公式具体公式设置1、班次时间:8:30 17:002、定义日结果迟到时间的公式 (目标字段:迟到时间 )公式描述:考勤日结果的应上班 1 - 考勤日结果的上班 1(上班实际打卡时间) 计算加班时间-第三步后处理公式具体公式设置1、 定义日结
6、果加班 1(小时) (目标字段:迟到时间 )公式内容:如果 加班单明细.加班时间 非空 并且 加班单明细.实上班 非空 并且 加班单明细.实下班 非空 并且 DATEDIFF(minute, 加班单明细.实上班, 考勤日结果.应下班 2)0 那么 加班单明细.加班时间- DATEDIFF(minute, Strtodate(toString( 加班单明细.加班日期)+ + toString(TOTime( 加班单明细.加班开始时间) ) , 考勤日结果.应下班 2) /60.0 否则 考勤日结果 .加班 1(小时) 结束2、 公式的查询定义界面中勾选“所有记录” (下图) ,公式中用到加班相关
7、表时,需要把此选项勾选。U8 知识库文档请假时间场景简述 刷卡数据中,若中途有出入的刷卡记录,不提示异常员工上下班规定时间是 8:00-17:00,刷卡举例:刷卡数据中出现四次记录:8:00,10:00,11:00,17:00,注:10 点到 11 点,员工未填写请假,私自外出。此种情况应该显示异常,但在 u8 考勤异常处理画面则显示正常。公式放置步骤有多个公式,在下面公式设置中具体公式设置1、增加考勤项目:“是否填写请假单 ”;2、在日结果-请假时间算法中定义前处理公式,目标字段:是否填写请假单,公式内容:如果 考勤日结果.请假 1 is null 并且 考勤日结果.请假 2 is null
8、 那么 1.0 否则 0.0 结束U8 知识库文档3、在日结果-请假时间算法中定义后处理公式,目标字段:请假 1,公式内容:如果 考勤日结果.是否填写请假单=1.0 并且 考勤日结果.卡 2 非空 并且 考勤日结果.卡 3 非空 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果.卡 2)0 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果.卡 3)0 那么 BS00 否则 考勤日结果.请假 1 结束;4、定义公式,目标字段:请假 1(分钟) ,公式内容:如果 考勤日结果.是否填写请假单=1.0并且 考勤日结果.卡 2 非空 并且 考勤日结
9、果.卡 3 非空 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果. 卡 2)0 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果.卡 3)0 那么 DATEDIFF(minute, 考勤日结果 .卡 2, 考勤日结果.卡 3) 否则 考勤日结果.请假 1(分钟) 结束5、定义公式,目标字段:请假 1(小时) ,公式内容:如果 考勤日结果.是否填写请假单=1.0并且 考勤日结果.卡 2 非空 并且 考勤日结果.卡 3 非空 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果. 卡 2)0 并且 DATEDIFF(
10、minute, 考勤日结果.应上班 1, 考勤日结果.卡 3)0 那么 DATEDIFF(minute, 考勤日结果.卡 2, 考勤日结果.卡 3)/60.0 否则 考勤日结果.请假 1(小时) 结束6、在日结果-出勤状态算法中定义后处理公式,目标字段:是否正常,公式内容:如果 考勤日结果.是否填写请假单=1.0 并且 考勤日结果.卡 2 非空 并且 考勤日结果.卡 3 非空 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果.卡 2)0 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果.卡 3)0 那么 0 否则 考勤日结果. 是否正常
11、结束7、定义公式,目标字段:异常原因,公式内容:如果 考勤日结果 .是否填写请假单=1.0 并且 考勤日结果 .卡 2 非空 并且 考勤日结果.卡 3 非空 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果.卡 2)0 并且 DATEDIFF(minute, 考勤日结果.应上班 1, 考勤日结果. 卡 3)0 那么 私自外出 否则 考勤日结果.异常原因 结束其他场景简述 计算夜班补贴当排班为 1002 或 1003 时,需要给当天排班统计夜班补贴;公式放置步骤(关键)由于公式中用到了日结果字段“实出勤“,而此字段是在步骤”计算实际出勤时间“的默认算法中计算出来的,所以必须在此步骤的算法后第三步或后续算法的第一步或第三步。U8 知识库文档具体公式设置1、 日结果中添加字段“是否有夜班补贴” ;2、 定义日结果-是否有夜班补贴(目标字段)公式内容:分情况 如果 考勤日结果 .班次= 1002 或者 考勤日结果.班次= 1003 并且 考勤日结果.实出勤0 那么 1 否则 0 结束相关知识无