小数从哪里开始出现
某次 NC6.5 考勤排查中,应出勤班数本应是整数,部分月报却出现了 22.23,实际出勤扣减后也保留相同的小数尾数。
这个现象容易让人先怀疑月报公式。但如果只是把最终结果取整,合法的半天假等小数也可能一并被抹掉。应先追查小数在哪一层首次出现。
先确认当前使用的统计分支
这次排查中的应出勤公式存在两个来源:自动统计开启时取出勤明细汇总;另一分支取考勤规则中的月工作天数。本次命中的是自动统计分支。
继续向下核对后,发现月报引用的出勤明细已经带有小数。这样就可以把调查重点从“最终显示如何取整”转向“明细如何计算”。
对应 NC6.5 字典可核对到以下结构:
| 对象 | 关注内容 |
|---|---|
tbm_monthwork 月报出勤数据 | workdays 应出勤班数、workhours 应出勤工时 |
tbm_psncalendar 员工工作日历 | gzsj 工作时长、pk_shift 班次、if_rest 休假标志 |
bd_shift 班次 | gzsj 工作时间 |
字典能帮助确认字段含义。具体公式、折算方式和统计链路,仍需要以当前环境为准。
用一个简单算式还原差额
该案例的默认班次工作时长为 6.5 小时,但部分人员某一天的日历保存了 8 小时。把差异代入月工时后,可以还原小数出现的过程。
正常月工时:22 × 6.5 = 143 小时
差异月工时:21 × 6.5 + 8 = 144.5 小时
差额:144.5 - 143 = 1.5 小时
折算差额:1.5 ÷ 6.5 ≈ 0.230769 班
小数的量级与日历多出的时长一致。这是继续核对上游数据的重要线索,但算式吻合还不够,仍需逐项比对异常人员的日历和月明细。
先确认业务事实,再谈修正
关键问题是:当天实际应工作 6.5 小时,还是确实安排了 8 小时?
如果实际安排是 8 小时,首先要明确统计的是“工作日天数”还是“等效班数”。不能仅为了得到整数,就把真实工时改成默认值。
这次排查确认了日历时长差异,但没有确认是哪一步操作写入了异常值。数据差异与操作原因是两个层次,后者仍需要日志或操作记录证明。
让修复与复核处于同一条链路
确认源头需要修正后,应固定范围、保存原值,再按现场业务流程处理。修正日历之后,还需要依次核对相关考勤处理、日报和月报是否已重新生成。
验证时至少回答三个问题:
- 源头时长是否符合已经确认的工作安排?
- 月明细的工时与班数能否按该环境规则解释?
- 合法的半天假等小数是否仍然正确保留?
这个案例真正可复用的,是从结果向上游追溯,再用数量关系验证原因的路径。最终的小数是线索;正确的处理范围和业务口径,决定了修复是否可靠。