先说结论
很多人提到 Odoo 采购交期,第一反应就是:
- 供应商档案里有个
delay
这当然对,但只对了一半。
在真正的采购补货链里,系统更常在做的是:
- 先确定 希望什么时候收到货
- 再叠加 供应商 lead time
- 再叠加 公司级 Days to Purchase
- 必要时把下单日继续往前推
所以实战里更应该记住的是:
供应商交期不是一个孤立数字,而是 Odoo 用来推导“最晚什么时候必须下单”的时间组件。
为什么这篇和“lead times and scheduled dates”不是同一题
站里已有一篇文章讲整个 lead time 思维:
- 日期不是单点
- 系统在整条链上倒推
这篇再往采购深一层,专门聚焦:
supplier.delaycompany.days_to_purchasedate_plannedorder_date_plannedOrder Deadline
也就是把“时间倒推”收缩到 采购补货真正何时触发、何时必须下单 这个细分题上。
_get_lead_days() 才是采购时间叠加的关键入口
在 purchase_stock/models/stock_rule.py 里,_get_lead_days() 很值钱。
它在 buy rule 下会做几件事:
- 如果没找到 vendor,直接给一个很大的 no-vendor delay
- 找到 vendor 后,把
seller.delay加进total_delay - 同时把公司配置
days_to_purchase也加进total_delay - 还会生成可解释的 delay description,比如:
Vendor Lead TimeOrder DeadlineDays to Purchase
这说明 Odoo 的设计不是“只取一个供应商交期字段”,而是:
把采购前置准备时间和供应商交货时间一起建模。
Days to Purchase 为什么容易被低估
因为它不像供应商 delay 那么直观。
很多人会记得:
- 供应商说 5 天到货
但忽略了公司内部往往还需要:
- 询价
- 审批
- 下单准备
- 采购员缓冲
days_to_purchase 就是在表达这段内部前置时间。
所以如果你只配 vendor delay,不配 days to purchase,系统算出来的时间常常会偏乐观。
补货生成 PO 时,系统还会继续反推 date_order
在 stock_rule.py 里,创建采购行时还有一段很关键:
- 先拿
date_planned - 再减去供应商 delay
- 得到
order_date_planned - 如果这个日期比当前
po.date_order更早,就把采购单日期往前挪
这段逻辑非常实战。
它说明系统不是只想告诉你“预计收货日”,而是更在意:
为了赶上那个收货日,这张采购单最迟该在什么时候成立。
这就是 Order Deadline 的真实味道。
为什么同样是采购,有时交期看起来“被系统提前了”
因为用户脑中常常盯的是收货目标日。
而补货引擎盯的是:
- 为了满足目标日
- 供应商要提前几天
- 公司内部还要再提前几天
于是你会看到:
- 采购日期被系统算得更早
- 不是 bug,而是 deadline 逻辑把你从“想收货那天”往前推回去了
源码还埋了两个很有意思的信号
1. 没供应商时,系统会加一个巨大延迟
这不是数学游戏,而是在明确表达:
- 没 vendor,采购补货在时间上几乎不可行
2. Vendor Delay Report 是单独存在的
purchase_stock 里还带了 vendor_delay_report。
这说明 Odoo 并不把交期只当配置项,而是把它视为可被统计、追踪、评价的运营指标。
一句话记忆法
在 Odoo 采购补货里,Vendor Lead Time 解决“供应商多久送到”,Days to Purchase 解决“公司要提前多久动手”,两者叠起来才会形成真正的 Order Deadline。
DISCUSSION
评论区