Scheduling

How the scheduler chooses placements, and every option that controls it.

Run a schedule

Click Schedule in the top bar to open the Run Scheduler modal. Pick a direction, sort order and constraints, then PreviewApply. APS runs the engine client-side — nothing is committed to Odoo until you publish.

Direction

Forward

Every operation starts as early as possible, respecting dependencies and resource capacity. Use when you want to know the earliest you could complete each order.

Backward (just-in-time)

Every operation ends as late as possible before its due date. Good for minimising work-in-progress and storage. Late orders surface immediately.

A bill of material is exploded level by level. The finished order is placed against its own deadline; each sub-assembly is then backed up from the moment its parent needs it, not from a deadline of its own. An order whose deadline has already passed cannot be backed up from it at all — it is planned forward from now, in sequence, and reported once as PAST_DEADLINE.

Bidirectional

Schedules around locked & anchor operations. Predecessors push backward from each anchor, successors push forward. Use after locking key milestones.

Sort order (which job goes first)

When two operations compete for the same time slot, the sort order decides who wins.

  • Priority — lower priority value wins. Ties broken by due date (earlier first), then hierarchy (children before parents).
  • Due date — earliest due date wins. Ties broken by priority, then hierarchy.
  • Earliest start — operations already scheduled earliest win. Useful for tweaks that should preserve existing order.
Priority is inherited. A parent MO's priority is propagated to all its children so a tree is scheduled as one cohort. You can't accidentally schedule a sub-assembly later than its parent.

Freeze horizon

The freeze horizon protects the imminent future from being rescheduled. Any work order whose current operation_start falls inside the freeze window is locked in place during this run.

Two rules sit above the setting: work that is running or finished is never moved, whatever the horizon says, and work that should have started days ago and never did is not treated as in flight — it is rescheduled rather than left sitting in the past.

  • 0 — freeze only operations already in the past.
  • 1 — freeze the past plus the next 24 hours.
  • 7 — freeze the past plus the next 7 days.
  • No freeze window — switch on to ignore freeze entirely.

Use higher values to keep the shop floor stable: workers don't want a new plan dropped on them mid-shift. Use No freeze window when rebaselining everything (e.g. after a major disruption).

Include past work orders

Even with no freeze, an op whose start is in the past is left where it is by default. Switch this on to pull all past-scheduled ops forward into the future and reschedule them as if unscheduled. Useful when old data has accumulated.

Use alternative resources

When the assigned work center is congested, APS can move an operation to an equivalent one configured in Odoo. The candidate that frees the operation earliest is chosen, and only work centers listed as alternatives in Odoo are ever considered. Duration is recalculated for the work center that gets the job, so a slower or higher-capacity alternative changes the time the operation takes. Disable if you want strict per-resource assignment.

This works alongside the material settings: an operation moved to an alternative still cannot start before its components arrive, and an order left out for lack of material is not resurrected by having a second work center free.

Capacity mode

  • Finite (default) — respects work-center capacity. Two ops can't overlap on the same unit.
  • Infinite — overlaps allowed. Useful for “ideal world” lead-time analysis.

Material-aware scheduling

Switch on Respect material availability to delay an MO until all its BOM components are in stock or arriving on a confirmed PO. APS uses FIFO supply allocation: higher-priority orders claim supply first.

Per direction:

  • Forward — enforces material availability by delaying placement until parts are on hand.
  • Backward — plans to the deadline and reports what the material cannot support, as MATERIAL_LATE / MATERIAL_SHORTAGE conflicts, so you can see what needs expediting rather than having the date quietly moved.
  • Bidirectional and RCCP — enforce the same material floor as Forward.

All five presets ask for material awareness. One further choice sits on the Custom tab:

  • When material is missing — an order whose components no stock or purchase order covers is either scheduled and flagged (the default: production gets a date, purchasing sees the order on the Gantt) or left out of the plan. Leaving it out also holds back the orders above it, because a top-level order cannot be finished while a sub-assembly it consumes has nothing to make it from.

You do not need a separate setting to keep blocked work out of the early slots. The material floor already holds an order back to the date its parts arrive, so the time in front of that date stays available to work that can actually run.

See Materials for details.

What happens during a run

  1. Operations are sorted (sort order setting)
  2. Freeze horizon locks past + near-future ops in place
  3. Engine walks the sorted list, placing each op in its earliest legal slot
  4. Capacity, calendar, dependencies, alternatives and (optionally) materials are checked
  5. If no slot fits, the op is flagged with a conflict (you'll see it on the Gantt)

Nothing is committed to Odoo. The plan lives in the active dataset until you Publish to Odoo.

APS 4 Manufacturing

Built by Avalah

Odoo Gold Partner

APS 4 Manufacturing

Built by Avalah

Odoo Gold Partner