Skip to content

Fix Odoo Manufacturing Order Stuck: Cannot Start, Produce, or Close MO

DeployMonkey Team · March 23, 2026 10 min read

The Stuck Manufacturing Order Problem

Manufacturing orders (MOs) in Odoo follow the workflow: Draft → Confirmed → In Progress → Done. When an MO gets stuck, production stops, delivery dates slip, and raw material planning becomes unreliable. Each stuck state has different causes and fixes.

Stuck in Confirmed: Cannot Start Production

Cause 1: Raw Materials Not Available

# MO shows "Check Availability" button instead of "Start Production"

# Fix:
# 1. Click "Check Availability" to try reserving materials
# 2. If "Waiting" state appears, you're short on raw materials

# Check which materials are missing:
# Open the MO → Components tab
# Look for lines where "Reserved" < "To Consume"

# Options:
# a. Purchase the missing materials (Purchase → New)
# b. Receive pending purchase orders first
# c. Do an inventory adjustment if stock is physically available
#    but not reflected in Odoo
# d. Force-reserve from another MO (unreserve there first)

Cause 2: Bill of Materials (BOM) Issues

# The BOM is missing, archived, or has errors

# Fix:
# 1. Check BOM exists: Manufacturing → Master Data → Bills of Materials
# 2. Verify BOM is active (not archived)
# 3. Check BOM components have valid products
# 4. Verify BOM type matches MO type:
#    - "Manufacture" for standard MOs
#    - "Kit" for virtual products (no MO created)
#    - "Subcontracting" for outsourced manufacturing

# Common issue: BOM has a component that was archived
# Open BOM → check each component line → ensure product is active

Cause 3: Work Center Not Available

# If using work orders (MRP module), the work center may be at capacity

# Fix:
# Manufacturing → Configuration → Work Centers → select work center
# Check:
# - Capacity: maximum parallel operations
# - Working Hours: calendar defining availability
# - Currently running work orders that occupy capacity

# To bypass temporarily:
# Increase the work center capacity
# Or create a second work center for overflow

Stuck in Progress: Cannot Produce

Cause 4: Work Order Not Completed

# MO requires all work orders to be completed before marking Done

# Fix:
# Open MO → Work Orders tab
# Check each work order status
# Complete each work order in sequence:
# Work Order → Start → set Done quantity → Finish

# If a work order is stuck:
# Check if it's waiting for a previous work order (routing sequence)
# Complete the prior work order first

Cause 5: Quality Check Blocking

# Quality control module requires checks to pass before proceeding

# Error: "Quality check required before validation"

# Fix:
# Open MO → Quality Checks tab (or Work Order → Quality Checks)
# Complete all required quality checks:
# Pass / Fail each check
# If a check fails, decide: reject material or create an alert

# To remove a quality check requirement:
# Quality → Configuration → Quality Points → archive the point

Cause 6: Serial Number Required

# Product tracking requires serial numbers for produced items

# Error: "You need to supply a Lot/Serial Number"

# Fix:
# In the MO or Work Order:
# Set the Lot/Serial Number field for the finished product
# Manufacturing → Operations → create new serial number
# Or: Product → Lots/Serial Numbers → Create

Cannot Close/Finish the MO

Cause 7: Quantity Mismatch

# Produced quantity doesn't match planned quantity

# Fix:
# In the MO, set the actual produced quantity:
# "Quantity" field (qty_producing) → enter the actual amount produced

# If producing less than planned:
# Set the Done quantity → Post Production
# Odoo asks: "Create backorder for remaining X?" or "Close without backorder"

# If producing more than planned:
# Enter the higher quantity → Odoo adjusts material consumption accordingly

Cause 8: Component Consumption Not Recorded

# MO shows unconsumed components — Odoo can't close until resolved

# Fix:
# Open MO → Components tab
# For each component, verify the "Done" quantity matches expected consumption
# If material was physically consumed but not recorded:
# Update the "Done" column manually

# For flexible consumption:
# Manufacturing → Configuration → Settings
# Manufacturing Orders section → Flexible Consumption
# Options: Strict (must match BOM), Allowed (can differ), Warning

Manufacturing Order Cancelled Accidentally

# Need to reopen a cancelled MO

# Fix: Cancelled MOs cannot be uncancelled directly
# Option 1: Create a new MO for the same product/quantity
# Option 2: Use shell to reset state (admin only, backup first):
mo = env['mrp.production'].browse(MO_ID)
mo.sudo().write({'state': 'confirmed'})
env.cr.commit()
# Then check availability and resume

Diagnosing MO Issues

# 1. Check MO state and related documents:
mo = env['mrp.production'].browse(MO_ID)
print(f'State: {mo.state}')
print(f'Product: {mo.product_id.name}')
print(f'Qty: {mo.product_qty} / Produced: {mo.qty_produced}')
print(f'Components:')
for line in mo.move_raw_ids:
    print(f'  {line.product_id.name}: need={line.product_uom_qty} reserved={line.quantity}')

# 2. Check work orders:
for wo in mo.workorder_ids:
    print(f'  WO: {wo.name} state={wo.state} work_center={wo.workcenter_id.name}')

# 3. Check availability:
mo.action_assign()  # Try to reserve materials
env.cr.commit()

# 4. Check BOM:
bom = mo.bom_id
print(f'BOM: {bom.display_name} type={bom.type}')
for line in bom.bom_line_ids:
    print(f'  Component: {line.product_id.name} qty={line.product_qty}')

Prevention

  • Set up reordering rules for raw materials to avoid stockouts
  • Use the MPS (Master Production Schedule) for planned manufacturing
  • Enable "Flexible Consumption" if actual material usage varies from BOM
  • Keep BOMs up to date when products or components change
  • Assign serial numbers at the start of production, not at the end