6.1 Bills of materials & routings
Key Takeaways
- A Bill of Materials (BoM) defines the components, quantities, and operations needed to produce a product; Odoo 19 selects the correct BoM by product/variant and sequence priority.
- Odoo 19 offers three BoM types: 'Manufacture this Product', 'Kit' (phantom), and 'Subcontracting'.
- A Kit BoM is never manufactured — it explodes into its components on the delivery order, so no manufacturing order or work order is created.
- Routings were merged into the BoM in Odoo 14 and later; operations and their work centers are defined directly in the BoM's Operations tab, with no separate Routing object.
- By-products (enabled in settings) are secondary outputs added to stock alongside the main product, and 'Apply on Variants' restricts a component line to specific product variants.
Bills of Materials in Odoo 19
A Bill of Materials (BoM) is the master record that tells Odoo which components, quantities, and operations are needed to produce a finished product. In Odoo 19 you create BoMs from Manufacturing → Products → Bills of Materials, or directly from a product's Bill of Materials smart button. A single storable product can have several BoMs; Odoo selects the correct one based on the product or variant, and — where more than one applies — the record's sequence priority. Getting the BoM right is foundational, because Manufacturing carries roughly 12% of the functional exam and every downstream document (manufacturing orders, work orders, costing) reads from it.
Each BoM points at either a product variant (one specific variant) or a product template (all variants). The header also holds the Quantity the BoM produces — a BoM might yield 1 unit or a batch of, say, 10 — a Reference code, and the BoM Type, which is the single most important field on the record.
BoM types
Odoo 19 offers three BoM types, and the exam expects you to know exactly how each behaves:
| BoM Type | Behavior | Stock effect |
|---|---|---|
| Manufacture this Product | Components are consumed by a Manufacturing Order (MO); the finished good is produced into stock | MO consumes components and produces the finished product |
| Kit (phantom) | No MO is ever created; the BoM is exploded into its components on the sales/delivery order | Components are picked and delivered directly |
| Subcontracting | A third party manufactures the product; a subcontract receipt replaces the MO | Handled through the subcontractor's location |
Kits versus manufactured BoMs
A Kit (internally a phantom BoM) is the classic trick question. A kit is not manufactured: when you sell it, Odoo replaces the kit line on the delivery order with its individual components, so the warehouse picks each part. The kit is therefore exploded at delivery, and there is no manufacturing order, no work order, and no separate stock move for the "kit" product itself. By contrast, a Manufacture this Product BoM generates an MO, consumes the components, and produces the finished good as its own distinct unit of stock. Use a kit for items assembled at the point of sale — a gift set or a hardware bundle — and a manufactured BoM when you genuinely build and stock the finished item.
Components and quantities
The Components tab lists each raw material or sub-assembly and the quantity required for the BoM's output. Every line can set a unit of measure and, optionally, the operation in which the component is consumed, so consumption is registered at the correct work order. BoMs can also be multi-level: if a component is itself a manufactured product, launching the top-level MO can cascade into child MOs, and if a component is a kit it explodes further inside the order. This lets you model sub-assemblies cleanly instead of flattening everything into one giant list.
Operations, work centers, and routings
This is a frequent exam point: in modern Odoo (14 and later, so Odoo 19), routings no longer exist as a separate object. Operations are defined directly on the BoM, in its Operations tab — there is no standalone "Routing" menu. Each operation specifies:
- The Work Center where it runs
- A duration (entered manually, or computed from time tracking / "based on real time")
- An optional work sheet (a PDF or Google Slide of instructions for the operator)
These operations become the work orders on the MO, giving operators a step-by-step sequence to follow. To use operations at all you must enable Work Orders in Manufacturing → Configuration → Settings; without it, an MO simply consumes components in one step with no work-order routing.
By-products
A by-product is a secondary item produced alongside the main product — sawdust from cutting timber, or whey from making cheese. Enable By-Products in settings to expose the By-products tab on the BoM, where you list the extra outputs and, optionally, the operation that yields each. By-products are produced in addition to the main product and are added to stock when the MO is marked done.
BoM variants
When a product template has variants (size, color, and so on), a single BoM can serve them all. On each component line you can set Apply on Variants so a component is consumed only for specific variants — for example a red-dye line that applies only to the red variant. Alternatively you can build a distinct BoM per variant. Using Apply on Variants keeps one clean product template while still driving variant-specific component consumption, which is usually the tidier approach.
Choosing the right structure
- Need to build and stock the finished item, tracking components and labor? Use Manufacture this Product.
- Selling a bundle assembled at delivery with no real production step? Use a Kit.
- Outsourcing production to a third party? Use Subcontracting.
Choosing the correct BoM type drives everything downstream: whether an MO is created, whether components appear on the delivery order, and how cost and inventory are recorded.
In Odoo 19, what happens when a customer orders a product whose Bill of Materials is set to type 'Kit'?
Where are manufacturing operations (work orders) defined in Odoo 19?
A cheese producer wants Odoo to add whey to stock automatically whenever a manufacturing order for cheese is completed. What should they configure?