先说结论
Odoo 里的 Dropship 之所以看起来不像正常发货,不是因为它脱离了库存框架,而是因为它把物流路径换掉了:
货不是从你自己的仓库出去,而是直接从供应商流向客户。
一旦这个前提成立,后面的很多现象就都合理了:
- 不走普通仓内拣货路线
- 会生成特殊的 dropship picking type
- 销售和采购之间的关联更直接
- 交付数量计算也要单独处理
官方模块在做什么
从 stock_dropshipping 模块看,官方并不是只加一个勾选框,而是补了一整套支撑结构:
- Dropship 路线
- Dropship 专用 picking type
- 专用 sequence
- 对销售、采购、库存规则的扩展
这说明一件代发不是页面显示变一下,而是一条完整业务路线。
为什么会有单独的 dropship picking type
在官方源码里,stock.picking.type.code 通过 selection_add 新增了 dropship。
而且这个类型的默认位置很关键:
- 来源位置是 supplier
- 目标位置是 customer
这就直接说明了它和普通出库的区别。
普通出库常见的是仓库内部位置到客户,而 dropship 是供应商到客户。
为什么销售单和采购单会被绑得更紧
源码里一个非常关键的点,是 stock.rule._get_procurements_to_merge_groupby() 对 dropship 的处理。
官方特别避免把来自不同销售行的采购需求随便合并,因为这会影响后续交付数量计算和来源追踪。
你可以把它理解成:
Dropship 不是简单去买货,而是替某个销售承诺去买货并直送客户。
为什么销售单上会单独统计 Dropship 数量
在 sale.py 里,官方给 sale.order 单独算了 dropship_picking_count,并且把普通 delivery_count 扣掉 dropship 的部分。
这背后表达的意思很明确:
- 系统承认 dropship 也是履约
- 但它不应该和你仓库自己的 delivery 混着展示
为什么有时你会感觉它像 MTO
因为从业务体验上看,一件代发经常也是接单后触发采购。
源码里销售行 _compute_is_mto() 也会把这种从 supplier 直达 customer 的规则识别进来。
更准确地说,它是:
以销售需求为起点、通过采购补给、但物流从供应商直接到客户的一条履约路线。
新手最容易误解的 4 件事
1. 以为 dropship 只是采购动作
其实它是销售、采购、库存规则一起协作的结果。
2. 以为 dropship 会先进自己仓库
如果先进仓,那通常就不是标准的一件代发了。
3. 以为 delivery_count 少了就是系统算错
很多时候只是官方把 dropship 单独分类显示了。
4. 以为所有采购都能自动视为 dropship
真正起作用的是路线、规则、拣货类型和来源位置语义,不是采购两个字本身。
一句话记忆法
它不是普通出库的变种,而是销售触发采购、供应商直接对客户履约的另一条库存路线。
DISCUSSION
评论区