A Sales Contract records a standing supply agreement with a customer — “200 units of product X every week for twelve months”, or “50,000 units across the year, called off as needed” — and turns it into real fulfilment work. Cadence contracts automatically create confirmed Sales Orders a set number of days before each scheduled delivery. Call-off contracts hold an agreed envelope that Sales Orders draw down as the customer asks for stock.
Contracts also feed Demand Planning, so contracted volume appears as demand before any order exists — production and procurement plan for it in advance rather than reacting when the order lands.
Everything a contract releases is an ordinary Sales Order. Dispatch, invoicing, accounting export and the Orders Dashboard all work on it exactly as they do on an order you typed by hand.
Where to find it: Sales Contracts in the Orders section of the main menu.
Sales Contracts are part of the orders and demand planning feature set. If the menu entry is missing, the Orders & Demand Planning account setting is switched off — see Availability and permissions at the foot of this article.
Concepts
| Term | Meaning |
|---|---|
| Contract | The agreement header: customer, term dates, release lead days and the customer’s blanket PO reference. Carries a generated reference such as SC-P1000001. |
| Contract line | One product under the agreement. Each line is either a cadence line or a call-off line, and they can sit side by side on the same contract. |
| Cadence line | A fixed rhythm — a quantity every week, fortnight or month. Generates a delivery schedule automatically. |
| Call-off line | A committed total with no fixed dates. The customer calls stock off against it whenever they need it. |
| Schedule row | One planned delivery on a cadence line: a date and a quantity. Cadence lines only. |
| Release | Creating the confirmed Sales Order for a schedule row. Automatic for cadence lines; manual (by linking an order line) for call-off lines. |
| Release Lead Days | How many days before the delivery date the Sales Order is created. Default 7. |
| Envelope | A call-off line’s committed quantity, less everything already released against it. |
Quick start
- Open Sales Contracts and click New Sales Contract. The contract reference is generated for you.
- Fill in the header: Customer, Start Date, End Date, and the customer’s blanket PO number in Customer PO Ref if they have one. Adjust Release Lead Days if 7 days’ notice isn’t right for this customer.
- Add lines with the + Cadence and + Call-off buttons beneath the grid — the button you choose sets the line’s type, and the grid then asks only for the fields that type needs.
- Optionally set a Unit Price and Tax code per line. Leave the price blank to use your normal pricing rules.
- Save, then Activate. The delivery schedule is generated at this point — every date across the whole term appears on the Schedule tab.
- Review the schedule. Adjust individual quantities, or Skip occasions the customer won’t take (a shutdown week, for example).
- Leave it to run. Each night the release engine creates the Sales Orders that fall due. Use Release Now if you want to bring a release forward.
The contract list

| Column | Notes |
|---|---|
| Contract Ref | Generated on save. |
| Customer | The contracted customer. |
| Status | Draft, Active, On Hold, Completed or Cancelled. |
| Start Date / End Date | The contract term. |
| Lines | How many products the contract covers. |
| % Fulfilled | Progress across the whole contract, derived from the linked orders — not a stored counter, so it cannot drift. |
Use the search box to find a contract by reference.
The contract screen

The header carries the customer and the term. Beneath it, Contract Lines lists the products, and below that the Schedule and Fulfilment tabs.
Contract lines
The lines grid shows every column both line types use, and leaves the ones that don’t apply blank — a cadence line has no committed quantity, a call-off line has no frequency or release day.
| Column | Applies to | Notes |
|---|---|---|
| Product / UOM | Both | What is being supplied, and in what unit. |
| Qty / Release | Cadence | The quantity delivered on each occasion. Must be greater than zero. |
| Frequency | Cadence | Weekly, Fortnightly or Monthly. |
| Release Day | Cadence | A day of the week for weekly and fortnightly contracts, or a day of the month for monthly ones. The picker changes to match the frequency you chose, so you never type a bare number. |
| Committed Qty | Call-off | The total envelope for the term. Must be greater than zero. |
| Unit Price | Both | The agreed price, in the customer’s currency. Leave it blank and normal pricing applies — price list, contract price, promotion and so on, resolved as usual when the order is created. |
| Tax | Both | Optional. Released lines otherwise take the same tax defaults a manually entered order line would. |
| Released / Fulfilled | Both | Read-only progress, computed from the linked orders and their dispatches. |
Once a contract is activated, a line’s cadence terms are fixed — released orders were created from them, so changing them retrospectively would make history untrue. Add a new line, or amend and let the schedule regenerate its future rows.
Monthly contracts and the 28th
For a monthly cadence the Release Day list stops at 28. Every month has a 28th, so a monthly contract lands on the same day every month, never drifting or skipping February.
Status and lifecycle
Only the actions available in the contract’s current state are offered, and each asks for confirmation first, explaining what it will do:
| Action | Available when | What it does |
|---|---|---|
| Activate | Draft | Generates the delivery schedule for all cadence lines between the start and end dates, and the release engine begins creating confirmed sales orders ahead of each delivery. |
| Hold | Active | No further sales orders are released until the contract is resumed. The schedule is kept intact. |
| Resume | On Hold | The release engine picks up planned deliveries again, including any that fell due while on hold. |
| Complete | Active | No further releases are created. Already-released sales orders are unaffected. |
| Cancel | Draft, Active, On Hold | Future planned deliveries are cancelled; already-released sales orders are left alone and can be managed individually. The confirmation offers Keep Contract if you change your mind. |
| Release Now | Active | Runs the release engine for this contract immediately. Planned deliveries inside the lead window become confirmed sales orders. |
Two behaviours are worth knowing:
- Activate generates the schedule. Until then a contract is just an intention — there are no dated rows and nothing will release.
- Cancel skips the future, keeps the past. Cancelling never withdraws an order a customer is already expecting; if one should be pulled, cancel that order yourself.
A contract can only be deleted while it is in Draft. Once it has released orders, deletion is refused. Use Cancel instead: it ends the agreement while leaving the audit trail whole.
The Schedule tab
The Delivery Schedule lists one row per planned delivery: product, scheduled date, quantity, status and — once released — the Sales Order it created. A twelve-month weekly contract produces over fifty rows, so the tab has Line and Status filters with a Clear Filters button.
| Row status | Meaning and what you can do |
|---|---|
| Planned | Not yet released. The quantity is editable in place, and a Skip button sits in the Actions column. |
| Released | Its Sales Order exists and is named in the Sales Order column. The row is fixed. |
| Skipped | Deliberately passed over — it will never release. Unskip puts it back. |
Only planned rows can be changed. Change one delivery’s quantity without touching the agreement, or skip a shutdown week, a stocktake, or a pause the customer has asked for. Released and skipped rows are immutable, which is what makes the schedule a reliable record of what was agreed and what was sent.
If you amend a cadence line on an active contract, the schedule regenerates future planned rows only. History is never rewritten.
A delivery date where every row has been skipped simply produces no Sales Order. There is no empty order.
The Fulfilment tab

Line Progress gives each line a single line of plain arithmetic — for example “0 fulfilled / 1,800 released / 10,200 scheduled” for a cadence line, or “… / 12,000 committed” for a call-off line. Fulfilled counts what has actually been dispatched, released counts what has been ordered, and the last figure is the target.
Contract Sales Orders lists every order the contract produced, with its status, required date, quantity and dispatches. That is the traceability chain in one place, and it answers “which batches served this contract” without leaving the screen.
How releasing works
A background job runs once a day at 5am and, for every active contract, looks for planned schedule rows dated on or before today + release lead days.
- Rows falling due on the same delivery date are grouped into one confirmed Sales Order — not one per line — with the required date set to the delivery date and the order date set to today.
- Each schedule row becomes an order line carrying the product, quantity, contract unit price (or your normal pricing if blank) and tax.
- The order is linked back to the contract, and each line back to its contract line.
- The schedule row flips to Released in the same transaction that creates the order, so a row can only ever release once. If the job runs twice, or you press Release Now while it is running, you do not get duplicate orders.
- Active contracts past their end date with nothing left to release are moved to Completed automatically.
Released orders are ordinary Sales Orders. Edit, dispatch, invoice and export them as usual — the contract reports on what the orders actually say, so a manual adjustment stays reflected in contract progress.
Call-off orders
Call-off lines are consumed from the Sales Order screen. When you add an order line for a customer and product that has an active call-off contract line, the screen offers to link it. Accepting the link fills in the contract price and records the line against the contract, so the envelope draws down.
Ordering more than the committed quantity warns but does not block. Over-supplying against a blanket agreement is a commercial conversation, not a system error, and the warning is there so it is a decision rather than an accident.
The Sales Order header shows a contract badge linking back to the contract it belongs to.
What contracts do to Demand Planning
Contracted volume becomes demand before any order exists — the point of the whole feature.
- Cadence lines are firm demand. Planned schedule rows inside the planning horizon are bucketed into their week and added to the order quantity, exactly as a confirmed order line would be. Once a row releases it is excluded here, because its Sales Order is now counted instead — so contracted volume is never counted twice.
- Call-off lines are soft demand. The remaining envelope is spread evenly across the weeks left until the end date and enters the forecast side of the plan. Because demand planning takes the greater of order and forecast, actual call-off orders consume this soft demand rather than stacking on top of it.
- The demand plan line breakdown shows a contract quantity alongside order and forecast, so you can see how much of a period’s demand the contract accounts for.
- Products that appear only on a contract — no order history, no forecast — are still planned. They are swept into the plan the same way ordered products are.
Availability and permissions
| Requirement | Detail |
|---|---|
| Account setting | Sales Contracts are gated on the Orders & Demand Planning switch. With it off, the menu entry and screens are hidden and the nightly release job skips the account entirely. |
| Permission | Contract screens use the same permission as Sales Orders, so anyone who can work with orders can work with contracts. |
| Site | A contract belongs to a site, and its released orders are raised there. You see the contracts for the site you are currently working in. |
Things to know
- Contract price is in the customer’s currency and behaves exactly like a manually entered order line price.
- The customer’s blanket PO number lives on the contract, not on each released order — released orders reach it through the contract link.
- Batch reservation is not part of contracts. The chain is for traceability and reporting; stock is not ring-fenced against a contract, since one batch usually serves pooled demand across several customers.
- Purchase-side (supplier) contracts with scheduled receipts are not part of this release.