很多人第一次用企业版 timesheet grid,会觉得它只是“把工时录入做成了 Excel 一样的表格”。但真正让这个模块值钱的,不是 grid,而是 validated、last_validated_timesheet_date、timer 和 merge 规则共同构成的控制网。
主要参考:
enterprise/timesheet_grid/models/account_analytic_line.pyenterprise/timesheet_grid/models/timesheet_grid_mixin.py
一、validated 不是勾选框,而是可编辑性的分界线
源码里一旦工时被验证,通过普通方式修改、删除,甚至继续用 timer 追记,都会受到限制。因为对企业项目来说,工时被批准后就不再只是员工个人记录,而可能已经进入成本、审批和计费链路。
二、last_validated_timesheet_date 让“时间”也变成边界
很多系统只锁具体记录,Odoo 企业版还会记员工最近一次被验证的工时日期。这样设计的意义是:即使不是同一条记录,只要发生在已验证边界之前,系统也会阻止继续倒填或补删。这对防止月末回头改工时非常有效。
三、timer 与 validation 是强耦合关系
源码里能看到,验证工时前后会主动停止相关 timer;已验证工时不能继续跑 timer,也不能把运行中的 timer 安在被锁区间上。换句话说,计时器不是一个独立小工具,它必须服从工时审批边界。
四、merge 只允许在合适对象上发生
_get_timesheets_to_merge() 等逻辑表明,只有未验证、属于项目的工时才适合合并。因为一旦进入验证或计费语境,随意合并记录就会破坏审计和回溯能力。
五、实施建议
- 明确谁能验证、谁只能录入,别让项目经理和普通成员共享同一权限口径。
- 月结前后统一执行验证,不要半个月度、半自由录入并存。
- 培训时重点讲“为什么不能改”,不要只告诉用户哪里点不了。
六、结论
timesheet grid 的价值,不是把工时录得更快,而是让“录入、验证、计时、合并”四件事最终指向同一份可信工时数据。
DISCUSSION
评论区