简介
在现代供应链和仓库管理中,越来越多的企业不仅拥有单一仓库,而是在不同地点、地区甚至国家运营多个仓库。面对“单个销售订单可能需要同时从多个仓库拣货”的实际需求,传统的“一个仓库 → 一次发货”逻辑显得不够灵活。为满足这一需求,Odoo 19 的库存模块提供了“虚拟库位/虚拟仓库”机制,该机制整合多个真实仓库,并在销售、发货和库存拣货过程中支持跨仓库调拨和统一的发货视图。
本文将从业务背景、关键概念、系统设置、典型操作流程、注意事项和最佳实践等方面,对本功能进行逐步讲解,帮助您在 Odoo 17/19 及其他版本中清晰地理解并实施该功能。
1. 业务背景以及为何使用虚拟仓库
1. 多仓库运营场景
假设一家公司有两个或更多仓库,例如东京的“仓库 A”和大阪的“仓库 B”,或者“仓库 A”负责国内业务,“仓库 B”负责海外业务。客户下单后,可能出现某种产品在仓库 A 缺货但仓库 B 仍有库存的情况,或者订单中的不同产品分散在多个仓库中。为了提高客户配送速度并降低缺货风险,公司希望:
- 当仓库缺货时,自动从另一个仓库调拨货物或直接发货;
- 在销售订单下单流程中,无需手动拆分订单或选择仓库,因为系统会自动处理多个仓库的库存;
- 对于销售人员和客户而言,它在处理时仍表现为“一个仓库/一张销售订单”,而在后台则支持多仓库协作。
2. 传统单一仓库模型的局限性
在单个仓库或简单仓库结构的情况下,销售订单和发货流程通常为:销售 → 选择仓库 → 发货。但是,当存在多个仓库时:
- 如果客户选择“仓库 A”,但没有库存,订单可能会卡住;
- 如果销售人员必须手动确定仓库选择,将增加操作复杂性和人为错误;
- 在ERP系统中,如果没有统一机制支持“跨仓库拣货”,订单往往会被拆分或手动转移,导致效率低下且出错风险高。
3. Odoo 的解决方案:虚拟仓库/虚拟库位
Odoo 19 提供了“虚拟位置”(位置类型 = 视图/虚拟)机制和“子仓库归属”机制,并结合多步路线以及“将仓库配置为位置层级”的设置,实现以下目标:
- 创建“虚拟仓库”作为父级,以整合多个真实仓库。 (Odoo)
- 将多个物理仓库设置为此虚拟仓库的子库位。
- 在销售订单中选择“虚拟仓库”作为发货仓库,系统可以从多个子仓库中拣货以满足订单需求。 (Odoo)
- 对于销售人员来说,他们仍然只需要在销售订单中选择“仓库”字段;但是,后端可以跨仓库进行调度。
通过这种方式,它保留了多仓库运营在库存管理方面的优势,同时简化了销售和发货流程。
2. 关键概念分析
在继续之前,让我们先澄清几个关键概念,以避免在后续配置和操作中产生混淆。
1. 仓库
在 Odoo 中,“仓库”是指用于存储产品的物理位置(或逻辑位置),具有地址、库存、收货和发货流程等。(Odoo)
每个仓库均可配置入库/出库流程(1步、2步、3步)及补货规则。
2. 位置
仓库可以进一步细分为“库位”,例如“A货架”、“冷藏区”、“发货区”等。库位类型决定其属性:内部、供应商、客户、虚拟、在途等。 (Odoo)
- 内部:内部存储,计入库存。
- 虚拟(或视图):仅用于组织结构,而非实际库存。产品通常不能存储在此处。(Odoo)
- 在途、供应商、客户等分别用于在途、供应商所在地和客户所在地。
3. 虚拟仓库 / 虚拟位置
虚拟仓库本质上是对“仓库”的一种抽象:它使用一个包含多个“子仓库”的“父”仓库作为其内部子库位。该父仓库所在的库存库位设置为库位类型 = 视图(即虚拟,而非实际库存存储)。(Odoo)
其功能如下:
- 将多个子仓库的库存汇总为统一视图。
- 在销售订单中用作仓库选择选项,允许系统从多个子仓库中拣选货物。
- 不用于直接库存;其库存位置设置为视图类型。
4. 子仓库
在实际运营中拥有实际库存的仓库。它们被配置为虚拟父仓库的子位置。这样,当销售选择父仓库时,系统可以从其子仓库中提取库存。 (Odoo)
5. 销售订单中“仓库”字段的含义
在销售订单中,有一个“仓库”字段,用于指示该订单应从哪个仓库发货。如果选择了虚拟仓库,系统会在分配时将源库位设置为该虚拟仓库的库存库位,从而触发从多个子仓库拣货。(Odoo)
3. 系统配置步骤(以 Odoo 19 为例)
以下步骤说明如何在 Odoo 19 中配置此功能。建议先在测试环境中操作,确认无误后再迁移到生产环境。
第1步:启用所需功能
在 Inventory 应用 → 配置 → 设置中,需要启用以下两个选项:
- 存储位置
-
多步路线
只有启用这两个功能后,才能进行库位、仓库层级和子仓库的配置。 (Odoo)
保存设置时,系统可能会提示更新。
步骤 2:创建虚拟父仓库
- 转到:库存 → 配置 → 仓库 → 创建新仓库。(Odoo)
-
填写新仓库表单:
- 名称(例如:“VWH – Virtual Warehouse”)
- 简称(例如“VWH”)
- 地址/公司及其他信息。
- 保存后,仓库会生成默认的库存、收货、交货库位等。
-
接下来,在“库位”配置中,将此仓库中“Stock”库位的“库位类型”更改为“View”。即:
- 在库存 → 配置 → 位置中,找到 VWH/Stock(虚拟仓库的库存位置)
- 单击“编辑”,然后在“附加信息”中,将“位置类型”从“内部”更改为“查看”。
- 保存。此库位不用于库存,仅用作父级结构视图。 (Odoo)
步骤 3:创建子仓库(或将现有仓库更改为子仓库)
- 如果已经存在多个实体仓库(例如“WH-A Virtual A”、“WH-B Virtual B”),请确保它们分别对应各自的类型为内部的库存位置。
- 在“位置”中编辑这些子仓库的库存位置(例如,“WHA/Stock”、“WHB/Stock”),并将其父位置设置为虚拟父仓库的库存位置(例如,“VWH/Stock”)。 (Odoo)
- 保存。此时,“WHA/Stock”和“WHB/Stock”成为父级 VWH 的子仓位。
步骤 4:验证子仓库结构是否生效
在产品表单中,单击“现有量”按钮,系统将显示包括所有子仓库在内的库存。通过“按库位的现有量”或类似视图,您可以查看 WH-A 和 WH-B 两个仓库的库存。这样,在销售人员选择虚拟仓库后,系统已经有多个可用仓库。 (Odoo)
第5步:将虚拟仓库设置为默认销售仓库(可选)
如果你希望所有销售订单默认使用此虚拟仓库,可以在每位销售人员的设置中将默认仓库设置为“VWH”。转到 销售 → 配置 → 用户 & 公司 → 员工,选择该员工 → 默认仓库设置。(Odoo)
4. 典型操作流程:从销售到交付
下面通过一个示例说明“从多个仓库拣货”的完整流程。
假设情景:
- 产品“Toy Soldier”在“WHA/Stock”有1件库存,在“WHB/Stock”有2件库存。
- 虚拟父仓库 "VWH" 已配置,其子仓库为 WHA 和 WHB。
- 客户下单购买了2个“玩具士兵”。
操作步骤:
- 在销售应用中,创建新报价 → 添加客户 → 添加产品“Toy Soldier”数量2。
- 在“其他信息”选项卡中,将“仓库”字段设置为“VWH – Virtual Warehouse”。
- 确认报价单 → 转换为销售订单。
- 点击“送货”智能按钮进入送货单。检查送货单的源位置是否为“VWH/Stock”。如果不是,配置可能不正确。 (Odoo)
- 在送货单的“详细操作”选项卡中,您可以看到两条拣货行:一条从“WHA/Stock”拣选 1 件,另一条从“WHB/Stock”拣选 1 件(假设系统自动决定如何分配库存)——因此使用两个子仓库完成一个销售订单的发货。(Odoo)
- 验证发货后,返回销售订单页面并点击“创建发票”以生成发票。
通过此流程,销售订单仅选择“VWH”仓库,但后端会自动从多个仓库完成发货,实现多仓库协同。
V. 说明与限制
在实际应用中,有一些重要的限制和注意事项不容忽视。
- 虚拟仓库地址可在单据中被视为来源库位地址。也就是说,在发货、包装和快递单据中,可能显示虚拟仓库地址,而不是子仓库的实际物理地址。必须确认流程是否允许这样做。 (Odoo)
- 对于两步/三步收货和发货流程,使用虚拟仓库可能导致“输出区域”或“包装区域”显示为父仓库地址,这是当前系统机制的限制。 (Odoo)
- 虚拟仓库库存位置设置为视图类型,其本身无法存储产品库存。因此,真实库存必须存储在子仓库中。否则,会导致库存显示异常。 (Odoo)
- 销售订单中的仓库字段必须设置为虚拟仓库;否则,系统将不会触发跨仓库拣货逻辑。如果选择错误,物料将只会从单个仓库拣货。 (Odoo)
- 如果交货单中的源库位不是虚拟仓库库存库位,系统将无法自动从多个仓库转移库存。如有必要,您可以手动点击交货单上的“检查可用性”,或运行调度程序(库存 → 操作 → 运行调度程序)来重试。 (Odoo)
- 虚拟仓库被视为父级层级,仅用于逻辑结构。不建议在其上执行“库存收货”操作,因为这可能会造成混淆。
6. 最佳实践建议
结合上述流程和考虑因素,以下是一些实用建议,可帮助企业顺利实施多仓库协作。
- 明确仓库层级结构:建议在组织内部绘制仓库结构图,明确父仓库(虚拟)与子仓库(实体)之间的关系,并标明各子仓库的库存状态。
- 保持库存准确性:分仓的库存状态必须保持准确,以便系统在销售发货时能够正确分配仓库。库存不准确可能导致订单延迟。
- 销售人员培训:让销售人员理解“将仓库选为虚拟仓库”意味着系统可以自动分配仓库,避免人工选择错误,同时仍限于单个仓库。
- 检查收货地址显示:确认快递单据、包装证明和发货通知上显示的地址是否为实际仓库地址。如果仍显示上级仓库地址,评估该企业流程是否可接受。
- 测试多步骤流程:如果企业已启用两步/三步收货和发货流程,应先在测试环境中测试虚拟仓库模式,以观察地址、物流路线或操作方面是否存在不合理之处。
- 调整默认仓库设置:如果大多数销售应使用多仓库模式,您可以将虚拟仓库设置为默认仓库,以降低销售人员手动选择仓库的风险。
- 监控库存调拨日志:建议在库存 → 报告中查看移动历史报告,以检查跨仓库拣货情况,并及时处理任何异常。
- 持续优化仓库结构:随着业务升级,可能需要增加或删除仓库,并调整子仓库关系。此时,应及时维护父仓库结构。
VII. 总结
通过本文,我们梳理了 Odoo 19 中“使用虚拟库位销售多个仓库的库存产品”功能的原理、配置步骤、操作流程、注意事项和最佳实践。其核心价值在于:
- 支持跨多个实体仓库的协同拣货,提高库存调度效率;
- 简化销售订单流程;销售人员只需选择“一个仓库”(即虚拟父仓库)。
- 在后台自动从多个子仓库提取库存,以提升客户交付能力。
实现的效果如下:


