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 activeCause 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 overflowStuck 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 firstCause 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 pointCause 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 → CreateCannot 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 accordinglyCause 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), WarningManufacturing 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 resumeDiagnosing 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