[IMP] Manufacturing: Update MPS

closes odoo/documentation#9916

Signed-off-by: John Holton (hojo) <hojo@odoo.com>
This commit is contained in:
John Holton (hojo) 2024-06-21 15:10:06 -07:00
parent 217ca237bf
commit e79a2e674d
10 changed files with 241 additions and 71 deletions

View File

@ -1,101 +1,271 @@
==================================
Use the Master Production Schedule
==================================
==========================
Master production schedule
==========================
.. _manufacturing/management/use_mps:
.. |SO| replace:: :abbr:`SO (sales order)`
.. |PO| replace:: :abbr:`PO (purchase order)`
.. |MO| replace:: :abbr:`MO (manufacturing order)`
.. |SOs| replace:: :abbr:`SOs (sales orders)`
.. |POs| replace:: :abbr:`POs (purchase orders)`
.. |MOs| replace:: :abbr:`MOs (manufacturing orders)`
.. |MPS| replace:: :abbr:`MPS (Master Production Schedules)`
.. |BoM| replace:: :abbr:`BoM (Bill of Materials)`
.. |RfQ| replace:: :abbr:`RfQ (Request for Quotation)`
.. |RfQs| replace:: :abbr:`RfQs (Requests for Quotation)`
The Master Production Schedule (MPS) is a valuable tool to plan your
production based on your demand forecast.
In Odoo's *Manufacturing* app, the *master production schedule* (MPS) is used to manually plan
manufacturing orders (MOs) and purchase orders (POs), based on forecasted quantities of products and
components.
Configuration
By considering the impact of confirmed |MOs| and |POs|, along with manually adjusted demand
forecasts, the |MPS| can be used to manage long-term product replenishment. This ensures the
continued availability of the necessary products and components.
Since the |MPS| allows for manual intervention, it is useful for replenishing products where the
demand of existing sales orders (SOs) does **not** reflect probable future demand.
.. example::
A retail store sells artificial *Christmas trees* during the holiday season. It is currently
September, and the store has less than ten Christmas tree |MOs| confirmed for the month of
December.
Despite the number of confirmed |MOs|, the procurement manager knows that the demand for
Christmas trees in December is going to be much higher, once the holiday season starts. As a
result, they manually enter a greater demand in the |MPS|, so they can properly replenish the
product in time for the increase in customer demand.
.. important::
It is essential to remember that the |MPS| is a **MANUAL** tool. Adding a product to the |MPS|
does not cause it to be manufactured or purchased automatically. The |MPS| simply suggests the
amount of the product that should be replenished, but requires user input to create the |MOs| or
|POs| that are used to replenish it.
For this reason, it is recommended that the |MPS| **NOT** be used alongside reordering rules for
the same product. Because reordering rules are an automated workflow, they conflict with the
manual replenishment method of |MPS|. Using both, in unison, can lead to inaccurate forecasts and
the creation of unnecessary replenishment orders.
Enable and configure |MPS|
==========================
To use the |MPS| feature, navigate to :menuselection:`Manufacturing app --> Configuration -->
Settings`, and tick the :guilabel:`Master Production Schedule` checkbox in the :guilabel:`Planning`
section. Finally, click :guilabel:`Save`.
After enabling the :guilabel:`Master Production Schedule` feature, two new fields appear under it on
the :guilabel:`Settings` page: :guilabel:`Time Range` and :guilabel:`Number of Columns`.
The :guilabel:`Time Range` field is used to select the period of time over which planning takes
place, and offers three options: :guilabel:`Monthly`, :guilabel:`Weekly`, and :guilabel:`Daily`. For
example, if :guilabel:`Monthly` is selected, the |MPS| plans the production requirements of products
and components on a monthly basis.
The :guilabel:`Number of Columns` field is used to specify the quantity of the selected
:guilabel:`Time Range` units shown on the |MPS| page. For example, if the :guilabel:`Time Range`
field is set to :guilabel:`Monthly`, and `12` is entered in the :guilabel:`Number of Columns` field,
the |MPS| shows one column for the next 12 months, starting with the current month.
If the values of the :guilabel:`Time Range` or :guilabel:`Number of Columns` fields are altered,
click :guilabel:`Save` again to save the changes.
.. image:: use_mps/mps-setting.png
:align: center
:alt: The MPS setting in the Manufacturing app's settings.
|MPS| dashboard
===============
To open the |MPS|, navigate to :menuselection:`Manufacturing app --> Planning --> Master Production
Schedule`. The |MPS| view appears as follows:
.. image:: use_mps/mps.png
:align: center
:alt: The Master Production Schedule in the Manufacturing app.
The grey column on the left side of the screen shows a section for every product added to the |MPS|,
with each product section being broken down into smaller rows. The information shown in the rows
depends on the filters selected in the :guilabel:`Search...` bar drop-down menu at the top of the
page. The default categories that appear in the rows are:
- :guilabel:`[Product] by [unit]` :icon:`fa-area-chart`: the forecasted stock quantity at the
beginning of each time period. :guilabel:`[Product]` and :icon:`fa-area-chart` are selectable
buttons which open the product's page, or the forecast report for the product, respectively.
- :guilabel:`- Forecasted Demand`: the demand forecast, which is entered manually. This represents
an estimate of the demand for the product during each time period.
- :guilabel:`- Indirect Demand Forecast`: while this is a default category, it **only** appears for
products that are components of other products. It represents the demand for the component from
existing MOs.
- :guilabel:`+ Suggested Replenishment`: the quantity of the product that is suggested to be
replenished through |MOs| or |POs|. To the right of the category title is a
:guilabel:`Replenish` button, which is used to manually replenish the product, based on the
quantity suggested to be replenished.
.. figure:: use_mps/replenish-button.png
:align: center
:alt: The Replenish button on the "+ Suggested Replenishment" row.
The "Replenish" button on the "+ Suggested Replenishment" row.
- :guilabel:`= Forecasted Stock`: the quantity of the product forecasted to be in stock at the end
of each time period, assuming that suggested replenishment numbers are fulfilled.
Altogether, these default categories form an equation:
.. math::
\text{Forecasted Demand} + \text{Suggested Replenishment} = \text{Forecasted Stock}
In the case of components, the :guilabel:`Indirect Demand Forecast` is taken into account as well.
The :guilabel:`- Forecasted Demand` and :guilabel:`+ Suggested Replenishment` fields can be edited
for any of the time periods to the right of the product column. Doing so changes the equation, and
updates the value displayed in the :guilabel:`Forecasted Stock` field.
Changing the value in the :guilabel:`+ Suggested Replenishment` field also makes an :icon:`fa-times`
:guilabel:`(reset)` button appear to the left of the field. Click the :icon:`fa-times`
:guilabel:`(reset)` button next to the field to reset its value back to the one calculated by the
|MPS|.
.. important::
While the |MPS| can be used with only the default categories enabled, it is advisable to also
enable the :guilabel:`Actual Demand` category. This is done by clicking the :icon:`fa-caret-down`
:guilabel:`(down arrow)` on the right side of the :guilabel:`Search...` bar, and enabling the
:guilabel:`Actual Demand` option under the :guilabel:`Rows` header.
With the :guilabel:`Actual Demand` option enabled, the :guilabel:`- Forecasted Demand` category
changes to the :guilabel:`- Actual / Forecasted Demand` category. In addition to the manually
entered forecasted demand, this category also displays the confirmed demand for the product,
which is based on confirmed |SOs|.
Each column to the right of the products column lists one unit of the time period selected in the
*Time Range* field on the *Manufacturing* app *Settings* page (ex. months). The number of time
period columns corresponds to the value entered in the *Number of Columns* field.
The first time period column represents the current time period. For example, if the |MPS| is
configured to use months, the first column displays data for the current month. On this first
column, the :guilabel:`+ Suggested Replenishment` field appears in one of five colors:
- :guilabel:`Green`: a replenishment order must be generated to keep stock at the :guilabel:`Safety
Stock Target`.
- :guilabel:`Gray`: a replenishment order has already been generated to keep stock at the
:guilabel:`Safety Stock Target`.
- :guilabel:`Yellow`: a replenishment order has already been generated, but the quantity it was
created for is not enough to keep stock at the :guilabel:`Safety Stock Target`.
- :guilabel:`Red`: a replenishment order has already been generated, but the quantity it was created
for puts the amount of stock above the :guilabel:`Safety Stock Target`.
The :guilabel:`+ Suggested Replenishment` field appears white, if no replenishment order has been
generated, and it is not necessary to generate one at the current moment.
Add a product
=============
Go to the :menuselection:`Manufacturing app --> Configuration --> Settings` and
activate the Master Production Schedule feature before hitting save.
To use |MPS| to manage the replenishment of a product, navigate to :menuselection:`Manufacturing app
--> Planning --> Master Production Schedule`. At the top of the |MPS| page, click :guilabel:`Add a
Product` to open the :guilabel:`Add a Product` pop-up window.
.. tip::
In the MPS settings, you can define the time range of your MPS (month/week/day)
and the number of periods you want to display at all times.
.. important::
Products **must** be properly configured to be replenished through the |MPS|.
Now, go to :menuselection:`Planning --> Master Production Schedule` and click on *add a
product*. You can now define your safety stock target (= the stock you
want to have on hand at the end of the period) and the minimum and
maximum quantities that must or can be replenished in each period.
In the case of manufactured products, the *Manufacture* route must be selected in the *Routes*
section of the *Inventory* tab, on the product's form.
.. image:: use_mps/mps_1.png
:align: center
In the case of products that are purchased, the *Buy* route must be selected in the *Routes*
section of the *Inventory* tab, on the product's form. Additionally, a vendor and the price they
sell the product for must also be specified on the *Purchase* tab.
In the MPS view, you can decide which information you would like to display
by clicking on *rows*. For instance, the *Actual demand* will show you which
quantity of products has already been ordered for the period, or *Available to Promise*,
what can still be sold during that same period (what you plan to replenish - what
is already sold during the period). You can also decide to hide rows if you like.
On the pop-up window, select the product to add in the :guilabel:`Product` drop-down menu. If the
product is replenished through manufacturing, select the product's |BoM| in the :guilabel:`Bill of
Materials` field.
.. image:: use_mps/mps_2.png
:align: center
.. note::
Selecting a BoM when adding a product to the |MPS| also adds any components listed on the BoM. If
it is not necessary to manage the replenishment of components through the |MPS|, simply leave the
:guilabel:`Bill of Materials` field blank.
Estimate your demand and launch replenishment
=============================================
If the database is configured with multiple warehouses, a :guilabel:`Production Warehouse` field
appears on the :guilabel:`Add a Product` pop-up window. Use this field to specify which warehouse
the product is replenished to.
The next step is to estimate the demand for the chosen period. This is done
in the *Forecasted Demand* Row. You can easily, at any time, compare the demand
forecast with the actual demand (= confirmed sales). The demand forecast for a
finished product will impact the indirect demand for its components.
In the :guilabel:`Safety Stock Target` field, specify the minimum quantity of the product that
should be kept available for orders at all times. For example, if there should always be 20 units of
the product available for order fulfillment, enter `20` in the :guilabel:`Safety Stock Target`
field.
.. image:: use_mps/mps_3.png
:align: center
In the :guilabel:`Minimum to Replenish` field, enter the minimum product quantity for orders created
to replenish the product. For example, if `5` is entered in this field, replenishment orders for the
product include a minimum of five units.
Once the forecasted demand has been set, the quantity to replenish for the
different periods will automatically be computed. The replenishments you are supposed
to launch based on your lead times (vendor lead time or manufacturing lead time)
are then displayed in green. You can now launch the replenishment by clicking
on the replenish button.
In the :guilabel:`Maximum to Replenish` field, enter the maximum product quantity for orders created
to replenish the product. For example, if `100` is entered in this field, replenishment orders for
the product include a maximum of 100 units.
Depending on the configuration of the product (buy vs. manufacture),
requests for quotations or manufacturing orders will be created. You can
easily access those by clicking on the *Actual Replenishment* cell.
Finally, click :guilabel:`Save` to add the product to the |MPS|. The product now appears on the
|MPS| page each time it is opened. If a |BoM| was selected in the :guilabel:`Bill of Materials`
field of the :guilabel:`Add a Product` pop-up window, any components listed on the |BoM| appear on
the page, as well.
.. image:: use_mps/mps_4.png
:align: center
.. image:: use_mps/add-a-product.png
:align: center
:alt: The Add a Product pop-up window in the MPS.
In case you manually edit the *Suggested Replenishment* quantity, a small cross
will appear on the left hand side of the cell. In case you want to go back to the
automatically computed value given by Odoo, simply click the cross.
Edit a product
--------------
After adding a product to the |MPS|, it may be necessary to change the replenishment values entered
on the :guilabel:`Add a Product` pop-up window. To do so, click the :guilabel:`# ≤…≤ #` button to
the immediate right of the :guilabel:`Replenish` button, on the :guilabel:`+ Suggested
Replenishment` row, below the product's name.
Cells color signification
=========================
.. note::
The first and second number displayed on the :guilabel:`# ≤…≤ #` button correspond to the values
entered in the :guilabel:`Minimum to Replenish` and :guilabel:`Maximum to Replenish` fields when
adding the product to the |MPS|.
The cells, which are part of the *Suggested Replenishment* line, can take
different colors depending on the situation:
For example, if `5` was entered in the :guilabel:`Minimum to Replenish` field, and `100` was
entered in the :guilabel:`Maximum to Replenish` field, the button appears as :guilabel:`5 ≤…≤
100`.
- **Green**: quantity of products which should be replenished to reach the expected safety stock considering the demand forecast and the indirect demand forecast.
Clicking the :guilabel:`# ≤…≤ #` button opens the :guilabel:`Edit Production Schedule` pop-up
window. This pop-up window is the same as the :guilabel:`Add a Product` pop-up window, except that
the :guilabel:`Product` and :guilabel:`Bill of Materials` fields cannot be edited.
- **Grey**: replenishment order has already been generated, and its quantity still matches current data.
On the :guilabel:`Edit Production Schedule` pop-up window, enter the desired values in the
:guilabel:`Safety Stock Target`, :guilabel:`Minimum to Replenish`, and :guilabel:`Maximum to
Replenish` fields. Then, click :guilabel:`Save` to save the changes.
- **Red**: replenishment order has already been generated, and its quantity was too high considering current data.
Remove a product
----------------
- **Orange**: replenishment order has already been generated, and its quantity was too low considering current data.
To remove a product from the |MPS|, tick the checkbox to the left of its name. Then, click the
:icon:`fa-cog` :guilabel:`Actions` button at the top of the screen, and select :guilabel:`Delete`
from the resulting drop-down menu. Finally, click :guilabel:`Ok` on the :guilabel:`Confirmation`
pop-up window.
The *Forecasted stock* line can also contain red cells, which means
the stock will be negative during the period in question.
Deleting a product from the |MPS| removes it, along with all of its data. If the product is
re-added, its replenishment values must be reconfigured.
What if I have underestimated the demand?
-----------------------------------------
|MPS| replenishment
===================
You can still increase the demand forecast. It will impact the quantity
to replenish. The cell will become orange, and youll be able to launch
a new replenishment.
Products in the |MPS| can be replenished in one of three ways:
What if I have overestimated the demand?
----------------------------------------
- Click the :guilabel:`Replenish` button at the top of the screen to generate replenishment orders
for every product below its :guilabel:`Safety Stock Target` for the current month.
- Click the :guilabel:`Replenish` button on the right side of the :guilabel:`+ Suggested
Replenishment` row of a specific product, to generate a replenishment order for that specific
product.
- Tick the checkbox to the left of the product name of one or more products. Then, click the
:icon:`fa-cog` :guilabel:`Actions` button at the top of the screen, and select
:guilabel:`Replenish` from the resulting drop-down menu. Doing so generates a replenishment order
for each selected product.
You can decrease the demand forecast. The cell will become red to inform
you that youve ordered more than planned. If youre still able to do
it, you can cancel some RFQ or MO manually.
The type of replenishment order generated corresponds to the route selected on the *Inventory* tab
of the product's form:
What if I wrongly added a product to the MPS?
---------------------------------------------
You can easily remove a product from the MPS by clicking the small bin
on the right of its name.
- If the *Buy* route is selected, an |RfQ| is generated to replenish the product. |RfQs| can be
selected by navigating to the :menuselection:`Purchase` app. Any |RfQ| generated by the |MPS|
lists :guilabel:`MPS` in its :guilabel:`Source Document` field.
- If the *Manufacture* route is selected, an |MO| is generated to replenish the product. |MOs| can
be selected by navigating to :menuselection:`Manufacturing app --> Operations --> Manufacturing
Orders`. Any |MO| generated by the |MPS| lists :guilabel:`MPS` in its :guilabel:`Source Document`
field.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB