预留时机

Odoo 预留方法为什么会改变“何时有货”的体验:At Confirmation、Manual、By Date 和 reservation_date 讲透

很多人把 Odoo 的预留方法当成一个不起眼的操作类型配置,但它实际决定了系统何时尝试锁货、何时只是等待、何时要靠计划日期倒推 reservation_date。本文把这层“时机语义”讲透。

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

先说结论

在 Odoo 里,reservation method 配置的不是“预留功能开不开”,而是:

系统应该在什么时间点,开始把需求真正推向库存锁定。

所以 At ConfirmationManualBy Date 的区别,不只是操作习惯不同,而是三种完全不同的时间语义:

  • 一确认就抢库存
  • 人工决定什么时候抢
  • 先等到更接近计划日期再抢

这也是为什么同样一张出库单,换个 reservation method,用户体感会完全不同。


为什么很多人把预留方法看成“小配置”

因为大家更容易关注:

  • _action_assign() 有没有成功
  • 为什么有货却没分配上
  • 哪些 quant 被选中了

但这些更像“一旦开始预留之后,系统怎么干活”。

reservation method 解决的却是更前面的问题:

  • 系统什么时候才应该开始干这件事

这比“怎么分配”还更接近业务节奏。

例如:

  • 电商仓希望一确认就尽早锁货
  • 计划型仓库可能希望临近发货再锁,避免过早占用
  • 某些场景则希望由仓库主管手工统一放行

所以这个配置影响的是库存竞争发生的时点。


At Confirmation:最积极的语义

它的核心意思很简单:

  • 单据一确认
  • 系统就尽快尝试预留

这个模式适合:

  • 周转快
  • 订单量大
  • 希望尽早暴露缺货
  • 谁先确认谁先锁货的业务规则比较明确

它的优点是反应快,缺点也很明显:

  • 可能过早占住库存
  • 后面更紧急的单据反而得不到货
  • 计划日期还很远,但库存已经被前面的订单先吃住

所以它不是“更先进”,只是“更积极”。


Manual:把时机交还给人

Manual 的真实含义不是“系统不会预留”,而是:

  • 系统默认不主动在确认时做
  • 要由用户或后续动作明确触发

这种模式适合:

  • 现场需要统一波次放货
  • 仓库经理想先看全局,再决定抢货顺序
  • 某些订单虽然确认了,但并不意味着立即进入执行

它的优势是控制感强;代价是:

  • 更依赖人
  • 如果团队纪律不稳,容易出现单据一直没进预留的灰区

By Date:不是慢一点,而是“按计划窗口再出手”

By Date 最容易被低估。

很多人以为它只是:

  • 比 At Confirmation 晚一点

其实它背后多了一层计划逻辑。

源码里可以看到,当 picking type 切到 by_date 时,系统会去处理 move 的 reservation_date,通常是根据:

  • move 的计划日期 / 预期日期
  • operation type 上的提前天数
  • 优先级

做一个倒推。

也就是说,系统不是“随便拖后”,而是在表达:

这张需求离真正执行还有多远,应该在什么时候进入锁货竞争。

这对计划型仓库特别重要。


为什么 reservation_date 是这个话题真正的关键

很多人只看到了 reservation_method 三个选项,却忽略了 reservation_date 才是把“策略”变成“具体时点”的桥。

你可以把它理解成:

  • reservation method 决定“采用哪种时机规则”
  • reservation_date 决定“这张 move 具体哪天该开始抢库存”

所以在 by_date 模式下,真正被排进库存竞争队列的,不只是单据确认时间,而是:

  • 计划日期
  • 提前量
  • 优先级共同推导出的 reservation_date

这就是它和“确认就抢”的根本区别。


为什么它会显著改变用户体感

因为用户感受到的“有货 / 没货”,很多时候并不只是物理库存问题,而是:

  • 谁先进入预留
  • 谁被允许提前锁货
  • 谁要等到窗口临近

同样 100 件货,三张单据都要抢:

  • At Confirmation 会让先确认的人先占
  • Manual 会让调度人决定谁先进场
  • By Date 会让更接近执行窗口的需求先进入竞争

所以 reservation method 不是技术细枝末节,而是库存公平性和执行节奏的规则开关


实战里最容易出现的误判

1. 以为“没自动预留”就是 bug

如果是 Manual 或 By Date,这往往根本不是 bug,而是配置语义如此。

2. 以为预留失败只和 quant 有关

很多时候不是 quant 不够,而是还没到 reservation_date。

3. 以为换成 At Confirmation 就一定更好

它会更快暴露问题,也会更快制造库存占用冲突。

4. 只盯着 picking,不看 operation type

预留时机很多时候是 picking type 级别的制度,不是单张单据自己的小动作。


选型时可以怎么想

如果你希望尽早暴露缺货

优先考虑 At Confirmation

如果你希望仓库统一调度

优先考虑 Manual

如果你希望库存更贴近执行窗口再被占用

优先考虑 By Date

关键不是哪个“高级”,而是哪个更符合你的履约节奏。


一句话记忆法

在 Odoo 里,reservation method 决定的不是“预留要不要做”,而是“库存竞争从什么时候开始”;reservation_date 则把这种策略真正落成每一笔 move 的入场时间。

DISCUSSION

评论区

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