From 36514ea7dccaeb7541050c2100eb75bf123d2219 Mon Sep 17 00:00:00 2001 From: Felicious Date: Mon, 13 Oct 2025 16:48:02 -0700 Subject: [PATCH] [IMP] inventory: multiple qty closes odoo/documentation#14853 Signed-off-by: Felicia Kuan (feku) Co-authored-by: Jess Rogers <104637850+jero-odoo@users.noreply.github.com> --- .../replenishment/reordering_rules.rst | 51 ++++++++++++++---- .../reordering_rules/multiple.png | Bin 0 -> 9526 bytes 2 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/multiple.png diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst index e422d9c14..4bfeb66f1 100644 --- a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst +++ b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules.rst @@ -77,13 +77,10 @@ the :guilabel:`Purchase` checkbox is enabled under the product name. In the :gui tab, add at least one vendor to the :doc:`vendor pricelist <../../../purchase/products/pricelist>`. Odoo uses the vendor at the top of the list to generate |RFQs| when reordering rules are triggered. -In the :guilabel:`Inventory` tab's :guilabel:`Routes` field, tick the :guilabel:`Buy` checkbox. - .. seealso:: :doc:`Vendor pricelist <../../../purchase/products/pricelist>` -If the product is manufactured, :ref:`install ` the **Manufacturing** app, and in -the :guilabel:`Inventory` tab's :guilabel:`Routes` field, tick the :guilabel:`Manufacture` checkbox. +If the product is manufactured, :ref:`install ` the **Manufacturing** app. Next, ensure at least one :doc:`bill of materials <../../../manufacturing/basic_setup/bill_configuration>` (BoM) is displayed in the :guilabel:`Bill @@ -98,8 +95,8 @@ button, then click :guilabel:`New` to configure a new |BoM|. .. _inventory/warehouses_storage/rr-fields: -Create new reordering rules ---------------------------- +Create a reordering rule +------------------------ To create a new reordering rule, navigate to :menuselection:`Inventory app --> Operations --> Replenishment`, then click :guilabel:`New`, and fill out the following fields for the new reordering @@ -111,9 +108,6 @@ rule line item: triggered. When forecasted stock falls below this number, a replenishment order for the product is created. - :guilabel:`Max`: The maximum quantity at which the stock is replenished. -- :guilabel:`Multiple Quantity`: If the product should be ordered in specific quantities, enter the - number that should be ordered. For example, if the :guilabel:`Multiple Quantity` is set to `5`, - and only 3 are needed, 5 products are replenished. .. figure:: reordering_rules/reordering-rule-form.png :alt: The form for creating a new reordering rule. @@ -135,6 +129,7 @@ For advanced usage, learn about the following reordering rule fields: - :ref:`Preferred route ` - :ref:`Vendor ` - :ref:`Bill of materials ` +- :ref:`Multiple ` - :ref:`Procurement group ` .. note:: @@ -200,6 +195,44 @@ is used to replenish the product in one-unit increments, back up to the :guilabe now one unit on-hand, but it is not reserved for the |SO| which triggered its purchase. It can be used to fulfill that |SO|, or reserved for a different order. +.. _inventory/warehouses_storage/multiple: + +Multiple +-------- + +The :guilabel:`Multiple` field on the replenishment report (:menuselection:`Inventory app --> +Operations --> Replenishment`) defines the unit used when replenishing a product. Odoo rounds the +ordered quantity *up* to the nearest multiple that meets or slightly exceeds the :guilabel:`Max` +quantity set on the reordering rule. If no multiples apply, select :guilabel:`Units`. + +.. example:: + A vendor sells soda only in cases of six cans, but your company tracks quantities per can. + Setting the :guilabel:`Multiple` to `6` ensures soda is ordered in multiples of six (6, 12, + 18...). + + For a reordering rule with the :guilabel:`Min` = `10` and :guilabel:`Max` = `40`: + + - If the forecasted quantity is `10`, the amount :guilabel:`To Order` is `30`, a multiple of six + that will bring the :guilabel:`On Hand` quantity to exactly the maximum. + - If the forecasted quantity is `8`, the quantity needed to reach the max is `32`. But 32 is not + a multiple of six, so Odoo rounds the :guilabel:`To Order` quantity up to `36`. This will cause + the :guilabel:`On Hand` quantity to slightly exceed the maximum. + + .. image:: reordering_rules/multiple.png + :alt: Reordering rule with the Multiple set to 6. + +.. note:: + If the maximum is exceeded, expect to see a :icon:`fa-warning` warning indicating the possibility + of excessive stock. + +Configuration +~~~~~~~~~~~~~ + +Multiples are based on defined :doc:`packagings <../../product_management/configure/packaging>`. +Only packaging types listed on the product's :doc:`vendor pricelist +<../../../purchase/products/pricelist>` appear as options in the :guilabel:`Multiple` field when +configuring reordering rules. + .. _inventory/warehouses_storage/trigger: Trigger diff --git a/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/multiple.png b/content/applications/inventory_and_mrp/inventory/warehouses_storage/replenishment/reordering_rules/multiple.png new file mode 100644 index 0000000000000000000000000000000000000000..443aae42e036a7165235842649d2a1af62d4a266 GIT binary patch literal 9526 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 U9UN6Z0000007*qoM6N<$f~yr|u>b%7 literal 0 HcmV?d00001