先说结论
很多团队谈制造成本时,脑子里只有两种状态:
- 还没完工,不知道成本
- 完工以后,看成品成本
但在 Odoo 的 mrp_account 里,标准思路并不是一直等到完工,而是允许你先把已经领掉的料 + 已经发生的工单开销挂到 WIP(在制品)上,然后自动冲回。
这意味着:
WIP 不是“最终成本”,而是给财务与生产一个中间时点的真实快照。
向导到底做了什么
mrp.account.wip.accounting 向导会先过滤适用 MO:
progressto_closeconfirmed
也就是说,它面向的是还处在生产中或接近收尾的制造单,而不是只服务于 done 状态。
然后它会自动生成三类会计分录行:
WIP - Component ValueWIP - OverheadManufacturing WIP - xxx对应借方汇总
逻辑上很像:
- 把组件价值和制造开销先从原口径挪出来
- 暂时挂到 WIP 账户
- 到 reversal date 再自动反向冲回
组件价值怎么算
源码里取的是:
move_raw_ids.move_line_ids- 只看
picked且quantity不为零 - 且
date <= 统计时点
这非常重要。
它不是看“理论 BOM 数量”,而是看到这个时点为止,真实已经拣出 / 领出的组件。如果 lot 有独立估值,还会优先取 lot 价格。
所以 WIP 口径偏现实执行,不偏理论配方。
开销为什么来自工单而不是随便估一把
向导里的 overhead_value = productions.workorder_ids._cal_cost(date),说明工时和工序开销来自工单累计,而不是脑补一个统一制造费率。
因此它想表达的是:
- 你已经做掉多少工序
- 到某个日期为止产生了多少实际制造开销
- 这些开销应不应该先挂在在制品上
这比“月底手工估一个在制余额”更贴近执行链。
为什么要自动冲回
WIP 向导不是永久入账,而是配套 reversal_date。
确认后,Odoo 会:
- 建一张正式分录并
post - 再自动生成反向分录
- 在设定的冲回日期
post
这意味着它不是想和最终完工估值重复记账,而是做期间切分。
比如月末你想看到在制品快照,次月一开始自动冲回,避免和后续真实完工入账叠加失真。
最常见的误区
1. 以为 WIP 会替代完工成本
不会。它是期间快照,不是最终结算。
2. 以为组件价值按 BOM 定额走
源码看的是已拣料 move line,不是纯理论数量。
3. 以为没有完工就没有可确认的制造开销
只要工单上已有累计成本,WIP 就能体现。
4. 以为冲回是可有可无
没有冲回,你的中间快照就可能跟后续正式估值重叠。
排错顺序
如果 WIP 金额不对,优先按这个顺序查:
- 选中的 MO 状态是否在向导适用范围内
- 原料 move line 是否
picked且日期落在统计点前 - 工单是否已有可计算成本
- 公司 WIP / overhead / valuation 账户是否配置正确
- reversal date 是否晚于 posting date
一句话记忆法
Odoo 的制造 WIP 不是“提前算最终成本”,而是“把当前已经真实发生的成本先挂出来,再按期间自动冲回”。
DISCUSSION
评论区