企业 盘点条码

Odoo 企业版条码盘点为什么不是“扫到商品就改数量”:dummy line、lot 自动补建与 inventory_mode 写入边界讲透

stock.quant.barcode_write 处理的不是普通 write,而是一套给移动盘点端用的命令协议:临时行、lot 自动补建、inventory_date 回填和 user 认领都在这条链路里。

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

很多人以为条码盘点只是把 stock.quant.quantity 改一下。企业版不是这么设计的。

这篇文章主要参考:

  • enterprise/stock_barcode/models/stock_quant.py
  • enterprise/stock_barcode/controllers/stock_barcode.py

一、条码盘点走的是专门协议,不是普通表单保存

控制器 /stock_barcode/save_barcode_datares_id 为空时,不会对某条 quant 调用常规 write,而是直接把前端传来的命令数组交给 stock.quant.barcode_write()

这里的输入形态是:

  • [1, quant_id, {...}]:更新已有 quant
  • [0, 0, {...}]:创建新的 quant 行

这说明移动端盘点界面维护的是一组“待提交操作”,而不是一条记录的同步表单。

二、为什么需要 dummy line

dummy_id 的存在,是为了让前端能先生成临时行,再在后端真正落成 quant。特别是扫描到已有库存但当前并未显示在用户盘点列表里时,系统可能创建/写入后再把结果重新回传给前端。

也就是说,dummy line 不是脏设计,而是移动端增量编辑与后端真实 quant 之间的缓冲层

三、lot 自动补建不是便利功能,而是保证盘点流不断裂

barcode_write() 里有一段关键逻辑:如果命令里没有 lot_id 但有 lot_name,系统会先创建 stock.lot,再继续后面的 quant 写入。

这解决了现场最常见的问题:操作员先扫商品再录批次,不应该被迫退出盘点流程先去后台建 lot。

但边界也很清楚:自动补建 lot 只是在条码盘点这条受控链路里成立,不代表别的库存写入场景都应该模仿。

四、inventory_mode 和 user 认领为什么重要

barcode_write() 整体在 inventory_mode=True 的环境下执行;新建 quant 后还会补写 inventory_date,必要时把 user_id 认领给当前盘点人,避免页面离开再回来时记录“消失”。

这说明条码盘点真正维护的是“盘点工作区”,不是实时改一张全局库存表。

五、结论

企业版条码盘点的重点不是扫枪本身,而是:前端命令协议、dummy line、lot 自动补建和 inventory workset 共同组成的一条可连续执行的盘点链路。

DISCUSSION

评论区

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