很多人把 Shop Floor 理解成“把工单搬到平板上,再给几个扫码按钮”。
但 Odoo 企业版在批次号和序列号这件事上,非常明确地划了一条边界:系统可以帮你预填、帮你带出、甚至帮你生成,但不会把所有追踪决策都替现场做掉。
这篇文章主要参考:
enterprise/mrp_workorder/models/stock_picking_type.pyenterprise/mrp_workorder/tests/test_shopfloor.pyenterprise/mrp_workorder/static/tests/tours/tour_shopfloor.js
一、先看总开关:prefill_shop_floor_lots 不是体验优化,而是责任划分
stock.picking.type 在企业版里新增了 prefill_shop_floor_lots。
帮助文字写得很直白:
- 打开时,组件 move 上已经预留的批次/序列号会显示在 Shop Floor
- 关闭时,现场处理组件时永远需要手动选择
这说明它不是一个“UI convenience”小配置,而是在决定:
- 系统预留是否足够可信,能直接拿来给操作员确认
- 还是必须把最终 lot/serial 的选择权放在工位现场
对离散制造来说,这个边界很关键。
因为很多企业不是不知道该用批次追踪,而是不敢让系统自动替人确认“这一次到底拿了哪一个 lot”。prefill_shop_floor_lots 实际上就是把这种治理选择显式配置化。
二、能自动带出的前提,是后台已经有“被保留的答案”
当这个开关开启时,Shop Floor 并不是凭空猜 lot/serial。
它能带出的,前提是后台组件 move 已经有保留结果。也就是说,前面的库存分配、预留、库位与可用批次选择,已经先在库存链路里形成了一个“候选答案”。
于是 Shop Floor 做的事情更像是:
- 把后台已经保留的追踪结果带到工位端
- 让现场继续执行、核对、必要时调整
而不是:
- 在工位界面里临时决定整条库存追踪逻辑
这也是为什么同样是扫码作业,有的企业会觉得 Shop Floor “很聪明”,有的企业却觉得“怎么还要我自己选”。因为它依赖的不是页面本身,而是你前面库存预留链路做到了哪一步。
三、成品或副产品需要 SN 时,系统可以帮你生成,但仍然要在正确节点确认
test_generate_serials_in_shopfloor() 对这个设计说明得非常清楚。
这个测试做了几件事:
- 开启 tracking 与 by-product
- 建一个带副产品的 BoM
- 让副产品
byprod走 serial tracking - 在 Shop Floor 里打开副产品登记向导
- 输入
00001,并通过 many2one 创建生成该序列号 - 保存后完成工单
- 最终断言
mo.move_byproduct_ids.lot_ids.name == "00001"
这里最值得注意的不是“可以生成序列号”,而是生成动作被放在工位作业流程的业务节点里。
Odoo 没有在后台悄悄替你生成一个随机序列号直接完成,而是要求操作员在副产品行上进入向导、确认或创建序列,再继续完工。这意味着:
- 系统可以辅助生成追踪对象
- 但追踪对象的业务确认,仍然属于作业过程的一部分
这正是企业版 Shop Floor 的一贯风格:给自动化,但不偷走责任。
四、组件登记、成品登记、副产品登记,其实不是同一种“扫描”
从测试和前端 tour 可以看出,Shop Floor 里至少有三类不同的追踪动作:
- 组件消耗登记:更多依赖 move 预留、现场确认和数量变更
- 成品登记:要处理产量、qty producing、追踪方式以及是否自动结单
- 副产品登记:要额外考虑 cost share 之外的 lot/serial 绑定与产出确认
这三类动作虽然都发生在同一个工位界面,但后台语义完全不同。
所以不要把 Shop Floor 当成一个“大而全的扫码壳子”。它本质上是在同一个入口里,承载不同业务对象的确认动作:
- 有的是确认库存消耗
- 有的是确认成品产出
- 有的是确认追踪实体本身被创建并绑定
五、为什么企业现场最容易误解这里
最常见的误解是:
既然系统知道我这张 MO 该消耗什么料、该产出什么货,为什么不能全部自动填完?
答案是:因为“知道应该发生什么”,不等于“知道现场实际发生了什么”。
尤其在 lot/serial 追踪场景里,系统需要在三个目标之间权衡:
- 效率:尽量少让操作员重复输入
- 可追溯性:最终 lot/serial 必须准确
- 责任边界:谁确认了哪一个追踪对象,必须说得清
prefill_shop_floor_lots、生成 serial 的向导流程、组件/副产品分别登记,都是围绕这三个目标做出来的折中。
六、这套设计真正适合什么工厂
如果你的工厂:
- 组件 lot 通常在发料前就已分配好
- 现场更像核对和执行,而不是临时决策
- 对成品或副产品的序列号确认要求高
那么企业版 Shop Floor 这套机制会很好用。
因为它让“库存系统已知答案”和“现场最后确认动作”能顺畅接起来。
但如果你的现场经常边做边找料、边做边决定批次,那你就不能期待 Shop Floor 自动带出一切;你更应该把重点放在库存预留和作业纪律上。
结论
Odoo 企业版 Shop Floor 对 lot/serial 的处理,不是“能不能扫码”这么简单。
它真正做的是:把预留结果、工位确认、序列生成和组件/副产品登记拆成不同责任层级。
所以有时它会替你带出 lot/serial,有时却坚持让你在现场再扫一次——这不是不智能,而是在保护追踪准确性和责任边界。
DISCUSSION
评论区