小数从哪里开始出现

某次 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 小时,首先要明确统计的是“工作日天数”还是“等效班数”。不能仅为了得到整数,就把真实工时改成默认值。

这次排查确认了日历时长差异,但没有确认是哪一步操作写入了异常值。数据差异与操作原因是两个层次,后者仍需要日志或操作记录证明。

让修复与复核处于同一条链路

确认源头需要修正后,应固定范围、保存原值,再按现场业务流程处理。修正日历之后,还需要依次核对相关考勤处理、日报和月报是否已重新生成。

验证时至少回答三个问题:

  1. 源头时长是否符合已经确认的工作安排?
  2. 月明细的工时与班数能否按该环境规则解释?
  3. 合法的半天假等小数是否仍然正确保留?

这个案例真正可复用的,是从结果向上游追溯,再用数量关系验证原因的路径。最终的小数是线索;正确的处理范围和业务口径,决定了修复是否可靠。