How-toOdooSales / Inventory / Manufacturing (MRP)

Odoo: Create a Manufacturing Order from a Sales Order

Question
odoo sales order to manufacturing order

Also searched as

  • odoo create manufacturing order from sales order automatically
  • odoo make to order manufacturing route
  • odoo sales order does not create manufacturing order
  • odoo replenish on order mto manufacture

Short answer

To make confirming an Odoo sales order create a manufacturing order, give the product a Bill of Materials of type Manufacture this product and set both the Manufacture and Replenish on Order (MTO) routes on the product. When the order is confirmed, the delivery demand triggers a procurement, the Manufacture rule fires, and an MO is created with the sales order as its source.

Applies to: Odoo 16, 17, 18 and later, Community and Enterprise. Menu names shift slightly between versions; the route logic is the same.

How to set up sales order to manufacturing order

  1. 1Install the Sales, Inventory and Manufacturing apps. In Inventory > Configuration > Settings, turn on Multi-Step Routes if you want to see and use routes on products.
  2. 2Create the product (Sales > Products). Make sure it is a goods product that tracks inventory, so Odoo generates stock moves for it.
  3. 3Create a Bill of Materials in Manufacturing > Operations > Bills of Materials (menu path varies by version) with BoM Type set to Manufacture this product, and add the components and quantities.
  4. 4Open the product, go to the Inventory tab and tick the Manufacture route. Then tick Replenish on Order (MTO). If MTO is not listed, unarchive it under Inventory > Configuration > Routes (use the Archived filter).
  5. 5Check the warehouse under Inventory > Configuration > Warehouses: Manufacture must be enabled and the manufacturing steps chosen (one step, two or three).
  6. 6Create a quotation for the product and confirm it. A Manufacturing smart button appears on the sales order, and the MO carries the sales order number in its Source field.
  7. 7Open the MO, confirm it, check component availability, then produce it. The finished goods reserve against the delivery on the sales order.
  8. 8If no MO appears, run through the troubleshooting section below before touching the scheduler.

How the chain actually works

Odoo does not link a sales order to an MO directly. Confirming the order creates a delivery order with a stock move. That move needs stock in the warehouse. If the product has the Replenish on Order route, the move creates a procurement that cannot be satisfied from stock alone. The procurement is passed to the product routes in sequence, and the Manufacture rule creates an MO whose finished product move feeds the delivery.

That is why both routes are needed. Manufacture alone says how the product is made when something requests it, but without MTO the delivery simply reserves whatever is in stock and waits. Without Manufacture, MTO has no way to supply the demand and you typically see a purchase or a pull rule failure instead.

Make to order versus make to stock

With MTO, every confirmed order creates its own MO for the ordered quantity, linked to that order. This suits configured or custom items where you only build what is sold. With make to stock, you leave out MTO and use reordering rules (a minimum and maximum quantity) so the scheduler creates MOs to keep stock topped up, and deliveries are served from shelf stock.

Many shops mix the two: MTS for fast movers, MTO for slow or custom items. The route is set per product or per product category, so you can apply it to a whole category in one place. If the scheduler is the source of your problem instead, see the page on reordering rules not creating manufacturing orders.

Troubleshooting: sales order created no MO

Start with the BOM. The BOM must be active, of type Manufacture this product, and belong to the right product or variant. A kit-type BOM does not create an MO at all; it explodes into component moves on the delivery. Check the company on the BOM and product too, since multi-company databases hide BOMs from other companies.

Next check routes and warehouse. Confirm the Manufacture route is not archived, that the warehouse has manufacturing enabled, and that the sales order line uses the warehouse you configured. Finally, look at the delivery order: if it is already fully reserved from stock, no procurement is raised, which is the correct behaviour for MTO only when stock does not cover the demand in some versions.

If the MO exists but is stuck, the problem has moved to component availability, which is covered separately.

Product form > Inventory tab > Routes:
  [x] Manufacture
  [x] Replenish on Order (MTO)
Inventory > Configuration > Warehouses > Manufacture: enabled

Try it here, free

Odoo Manufacturing Technical Model Names Reference

Open full tool

Searchable lookup of the Odoo models behind manufacturing, inventory, purchasing and sales, with the fields you query most.

Common pitfalls

  • !Ticking only Replenish on Order without Manufacture, which raises a procurement error instead of an MO.
  • !Using a kit-type BOM and expecting an MO; kits never create manufacturing orders.
  • !Leaving the MTO route archived after upgrading to a newer version, so it never appears on the product.
  • !Testing with stock on hand and concluding the route is broken, when the delivery was simply reserved from stock.
  • !Setting the route on the product template when the variants carry their own BOMs and the BOM is not tied to the variant.

How an ERP-grounded AI assistant handles this

An assistant grounded in your Odoo data (ERPray is read-only by default and shows its query) can answer why a given sales order produced no MO: it can check the product routes, the BOM type, the warehouse manufacturing setting and the reservation state of the delivery, and list every confirmed order whose product lacks a BOM. For manufacturers running Odoo on their own servers, that runs against a model hosted on their own hardware, so order and BOM data do not leave the network. Odoo's own configuration screens are enough for a one-time setup; the value is in auditing many products at once.

Frequently asked questions

Do I need MTO to get an MO from a sales order?

Yes, if you want an MO per order. Without Replenish on Order, the delivery reserves from stock and nothing is manufactured until a reordering rule or a manual MO does it. MTO is what turns each confirmed order into its own procurement for that quantity.

Where do I see the MO linked to my sales order?

A Manufacturing smart button appears on the sales order after confirmation. You can also search MOs by the Source field, which carries the sales order reference. The delivery order shows the same link through its origin.

Why is the MTO route not visible on my product?

In recent versions the Replenish on Order route is archived by default and Multi-Step Routes must be enabled in Inventory settings. Unarchive the route under Inventory > Configuration > Routes, then it appears on the product Inventory tab.

Can one sales order create several MOs?

Yes. Each order line for a manufactured product can create its own MO, and a multi-level BOM with sub-assemblies set to Manufacture and MTO creates child MOs for the sub-assemblies as well.

Related

Error fix

Odoo Manufacturing Order: Components Not Available or Will Not Reserve

An Odoo manufacturing order stays in Confirmed with components marked Not Available when stock.move lines for the raw materials cannot be reserved from the quantity actually sitting in the MO's source location. The usual causes are stock in the wrong location, stock already reserved by another document, lot or tracking mismatches, and a unit of measure difference between the BoM and the product.

How-to

Odoo Reordering Rule Not Creating Manufacturing Orders: Causes and Fixes

Odoo creates a manufacturing order from a reordering rule only when the rule's forecast quantity falls below its minimum, the product has the Manufacture route with an active BoM, and the replenishment scheduler actually runs. Check the rule's route and warehouse, the product's forecast, the BoM, and the scheduler cron, in that order.

How-to

Odoo Manufacturing Tutorial: From BOM to Finished Product

The Odoo Manufacturing app (MRP) turns a Bill of Materials into manufacturing orders that consume components and produce finished goods. The core flow is: create products, build a BOM, optionally add work centers and operations, create and confirm a manufacturing order, then produce and mark it done. This walkthrough covers the process end to end and what to verify on Odoo 19.

How-to

Odoo Manufacturing App: How to Make a Kit

In Odoo you make a kit by creating a Bill of Materials and setting BoM Type to Kit instead of Manufacture this product. A kit is not produced: when you sell or deliver it, Odoo replaces the kit product with its components on the stock moves. Use a kit for bundles you pack at delivery, and a manufactured BOM when you need to build and stock the assembled item.

How-to

How to Create a Generic Inquiry in Acumatica

Generic Inquiries (GI) are Acumatica's no-code query builder for joining tables, adding filters, and exposing the result as an inquiry screen, dashboard data source, or API endpoint. Open System > Customization > Generic Inquiry, add your base table, define joins and conditions, then run and save. No SQL or customization project is required.

Error fix

Fix Odoo AccessError: You Are Not Allowed to Access Records

Odoo raises AccessError when a user's security groups do not grant a CRUD right on a model through ir.model.access.csv, or when an ir.rule record rule filters the specific record out for that user or company. Fix it by adding the user to the group named in the error, editing the model's access rights, or reviewing the record rule's domain under Settings > Technical > Security.

AI for ERP

AI for Odoo Manufacturing (MRP): BOMs, Work Orders and Shortages

AI for Odoo Manufacturing: BOM checks, work order delays, reordering rules and plain-language questions over mrp.production data, on-prem or private cloud.

AI for ERP

AI for Odoo Manufacturing That Reads Your Own Database, Not a Vendor's Cloud

Add grounded, natural-language AI to Odoo Manufacturing without sending MRP, BoM, or work order data to a public model. On-prem or private cloud, ORM-native.

Stuck on Odoo?

Talk to engineers who work inside Odoo every week, and who build private AI that answers these questions from your own ERP data.

Keep exploring

Free tools

ERP fixes and how-tos

AI on your ERP

Integrations

Software