Manufacturing order costs

The ability to accurately calculate the cost of manufacturing a product is critical when determining product profitability. Odoo’s Manufacturing app simplifies this calculation by automatically calculating the cost to complete each manufacturing order (MO), as well as the average production cost of a product, based on all completed MOs.

Important

Odoo’s Manufacturing app distinguishes between the MO cost and the real cost of an MO.

The MO cost represents how much it should cost to complete an MO, based on the configuration of the product’s bill of materials (BoM). This takes into account the cost and quantity of components, as well as the cost of completing the necessary operations.

The real cost represents how much it actually costs to complete the MO. A few factors can cause the real cost to differ from the MO cost. For example, an operation may take longer to complete than estimated, a greater component quantity might be needed than was specified on the BoM, or the price of components may change during manufacturing.

Cost configuration

Odoo computes MO costs based on the configuration of the BoM used to manufacture a product. This calculation includes the cost and quantity of components and operations listed on the BoM, in addition to the operating costs of the work centers where those operations are carried out.

Component cost

Component cost is calculated automatically, based on the average purchase cost of a component across all purchase orders (POs). To view a component’s cost, navigate to Inventory app –> Products –> Products, and select a component product. The cost is displayed in the Cost field of the General Information tab, on the component’s product form.

It is possible to set the cost of a component manually, by clicking the Cost field on the component’s product form and entering a value. However, any future POs for the component override a manually entered value, resetting the Cost field back to an automatically computed value.

Work center cost

To set the operating cost for a specific work center, navigate to Manufacturing app ‣ Configuration ‣ Work Centers, and select a work center.

To set the cost of operating the work center for one hour, enter a value in the per workcenter field, located beside the Cost per hour section on the work center’s General Information tab. This is the hourly rate used for both the MO cost (the estimated cost) and the real cost (the actual cost) of every operation performed at that work center; Odoo does not track a hourly cost per individual employee.

screenshot: manufacturing-mo-costs-workcenter-cost
menu
Manufacturing ‣ Configuration ‣ Work Centers ‣ (work center) ‣ General Information tab
shows
The General Information tab of a work center form, "Cost per hour" section, with the "per workcenter" field filled in.
highlight
The "per workcenter" field.
data
Work center "Assembly Line 1", cost $30.00 per hour.
module
mrp
notes
English UI, light theme, 1440px width, crop to the "Cost per hour" section.

Tip

With the accounting features of the Manufacturing app enabled, an Expense Account field also becomes available on the work center’s form, under the Costing section. This is the account the work center’s operating cost is posted to when the MO is marked as Done. If left blank, the expense account of the finished product is used instead.

BoM configuration

Configuring a BoM so Odoo can accurately calculate the cost of MOs that use it requires two steps. First, components must be added, and the required quantity specified. Second, operations must be added, along with the work centers where they are carried out.

Begin by navigating to Manufacturing app ‣ Products ‣ Bills of Materials. Select a BoM, or create a new one by clicking New.

In the Components tab of the BoM form, add each component by clicking Add a line, selecting the component from the drop-down menu in the Component column, and entering the quantity in the Quantity column.

In the Operations tab, add an operation by clicking Add a line to open the Create Operations pop-up window. Enter a title for the operation in the Operation field.

Select the Work Center where the operation is carried out. Then, add a Default Duration, which is the estimated amount of time the operation takes to complete.

By default, the Duration Computation field is set to Set duration manually, which means that the number entered in Default Duration field is always used as the expected duration of the operation.

Selecting Compute based on tracked time causes Odoo to automatically compute the Default Duration based on a certain number of work orders, which is set in the Based on field. Before there are work orders to compute this duration, the value in the Default Duration field is used instead.

The hourly cost of operating the work center, and the duration of the operation, are used to calculate the operation’s cost.

Finally, click Save & Close to add the operation to the BoM, and close the Create Operations pop-up window. Alternatively, click Save & New to add the operation to the BoM, and open a blank Create Operations pop-up window to add another operation.

See also

For a full overview of BoM configuration, see the documentation on bills of materials.

MO overview

Each MO has an overview page, which lists a variety of information about the MO, including MO cost and real cost. To view the overview for an MO, navigate to Manufacturing app ‣ Operations ‣ Manufacturing Orders, and select an MO. Then, click the Overview smart button at the top of the MO.

Both the MO cost and real cost take into account the cost and quantity of components, as well as the cost of completing each work order. The overview page lists a row for each of these values, with the sum of them listed at the bottom of the MO Cost and Real Cost columns.

Before work begins on an MO, the MO Cost and Real Cost columns display the same costs. This is the estimated cost of completing the MO.

However, once work commences, the values in the Real Cost column may begin to diverge from the values in the MO Cost column. This happens if a different component quantity is used than was listed on the MO, or if the duration of a work order is different than expected.

Once the MO has been completed by clicking Produce All, the component rows of the MO Cost column update to reflect the quantities actually consumed, matching the Real Cost column. The operation rows, however, keep using each operation’s expected duration for the MO Cost column, while Real Cost reflects the time actually logged; the two therefore keep diverging whenever an operation takes more or less time than expected.

screenshot: manufacturing-mo-costs-overview
menu
Manufacturing ‣ Operations ‣ Manufacturing Orders ‣ (MO) ‣ Overview
shows
The MO Overview page listing component and operation rows with their MO Cost, BoM Cost and Real Cost columns, and the totals row.
data
MO "WH/MO/00001" for a manufactured product.
module
mrp
notes
English UI, light theme, 1440px width.

Tip

Manufacturing orders in progress or awaiting closing can also be posted to accounting as work-in-progress. Select one or more MOs from the Manufacturing Orders list, then use ⚙️ Actions ‣ Post WIP Accounting Entry to create the corresponding journal entry. Requires the Inventory Valuation accounting group, and the Invoicing or Accounting app.

Average manufacturing cost

In addition to the cost of each individual MO for a product, Odoo also tracks the average cost of manufacturing the product, taking into account the cost of every completed MO. To view this, navigate to Inventory app ‣ Products ‣ Products, and select a product.

The manufacturing cost of the product is displayed per unit of measure in the Cost field, located in the General Information tab. The value continues to update as the costs of additional MOs are factored into the average cost.

Important

The Cost field only updates automatically for products using the Average Cost (AVCO) or First In First Out (FIFO) costing method (set on the product category). For products using the Standard Price method, the cost must be updated manually.

To the right of the Cost field is a Compute Price from BoM button, which only appears for products with at least one BoM. Click this button to reset the cost of the product to the expected cost, which only takes into account the components and operations listed on the BoM.

Important

Be aware that clicking Compute Price from BoM does not set the price permanently. The cost continues to update based on the average of the BoM price and the real cost of any future MOs.

Example workflow: manufacturing cost

Golf product manufacturer Fairway Fields produces a variety of golf products, including an indoor putting green. They have configured a BoM for the putting green, so Odoo automatically calculates the manufacturing cost of each putting green MO.

The BoM lists two components:

  • One unit of green felt, which costs $20.00.

  • One unit of a rubber pad, which costs $30.00.

The BoM also lists four operations, all of which are carried out at Assembly Station 1, which has an hourly operating cost of $30.00. Those operations are as follows:

  • Cut felt: default duration of seven minutes, for a total cost of $3.50.

  • Cut rubber pad: default duration of five minutes, for a total cost of $2.50.

  • Attach pad to felt: default duration of 15 minutes, for a total cost of $7.50.

  • Cut holes: default duration of three minutes, for a total cost of $1.50.

Altogether, the components required to produce one putting green cost $50.00, and the operations required cost $15.00, for a total manufacturing cost of $65.00. This cost is reflected in the Cost field on the putting green’s product form.

Fairway Fields confirms an MO for one putting green. Before manufacturing starts, the MO overview lists a cost of $65.00 in both the MO Cost and Real Cost fields.

screenshot: manufacturing-mo-costs-example-before
menu
Manufacturing ‣ Operations ‣ Manufacturing Orders ‣ (MO) ‣ Overview
shows
The MO Overview page for one putting green before production starts; MO Cost and Real Cost both $65.00.
data
MO for product "Putting Green", quantity 1, not yet started.
module
mrp
notes
English UI, light theme, 1440px width.

Manufacturing begins, and the operations take ten minutes longer than expected, for a total manufacturing time of 40 minutes. This deviation from the BoM is reflected on the MO overview, which now lists a Real Cost of $70.00 for the operations, while MO Cost still shows the expected $65.00.

screenshot: manufacturing-mo-costs-example-during
menu
Manufacturing ‣ Operations ‣ Manufacturing Orders ‣ (MO) ‣ Overview
shows
The MO Overview page for one putting green during production; MO Cost $65.00, Real Cost $70.00.
data
MO for product "Putting Green", quantity 1, in progress.
module
mrp
notes
English UI, light theme, 1440px width.

Once manufacturing is finished, and the MO is marked as Done, the components’ rows update to the quantities actually consumed (unchanged here), but the operations keep using their expected duration for the MO Cost column. The MO overview therefore keeps showing an MO Cost of $65.00 and a Real Cost of $70.00.

On the putting green’s product page, the Cost field now displays a cost of $67.50, the average of the original cost of $65.00 and the real cost of $70.00 from the MO (only for a product using the Average Cost (AVCO) or FIFO costing method).