企业 制造 / 人工成本

Odoo 企业版制造人工成本为什么不是“工时 × 工位费率”:employee analytic line、重叠工时与取消清理边界

mrp_workorder_hr_account 把人工成本做成真正的 analytic line,并允许同一工位上多员工重叠作业;因此制造成本既不是单一工位费率,也不是工单取消后还能残留旧分录。

企业 制造
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 3 阅读

许多制造团队算人工成本时,习惯用一个最省事的公式:工单做了多久 × 工作中心小时费率。

企业版 mrp_workorder_hr_account 明确不是这样。它先扩展 mrp.workcenter.productivity._prepare_analytic_line_values(),把每段员工作业写成带 employee_id 的 analytic line,名称里还会标记 [EMPL] 工单 - 员工。这意味着系统记录的不是“某工位今天开了多久”,而是“具体哪位员工在这张工单上贡献了多少时间和成本”。

更关键的是 mrp.workorder._compute_duration()。它在父类计算完工时后,会立即触发 _create_or_update_analytic_entry()。也就是说,人工成本不是等月末手工摊,而是随着工单时长变化实时维护 analytic 事实。取消工单时,action_cancel() 又会主动 unlink()employee_analytic_account_line_ids,避免留下已失效的人工成本轨迹。

测试 test_cost_calculation_multiple_employees_same_workcenter() 很能说明问题:同一工作中心允许两位员工有重叠时段,工位成本按工作中心真实占用区间算,员工成本则分别按各自小时成本累加。最后工单成本是员工成本总和加上工位成本,而不是从总时长里挑一个费率统一乘一下。

这就是为什么制造成本经常和现场直觉不同。现场觉得“工位开了 3 小时”,财务却看到人工比预想高,是因为两位员工可能同时在这 3 小时内工作,人工成本本来就会比单人时段更高。企业版把这种重叠视为真实业务,而不是异常。

实施时最容易忽略的地方有两个:一是员工小时成本没有维护,导致 analytic line 虽然生成了,金额却失真;二是工单被取消或重做后,没有回头确认旧 analytic line 是否已清空。前者会让成本偏低,后者会让报表残留幽灵成本。

所以企业版制造人工成本真正强调的,是员工级时间事实 + 工位级占用事实 同时存在,而不是拿一个统一费率去近似一切。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。