仓库现场最容易问的一句话是:既然要做质检,为什么系统不让我一开始就检?企业版 stock_barcode_quality_control 的回答很明确——在条码场景里,质检并不独立于拣货动作,而是建立在“这条 move line 已经进入实际执行”之上的。
stock.move.line._get_fields_stock_barcode() 会把 check_state 带进条码初始数据,让前端知道每条行当前有没有质检状态可显示。但可显示不等于可触发,真正的边界在 _is_checkable_from_context()。
当上下文里存在 barcode_trigger 时,源码会额外要求该行已经 picked。这说明系统认为:扫码触发的质检应该发生在你真正拣到、录到或确认到那条行之后,而不是在还没碰到实物时先做一张抽象检查单。
同样地,stock.picking._get_fields_stock_barcode() 会把 quality_check_todo 也带进条码初始状态,让 picking 层知道还有多少检查没做完。于是库存动作和质量动作在同一个客户端状态里发生对接:行级是否可检,看 picked 与上下文;单据级是否还欠检,看 quality_check_todo。
这条链说明企业版把质量检查嵌进了条码执行流,而不是挂成一个平行待办。仓库不是先把所有动作做完再统一补检,也不是先把检做完再去碰货,而是在“实物已进入扫描事实”之后接上质量环节。
如果你发现某条 move line 明明有质检点却在条码端点不开,优先看是不是还没被标记 picked、是不是进入了带 barcode_trigger 的路径、以及初始字段里是否真的带了 check_state。这些条件缺一不可。
DISCUSSION
评论区