库存盘点

Odoo 库存盘点为什么不是“直接改数量”:stock.quant、inventory_quantity 和差异入账到底怎么走

很多人以为 Odoo 盘点就是把现存数量改掉,但源码里库存调整其实是通过 quant 差异生成正式库存 move。本文把它讲清楚。

Odoo 开发 库存
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 6 阅读

先说结论

Odoo 的库存盘点,不是“把 on hand 数字直接改掉”。

它真正的思路是:

先在 stock.quant 上记录盘点目标数量,再让系统根据差异生成并过账一笔正式库存 move,使账实一致。

所以盘点是差异校正流程,不是手改现存量。


为什么它不是直接改 quantity

如果只是改字段,系统根本不需要:

  • inventory_quantity
  • inventory_diff_quantity
  • inventory_quantity_set
  • 盘点确认动作
  • 库存损益位置 property_stock_inventory

这些结构同时存在,说明 Odoo 在做的是:

  • 记录盘点值
  • 计算差异
  • 再生成正式库存变动

而不是跳过库存链路。


inventory_quantity 真正在表达什么

stock.quant 里:

  • quantity 更像当前系统账面数量
  • inventory_quantity 更像这次盘点想确认成多少

所以你在盘点界面输入的,不是“直接改库存”,而是:

告诉系统,这个 quant 在现实里应该是多少。

后面系统再根据差值决定要补货还是减货。


差异是怎么落地的

源码里对 inventory_quantity 的处理会最终创建并校验库存 move,使 quant 与盘点值一致。

而且 move 的对方位置会用到产品 / 公司的 property_stock_inventory

这说明 Odoo 不会偷偷改账,而是把盘亏盘盈当成正式库存业务处理。

所以盘点调整最终还是进入:

  • 库存流转
  • 位置变动
  • 后续估值 / 会计语义

为什么会有冲突、清空、设零这些动作

stock_quant.py 里除了设置盘点值,还有:

  • conflict 警告
  • clear inventory quantity
  • set inventory quantity zero
  • inventory mode

这些都说明盘点不是一个瞬间按钮,而是一个需要:

  • 批量录入
  • 检查冲突
  • 再统一应用

的过程。


新手最容易误解的 4 件事

1. 以为盘点就是改 on hand

实际上是通过差异生成库存动作。

2. 以为 quant 上多一个数字只是临时备注

inventory_quantity 是调整输入,不是备注。

3. 以为盘亏盘盈和库存操作无关

最终还是通过 stock move 落地。

4. 以为盘点只是仓库页面小功能

它会继续影响估值与会计语义。


一句话记忆法

盘点不是直接改库存,而是先在 quant 上声明“实际应该是多少”,再让系统用正式库存 move 把差异补齐。

DISCUSSION

评论区

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