先说结论
如果你想真正看懂 Odoo 库存,不要一上来就把所有模型摊平去背。
最稳的方式是:
先抓住
stock.move这根主线,再往外扩到 route / rule、reservation、补货链、多步仓。
因为 Odoo 库存看起来模块很多:
- 销售
- 采购
- 仓库
- 制造
- 补货
- 调拨
- 预留
但这些东西最后大多都会落回同一件事:
- 一条需求,怎样变成 move,怎样被分配,怎样继续向上游或下游传播。
所以这篇不讲新知识点,专门帮你把前面一批文章串成一条真正能学下去的路径。
为什么学习 Odoo 库存最容易半路迷路
因为它不像某些模块那样“一个模型一个闭环”。
库存是典型的网络型系统:
- move 会串 move
- route 会命中 rule
- rule 会生成 move
- move confirm 又会继续生成 procurement
- quant / reservation 又决定 move 能不能真的动起来
所以如果你按“今天看一点 A,明天看一点 B”的方式随便跳着学,很容易出现这种感觉:
- 每篇都看懂一点
- 但整条链还是看不清
解决办法不是“再多看几篇零散文章”,而是换成带顺序的学习路径。
路线总览:建议按 5 个阶段学
我建议把 Odoo 库存源码学习拆成 5 段:
- 先认识库存最小执行单元:
stock.move - 再理解需求怎么被分流:route / rule / procure_method
- 再理解 move 为什么能不能动:reservation / quant / 状态机
- 再理解需求怎么串成链:procurement.group / move_orig_ids / move_dest_ids
- 最后再回到真实仓库设计:多步仓、收货、质检、上架、拣货、打包、出货
你会发现,这个顺序本质上就是:
- 先学“点”
- 再学“分流”
- 再学“能否执行”
- 再学“如何串链”
- 最后学“如何落地到仓库场景”
这比一上来就直接冲多步仓和补货规则,稳得多。
第 1 阶段:先抓住 stock.move
如果你还没真正把 stock.move 看明白,后面很多概念都会像浮在空中。
因为在 Odoo 里,很多东西最后都会落回:
- 创建 move
- confirm move
- assign move
- done move
所以第一阶段建议先看这些文章:
1. 《Odoo 库存核心模型速览:stock.picking、stock.move、stock.move.line、stock.quant》
这篇适合用来先把基础角色分开。
重点建立最基本的脑图:
stock.move是需求 / 动作抽象stock.move.line是实际执行明细stock.quant是底层库存事实stock.picking是业务容器
2. 《出库时的 stock.move.line 是如何确定的》
这篇适合补“move 和 move line 到底怎么接上”。
如果你老分不清:
- 为什么有时看 move 就够
- 为什么有时必须看 move line
这篇很关键。
3. 《Odoo 库存 move 状态机怎么读:waiting、confirmed、partially_available、assigned 排查顺序讲透》
这篇适合把 move 的“静态字段理解”推进到“动态状态理解”。
因为真正调试时,用户问的不是模型定义,而是:
- 为什么现在是 waiting
- 为什么不是 assigned
所以第一阶段最后要把状态机补上。
第 2 阶段:理解需求怎么分流
当你知道 move 是库存最小执行单元后,下一步就要回答:
- 这些 move 到底是谁决定怎么长出来的?
答案通常就在:
- route
- rule
- procure_method
这一层是 Odoo 库存真正的“决策引擎”。
建议这样读:
4. 《Odoo 库存路线和规则到底谁在做决定:stock.route 与 stock.rule 决策引擎深度解读》
先打总框架。
它解决的是:
- route 和 rule 谁在决定方向
- 谁在决定动作
5. 《Odoo 里 Pull、Push、Pull & Push 到底怎么分工:库存规则三种动作边界讲透》
这篇把 rule 的动作边界讲透。
如果你老觉得:
- 都是在调拨,pull / push 有啥不一样
那就该看这篇。
6. 《Odoo 里 make_to_stock、make_to_order、mts_else_mto 到底怎么影响链路:procure_method 深度解读》
这篇进一步解决:
- 当前来源层是先用库存,还是继续把需求往上游传
这一篇其实特别关键,因为它是“分流之后的供给策略”。
第 3 阶段:理解 move 为什么能不能真正动起来
很多人学完 route/rule 后会产生错觉:
- 路都懂了,库存应该就懂了
其实还差很大一块:
- move 被生成出来,不代表它已经能执行。
真正能不能动,要看:
- reservation
- quant
- free_qty
- reservation timing
- strict 边界
这一阶段建议看:
7. 《Odoo 预留方法为什么会改变“何时有货”的体验:At Confirmation、Manual、By Date 和 reservation_date 讲透》
这篇解决的是:
- 系统什么时候开始抢库存
8. 《Odoo 为什么明明看起来有库存,却还没有开始预留:free_qty、reservation_date、operation type 排查讲透》
这篇解决的是:
- 不是 reserve 失败,而是还没轮到 reserve
9. 《Odoo 明明有货为什么还是预留失败:reservation 边界、strict 匹配和负库存修正讲透》
这篇解决的是:
- 已经开始 reserve 了,为什么还是没成功
这三篇最好连着看。因为它们分别对应三层问题:
- 什么时候开始
- 为什么还没开始
- 开始后为什么失败
第 4 阶段:理解需求是怎么串成整条链的
这一步是很多人真正“开窍”的地方。
因为看懂单张 move,不等于看懂整条链。
你真正要理解的是:
- 销售需求怎么串到补货
- 上游 move 怎么喂给下游 move
- 为什么有些 move 会 waiting
- procurement.group 到底在帮谁“绑单”
这一阶段建议看:
10. 《Odoo procurement.group 到底在帮谁“绑单”:需求归组、补货链串联和来源追踪讲透》
先建立 procurement.group 的角色感。
11. 《Odoo 需求链到底怎么串起来:procurement.group、move_orig_ids、move_dest_ids 深度解读》
这篇再把 move 链真正讲透。
如果你看到这里,脑子里应该开始形成这种图景:
- 不再是一堆散单据
- 而是一条有来源、有前后关系、有依赖顺序的需求链
这一步一旦打通,库存很多“会自己长出来”的感觉就会消失。
第 5 阶段:最后回到真实仓库设计
源码学到后面,很容易有个风险:
- 概念都懂了,但不知道怎么落到仓库配置
所以最后一定要回到真实仓库场景。
12. 《Odoo 多步仓实战设计:收货、质检、上架、拣货、打包、出货到底该怎么配》
这篇就是用来做收口的。
它会把前面学过的东西重新落回业务语言:
- 哪些节点该拆
- 哪些动作只是动作,不该硬建成 location
- 入库和出库为什么要分开设计
这一步很重要,因为只有这一步做完,你前面的源码理解才真正能转成项目设计能力。
如果你时间不多,最小学习顺序怎么排
如果你现在没空全看完,我建议先读这 6 篇,作为“最小闭环”:
- 库存核心模型速览
- stock.route / stock.rule 决策引擎
- Pull / Push / Pull & Push
- MTS / MTO / MTSO
- move 状态机排查
- 需求链:procurement.group + move_orig_ids + move_dest_ids
这 6 篇读完,你已经能看懂 Odoo 库存 70% 以上的骨架了。
如果再继续补:
- reservation method / reservation_date
- 为什么还没开始预留
- 为什么预留失败
- 多步仓实战
那就基本能覆盖大多数项目里的排查和设计场景。
学这套专题时,一个很重要的心法
不要试图把所有模型一次性背下来。
更高效的方式是:
第一步
先问:
- 当前这条业务问题最后落在哪张 move 上?
第二步
再问:
- 这张 move 是怎么长出来的?
第三步
再问:
- 它为什么现在能动 / 不能动?
第四步
最后问:
- 它前后还串着谁?
这其实就是整套学习路径的底层方法。
一句话记忆法
把这套学习路线记成一句话:
先看
stock.move是什么,再看它怎么被 route/rule 决定,再看它怎么被 reservation 决定能不能动,最后再看它如何被链成整条需求链,并落回真实仓库设计。
如果你按这个顺序学,Odoo 库存不会再像“知识点一大坨”,而会慢慢变成一张真正能展开、能调试、能设计的系统地图。
DISCUSSION
评论区