企业 质检波次

Odoo 企业版库存质检为什么不是“波次里弹几个检查项”:quality check 在 batch split、重建与阻塞放行里的边界讲透

quality_control_picking_batch 处理的不是简单的批量显示,而是 batch 上 quality_check_todo 聚合、split 后 obsolete check 清理与 operation/product 检查重建。

企业 库存
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

库存质检最容易被低估的地方,是大家总以为“把检查项显示出来”就算完成集成。企业版远不止如此。

这篇文章主要参考:

  • enterprise/quality_control_picking_batch/models/stock_picking_batch.py
  • enterprise/quality_control_picking_batch/models/stock_picking.py
  • enterprise/quality_control_picking_batch/models/quality_check.py

一、batch 上的 quality_check_todo 只是结果,不是根因

batch 级别的 quality_check_todo 只是把各 picking 的待检状态聚合出来,让波次界面知道当前是否仍有未完成检查。

所以它本质上是一个调度信号,不是质检记录本身。

二、真正复杂的是 split 之后如何处理旧检查项

_add_to_wave_post_picking_split_hook() 很关键:当 move 因拆分、转移或重建而离开原 picking 时,旧的 operation/product 检查可能已经失去业务意义。

官方做法不是“尽量复用旧检查”,而是:

  • 先找出 quality_state == 'none' 的旧检查
  • 如果 operation 级别已失效,或 product 级别对应产品已经不在 picking 内,就删除
  • 再对新的 move 重新 _create_quality_checks()

这体现了一个很清晰的设计边界:检查项依附的是当前操作事实,不是历史 UI 痕迹。

三、为什么这一层放在库存而不是制造

因为这里讲的是 picking / wave / batch 维度的收货与出库控制,核心对象还是 stock.picking。即使制造也会触发质量机制,波次场景里的阻塞与重建逻辑仍然首先属于库存执行层。

四、结论

企业版 batch 质检的重点不是“多显示几个质检按钮”,而是在批量执行、拆分和重新分配之后,系统如何保证检查项仍然精确绑定到当前可执行的库存事实。

DISCUSSION

评论区

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