Skip links

What Is a Bill of Materials in Odoo?

The plain definition

A bill of materials — usually written BoM — is the recipe for a product.

It says: to make one of this, you need these components, in these quantities.

That is the whole concept. Everything else is detail on top of it.

Odoo uses the BoM whenever you manufacture, so getting it right matters more than almost any other piece of manufacturing setup.

What a BoM contains

The product. What you are making.

The quantity. How many units this recipe produces. Usually one — and this is the field that causes the most trouble. See below.

The components. Each with a quantity and a unit of measure.

The type. Manufacture, kit, or subcontracting.

Optionally: operations and work centres, if you track how the work is done.

The quantity trap

This deserves its own section because it is the most common single error in Odoo manufacturing setups, and it produces no error message.

The BoM header has a quantity field. It means: this recipe produces this many units of the product.

If your product is measured in pieces and the header says 1, everything behaves as expected.

But if your product is measured in something else — grams, litres, metres — the header quantity must match.

A product sold in 5-gram units, with a BoM header quantity of 1, will calculate component quantities as though the recipe produces one gram. Every component quantity will be wrong by a factor of five.

Nothing warns you. The manufacturing order is created, the components are consumed, and the numbers are quietly wrong. It shows up later as stock that does not balance and costs that make no sense.

Check the BoM header quantity against the product’s unit of measure. Every time. It takes two seconds.

FIGURE 1: THE MISTAKE THAT PRODUCES NO ERROR

Header quantity matches the unit

  • Product measured in 5 g units, header set to 5
  • Component quantities scale correctly
  • Costs and stock come out right

Header left at 1 by default

  • Product measured in 5 g units, header still 1
  • Components wrong by a factor of five
  • No warning — just wrong numbers, quietly

The three types

They behave completely differently, and choosing wrongly produces confusing results.

Manufacture this product

The normal case. You make it.

Creating a manufacturing order consumes the components from stock and produces the finished goods into stock. If you use automatic valuation, the accounting entries post at the same moment.

Kit

A kit is not manufactured. It is a bundle that gets split into its components at the point of sale or delivery.

Sell a kit, and Odoo delivers the components. No manufacturing order is created and no finished product is ever held in stock.

Use this for: things you sell together but never actually assemble. A starter pack. A set of accessories.

Do not use it for: anything you physically build. You will get a delivery of loose parts instead of a finished product.

Subcontracting

Someone else makes it.

You name the vendor on the BoM. Then you raise a purchase order for the finished product, and Odoo handles sending the components out and receiving the finished goods back.

Two things to get right: your components at the subcontractor are still your stock and must appear in your valuation, and the finished product’s cost is your components plus the subcontractor’s charge.

FIGURE 2: THREE TYPES, THREE BEHAVIOURS

Manufacture

  • You make it. Components consumed, finished goods produced, entries posted.

Kit

  • Never assembled. Split into components at delivery. No manufacturing order.

Subcontracting

  • A vendor makes it. Your components go out, finished goods come back.

Nested BoMs

A component can have its own BoM.

If you make a sub-assembly and then use it in a finished product, Odoo handles the levels — either producing the sub-assembly as a separate manufacturing order, or exploding it into the parent.

Keep the nesting shallow. Deep BoM trees are hard to cost, harder to debug, and slow to calculate. Two levels is comfortable. Five is a maintenance problem.

BoM versions

You can have more than one BoM for the same product.

Why this is useful: a different recipe for a different quantity, an alternative when a component is unavailable, or a version for a specific customer.

Odoo picks based on the criteria you set. If you only have one, it uses that.

Keep it simple unless you need it. Multiple BoMs where nobody can predict which one applies is a common source of confusion.

Costing

The cost of a manufactured product comes from its components, plus operations if you use routings, plus any configured overheads.

A check worth doing during setup: take one finished product, add up its component costs by hand, and compare with what Odoo says.

If they disagree, either the BoM quantities are wrong or a component has no cost. Both are far better found on a test than in a margin report six months later.

A component with zero cost makes the finished product look free, and that wrong number flows into every margin figure downstream.

Keeping BoMs accurate

Three habits.

Review them yearly. BoMs get written during implementation and then the process changes. A recipe that no longer matches reality produces wrong material requirements and wrong costs.

Record actual consumption where usage varies. If waste and offcuts mean you really use more than the BoM says, record actuals rather than assuming planned. Otherwise your stock drifts.

Watch consumption variance. Odoo can show planned against actual. Consistent differences tell you the BoM needs updating.

FIGURE 3: FOUR THINGS TO CHECK ON EVERY BOM

Header quantity vs unit of measure

  • The most common error, and it produces no warning.

Every component has a real cost

  • A zero-cost component makes the finished product look free.

The right BoM type

  • Kit and manufacture behave completely differently.

It still matches reality

  • Recipes written three years ago describe a process that has changed.

Common questions

Can a product have no BoM? Yes — if you buy it rather than make it.

What if a component is out of stock? The manufacturing order shows as unavailable. You can still confirm it; you cannot complete it.

Can I change a BoM after using it? Yes, and existing manufacturing orders keep the version they were created with. New ones use the updated recipe.

How do I handle waste? Either build the expected waste into the component quantity, or record actual consumption at production time. The second is more accurate where variation is real.

The short version

A BoM is a recipe: this product, this quantity, these components.

Check the header quantity against the product’s unit of measure — that single field is behind more manufacturing confusion in Odoo than anything else, and it fails silently.

Make sure every component has a real cost, choose the right type, and review your recipes yearly against what actually happens on the floor.

Manufacturing costs not making sense?

Get in touch. We check BoM quantities and component costs against real production — that is where the discrepancy usually is.

Leave a comment

Drag