先说结论
很多实施团队已经知道:
- Dropship ≠ Subcontracting
但还是会继续掉进另一个坑:
- 只要不是普通采购入库,就在这两个里硬选一个
这同样不对。
在 Odoo 里,采购最常见的三条路线其实是:
- Buy to Stock:买回来进入你的库存或中转体系
- Dropship:供应商直接把货交给客户
- Subcontracting:供应商替你完成某个制造环节或装配责任
所以更准确地说:
这三条路线的区别,不只是货去了哪里,而是采购需求从哪里来、目标位置是什么、提前期怎么计算、后续责任由谁承担。
这篇为什么不是已有“Dropship vs 分包”文章的重复
站里已有一篇,重点讲:
- Dropship 和分包为什么都像采购,却不是同一类采购
那篇是双路线横向对比。
这篇补上实施里最缺的一块:
- 为什么你不能把标准 Buy to Stock 从脑子里删掉
- 什么时候明明看上去也像“向供应商买”,但本质上其实还是普通补库存
- 三条路线到底该怎么分流
也就是说,这篇不是重复比较 Dropship 和分包,而是把 标准采购入库这条基准路线 拉回桌面,让三条路在同一张图上讲清。
第一条路线:Buy to Stock 的核心是“先补到你的供应链位置”
标准 Buy to Stock 最容易被忽略,恰恰因为它太常见。
它的采购语义是:
- 你向供应商买
- 货先进入你的内部库存、仓库、或受你控制的中转位置
- 后续销售、生产、内部补给再从这些位置继续向下游流动
这条路线的关键不是“有没有采购”,而是:
- 采购的第一目的地是你自己的供应链体系
所以它适合:
- 补安全库存
- 应对未来订单
- 为后续制造提前备料
- 统一仓配与履约
如果业务目标首先是“货先归到我方可控位置”,那它通常还是 Buy to Stock,而不是别的花样路线。
第二条路线:Dropship 的关键不是“也向供应商买”,而是“直接履约给客户”
在 /home/ubuntu/odoo-temp/addons/stock_dropshipping/models/stock.py 里,官方给 dropship 增加了专门的拣货类型:
code = 'dropship'
而且默认位置很鲜明:
- 来源位置:supplier
- 目标位置:customer
这说明 Dropship 的库存语义根本不是“采购后再交付”,而是:
采购动作直接服务客户履约,货并不先回到你的库存主链。
源码里还特别处理了:
- 不同
sale_line_id的 procurement 不要乱合并
因为 dropship 的采购单据和销售承诺绑定得很紧,随便合单会让 delivered quantity 与归属关系失真。
所以如果你的核心问题是“谁来对客户交付这批货”,Dropship 才是那个答案。
第三条路线:Subcontracting 的关键不是“也向供应商买”,而是“供应商替你完成制造责任”
在 /home/ubuntu/odoo-temp/addons/mrp_subcontracting_purchase/models/stock_rule.py 里,官方重点扩展的是:
_get_lead_days()
注释写得非常清楚:
- 分包提前期 =
max(Vendor lead time, Manufacturing lead time + Days To Prepare MO) + Days to Purchase
这句话一出来,就把它和普通采购、Dropship 全部拉开了。
因为标准 Buy to Stock 关注的是:
- 什么时候能收到这批货到我方链路
Dropship 关注的是:
- 供应商什么时候能把货直接交到客户
而分包关注的是:
- 供应商在替我完成某段制造工作时,整个生产准备和交付节奏怎么计算
所以分包采购本质上不是物流捷径,而是:
- 制造责任外包
三条路线在“采购需求来源”上就已经不同
Buy to Stock
需求来源通常是:
- 补库存
- 重订货规则
- MTO/MTS 混合下的补给
- 未来销售或生产的提前备货
Dropship
需求来源通常直接带销售履约语义。
也就是说:
- 因为要给客户交付
- 所以系统驱动向供应商下采购
Subcontracting
需求来源看起来也可能走采购动作,但背后是制造链条。
系统要先认定:
- 是否存在对应的 subcontract BOM
- 当前 seller 是否真是该 BOM 的 subcontractor
这条需求不是“为了备库存”,也不是“为了直接交客户”,而是:
- 为了完成外包制造承诺
所以三条路线从一开始就不是同一道题的三个选项,而是三种不同问题的答案。
三条路线在“目标位置”上的差异最容易帮助业务判断
Buy to Stock
目标位置是:
- internal / transit / 受你控制的位置
Dropship
目标位置是:
- customer
Subcontracting
目标不该只用“仓位”去理解,而应理解为:
- 某个分包商参与的制造链结果位置与责任节点
也就是说,如果你只看“货不进自有仓”,你会把 Dropship 和分包看得很像;但如果你看 目的地承担什么业务责任,两者就完全不同。
三条路线在“提前期脑回路”上也完全不同
Buy to Stock
重点多半是:
- 供应商提前期
- 仓库到货时间
- 补货窗口
Dropship
重点是:
- 供应商何时可直接满足客户交期
- 销售承诺是否还能守住
Subcontracting
重点是:
- 供应商 lead time
- 制造 lead time
- Days to Prepare MO
- Days to Purchase
而且不是简单加总,而是按源码规则比较后再叠加。
因此,分包的日期计算天然比普通采购或直发更像生产排程问题。
三条路线在责任边界上的一句话区别
Buy to Stock
- 我先把货纳入我方可控供应链
Dropship
- 供应商替我完成对客户的直接物流履约
Subcontracting
- 供应商替我完成某段制造或装配责任
很多实施决策卡壳,本质上不是不会配 route,而是没有先问清:
- 这批货要先归谁的链路负责?
- 履约责任在客户交付,还是在制造产出?
这个问题一旦问清,路线通常就不难选。
最容易误解的 5 个点
1. 以为不进自有仓就该在 Dropship 和分包里二选一
错。先问目标是不是客户履约,还是制造责任外包。
2. 以为 Buy to Stock 只是最普通、可以忽略的默认路线
它恰恰是理解其他特殊路线的基准线。
3. 以为 Dropship 只是“少走一步入库”
它改变的是客户履约责任链。
4. 以为分包采购只是“供应商供货更复杂”
它改变的是制造语义和提前期计算框架。
5. 以为三条路线主要差在物流位置
更深的差异在需求来源、提前期口径和责任边界。
实施时的决策顺序
如果要快速判断一条采购需求该走哪条路,建议按这个顺序问:
- 货要先进入我方可控库存吗? - 是:优先考虑 Buy to Stock
- 供应商是不是直接对客户履约? - 是:优先考虑 Dropship
- 供应商是不是在替我完成某段制造/装配? - 是:优先考虑 Subcontracting
- 日期主要由仓配 lead time、客户交期,还是制造准备时间驱动?
- 后续责任在库存、销售履约,还是制造产出?
这样判断,基本能避免把 route 配成“能跑起来,但语义全错”。
一句话记忆法
Buy to Stock 是补到我方供应链,Dropship 是供应商直履约客户,Subcontracting 是供应商替我完成制造责任。
DISCUSSION
评论区