先说结论
在 Odoo 里,制造并不是“单独建一张 MO 然后结束”。
更准确地说,它通常是几层一起配合:
- 需求从哪里来
- BOM 定义需要什么原料和产出
- 制造单承接执行
- 原料和成品 move 把库存动作落下去
所以制造单不是孤立对象,而是生产履约链的中心节点。
为什么很多人一看制造就只盯 MO
因为界面上最醒目的就是 Manufacturing Order。
但 MO 只是最显眼的业务对象,不代表它是整件事的全部。
如果你只盯 MO,很容易忽略:
- 需求是怎么触发生产的
- BOM 怎样决定原料结构
- 原料消耗和成品入库怎么落到库存对象
所以制造问题很多时候要横着看 BOM、库存和规则,而不是只盯一张单。
BOM 真正解决的是什么
BOM 最本质是在说:
要生产这个成品,系统认为通常需要哪些原料、工序或组成结构。
所以它不是执行对象,而更像“生产配方定义”。
没有这层,制造单就不知道要消耗什么、产出什么。
MO 更像什么
MO 更像:
把生产需求正式落成可执行任务。
它会承接:
- 生产哪个产品
- 生产多少
- 什么时候做
- 需要哪些原料准备
- 最终要把什么成品入库
所以 BOM 是定义层,MO 是执行承接层。
为什么生产也离不开库存 move
因为“制造”最终还是会落成库存世界里的变化:
- 原料被消耗
- 半成品/成品被生产出来
- 库位间发生移动
所以很多制造链路最后还是会回到 stock.move / move line 这些对象。
也就是说:
制造不是脱离库存的独立系统,而是把生产业务投影进库存执行的一种方式。
为什么制造需求常常不是手工创建的
因为它也可能来自上游规则。
例如:
- 销售需求往下传
- 补货规则触发
- make_to_order / manufacture 路线命中
这时制造单并不是用户手点新建,而是系统沿着供应链规则把需求推进到制造执行层。
所以“制造单怎么自己出来了”,很多时候并不是 bug,而是路由链正常在跑。
实战里最容易踩的 5 个坑
1. 只盯 MO,不看 BOM 定义
问题根源可能在配方层。
2. 只看制造,不看库存 move
执行层变化会被漏掉。
3. 以为制造需求一定要手工创建
会误判系统自动触发行为。
4. 把 BOM 当执行对象理解
会混淆定义层和执行层。
5. 只看成品,不看原料准备和消耗链
很多异常就查不全。
一句话记忆法
把它记成一句话:
BOM 负责定义“怎么做”,MO 负责承接“这次真的去做”,而原料消耗和成品产出最终还是要落到库存 move 链路里。
理解这一句,Odoo 制造链路会清楚很多。
DISCUSSION
评论区