波次条码不是“把几张 picking 丢进一个大页面就开始扫”。stock_barcode_picking_batch 的主链路很清楚:先新建空批次,再挑允许进入的 picking,确认后才把批次数据包装成条码端能执行的初始状态。
open_new_batch_picking() 创建的是一个空 stock.picking.batch,它的价值在于先拿到批次容器,而不是立刻决定拣哪些单。随后 action_get_new_batch_status() / action_confirm_batch_picking() 会围绕 allowed_picking_ids 做选择和确认,这一步保证条码端拿到的是一批状态合格、拣货类型相容的单据。
真正送进移动端的是 _get_stock_barcode_data()。这里系统不仅会带上批次本身,还会把 users、partners、picking types、source/destination locations 等关联记录一并打包。条码端因此不是临时再去后端零散抓数据,而是拿到一份准备好的执行快照。
stock.picking.type._get_barcode_config() 里的 group_lines_by_product 又决定了界面是不是按产品聚行。这个配置虽然出现在拣货类型上,但它直接改变条码端看到的执行颗粒度:是按单据行拣,还是按产品与库位合并后拣。
于是跨模块链路就出来了:批次模型负责组织 picking 集合,拣货类型负责注入执行规则,条码客户端负责消费这份批次快照。没有前两段,第三段就不是高效执行,而是现场补课。
如果波次条码表现异常,最先该查的不是扫码枪,而是 allowed_picking_ids 为什么不对、批次确认是否成功、以及 picking type 的 group_lines_by_product 是否把现场希望看到的粒度改掉了。
DISCUSSION
评论区