先说结论
Odoo 的库存盘点,不是“把 on hand 数字直接改掉”。
它真正的思路是:
先在
stock.quant上记录盘点目标数量,再让系统根据差异生成并过账一笔正式库存 move,使账实一致。
所以盘点是差异校正流程,不是手改现存量。
为什么它不是直接改 quantity
如果只是改字段,系统根本不需要:
inventory_quantityinventory_diff_quantityinventory_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
评论区