使用虚拟库位在多个仓库中销售库存

虽然对小企业而言,保持库存并从单一仓库销售可能足够,但对大型企业来说,可能需要在多个地点的多个仓库中保有库存或进行销售。

有时,一个销售订单中的产品可能需要从两个(或更多)仓库取货;在 Odoo 中,使用 虚拟库位 可以从多个仓库拉取产品以满足销售需求。

:::: important ::: title 重要 :::

本文档中描述的使用虚拟仓库满足多个仓库订单的方案存在一些限制。请在继续之前考虑以下事项:

  1. 当销售订单的 Warehouse(仓库)字段设置为虚拟仓库时,拣货、包装和交付表单上显示的地址是虚拟仓库的地址,而不是实际仓库的地址。
  2. 每个库位都有一个 [warehouse_id](隐藏字段)。这意味着虚拟仓库中的库存不是所有真实仓库库存的总和,而是所有 warehouse_id 为该虚拟仓库 的库位库存之和。
    ::::

:::: danger ::: title 风险 :::

使用 两步收发 <../../shipping_receiving/daily_operations/receipts_delivery_two_steps>三步交付 <../../shipping_receiving/daily_operations/delivery_three_steps> 时可能的限制:

  1. 各表单中的输出或包装区会错误地显示为虚拟仓库的地址。
  2. 对两步或三步交付没有解决办法。
  3. 仅当将虚拟仓库的地址设为输出或包装区符合公司工作流时才继续。
    ::::

:::: note ::: title 注意 :::

要在仓库中创建虚拟库位并继续以下步骤,必须启用 存储库位多步路线 功能。

操作步骤:进入 Inventory app → Configuration → Settings,向下滚动到 Warehouse(仓库)部分,勾选 Storage Locations(存储库位)和 Multi‑Step Routes(多步路线),然后 Save(保存)更改。
::::

在创建任何虚拟库存库位之前,先创建一个作为 虚拟 仓库的仓库——即其他实体仓库的 库位。

::: spoiler 为什么需要“虚拟”仓库?

虚拟仓库适用于拥有多个实体仓库的公司。当某仓库的某产品库存用尽,而另一仓库仍有库存时,可以使用这两个(或更多)仓库的库存来完成同一张销售订单。

“虚拟”仓库充当公司所有实体仓库库存的聚合点,并在 Odoo 中用于创建库位层级(用于可追溯性)。
:::

创建新仓库的步骤:进入 Inventory app → Configuration → Warehouses,点击 Create。在此页面可以修改仓库的 Name(名称)和 Short Name(简称),并在 Warehouse Configuration(仓库配置)标签页下修改其他细节。

完成后点击 Save,即创建了一个普通仓库。随后继续以下步骤,以完成虚拟父仓库的配置。

{.align-center}

::: seealso

  • Warehouse configurations <../../warehouses_storage/inventory_management/warehouses>
  • Incoming and outgoing shipments <inventory/receipts_delivery_one_step/wh>
  • ../../warehouses_storage/replenishment/resupply_warehouses
    :::

创建至少两个 仓库,并将它们链接到虚拟仓库。

:::: important ::: title 重要 :::

为了从多个仓库获取库存以满足销售订单,必须至少 两个 仓库作为虚拟父库位的子库位。
::::

操作方法:进入 Inventory app → Configuration → Warehouses,点击 Create,按照前面的 创建虚拟父库位 步骤配置实体库位。

::: example | 父仓库 |
| Warehouse: [Virtual Warehouse](虚拟仓库) |
| Location: [VWH/Stock] |

| 子仓库 |
| Warehouses: [Warehouse A](仓库 A)和 [Warehouse B](仓库 B) |
| Locations: [WHA] 和 [WHB] |

{.align-center} :::

:::: important ::: title 重要 :::

虽然稍后会把虚拟库存库位改为 View(视图),但此时 Location Type(库位类型)必须设为 Internal Location(内部库位),以便在下一节 链接子仓库到虚拟库位 时进行关联。
::::

要把实体仓库设为虚拟库位的子库位,进入 Inventory app → Configuration → Locations

  1. 清除搜索栏中的所有过滤器。
  2. 点击之前创建的子库位(如 [WHA]),进入编辑页面。
  3. Parent Location(父库位)字段从 Physical Locations(实体库位)改为虚拟仓库的 stock location(如 [VWH/Stock]),然后 Save

:::: important ::: title 重要 :::

Parent Location 下拉菜单中选择虚拟仓库的库存库位时,该父仓库的库存库位(如 [VWH/Stock])的 Location Type 必须为 Internal Location
::::

{.align-center}

对所有子仓库重复上述步骤。完成后,虚拟父仓库(如 [VWH/Stock])将在任一子仓库库存不足时,自动使用其他子仓库的库存来完成订单。

将虚拟库存库位的 Location Type 改为 View,因为它是一个不存在的库位,仅用于将多个实体仓库聚合在一起。

操作步骤:进入 Inventory app → Configuration → Locations,点击已创建的虚拟仓库库存库位(如 [VWH/Stock])。

在库位表单的 Additional Information(附加信息)栏目下,将 Location Type 设为 View,然后 Save

{.align-center}

:::: tip ::: title 提示 :::

要查看所有关联子仓库的总库存,可在产品表单中点击 On Hand(在手)智能按钮。
::::

要使用虚拟父库位从多个仓库销售产品,数据库中至少需要 两个 仓库,并且每个仓库中至少有 一个 产品且都有库存。

::: example 以下产品 [Toy soldier] 在各库位的库存如下:

  • [WHA/Stock]:1
  • [WHB/Stock]:2

仓库 [WHA][WHB] 为虚拟仓库 [VWH] 的子仓库。
:::

  1. Sales(销售)应用中点击 Create,创建报价单。
  2. 在报价单上填写 Customer(客户),点击 Add a product 添加上述两个产品。
  3. 切换到 Other Info(其他信息)标签页,在 Delivery(交付)部分,将 Warehouse 字段改为之前创建的虚拟仓库。
  4. Confirm(确认)销售订单。

{.align-center}

  1. 点击 Delivery(交付)智能按钮,确认 Source Location(来源库位)与销售订单中的 Warehouse 字段一致,两者均应显示虚拟仓库库位。
  2. 在交付单的 Detailed Operations(详细操作)标签页,检查 From(来源)列中的库位是否对应子库位。

{.align-center}

:::: important ::: title 重要 :::

  • Source Location(交付单表单) 与 Other Info 中的 Warehouse 必须一致,才能将订单中的产品从不同仓库拉取。
  • 若交付单的 Source Location 未显示虚拟仓库,请:
    1. 开启 developer mode(开发者模式),进入 Inventory app → Operations → Run Scheduler 运行调度器;
    2. 在交付单上点击 Check Availability(检查可用性)重新预留产品。
  • 若销售订单的 Warehouse 字段未设为虚拟仓库,请取消该订单并重新创建,确保在 Warehouse 字段中选择虚拟仓库。
  • 若销售订单表单中根本没有 Warehouse 字段,说明子仓库的设置可能有误,请回到 创建子仓库 步骤检查配置。
    ::::

:::: tip ::: title 提示 :::

若希望将虚拟父库位设为销售订单的默认仓库,可在每位业务员的 Employee(员工)表单中,在 Default Warehouse(默认仓库)下拉菜单中选择该虚拟仓库。

{.align-center} ::::