Sales Order
The customer's commitment to buy โ may commit (reserve) stock, but posts no G/L entry. The hub of the sales chain.
A Sales Order is the customer’s confirmed commitment to buy. It records what the customer has agreed to purchase, at what price, for delivery when. It sits at the centre of the order-to-cash chain: everything downstream โ deliveries and invoices โ is typically based on it, and the order is the document that ties the whole sale together.
Purpose
A sales order is created when a customer confirms an order โ whether taken over the phone, received by email, or copied from an accepted quotation. It captures the commitment: the items, the agreed quantities and prices, the ship-to address, and the requested delivery date. Unlike a quotation, an order is a promise to deliver, and it can influence stock planning immediately.
An order can be delivered in parts โ one order may spawn several deliveries as goods become available โ and it stays open until fully delivered and invoiced. Once a delivery is based on it, the order can no longer be deleted; it must be cancelled instead, preserving the audit trail.
Position in the document chain
The order copies forward from a quotation and is the base for deliveries and invoices.
flowchart TD
SQ[Sales Quotation] -->|confirmed| SO[Sales Order]
SO -->|goods ship| DEL[Delivery]
SO -->|billing| ARI[A/R Invoice]
DEL -->|triggers| ARI
style SQ fill:#dbeafe,stroke:#3b82f6
style SO fill:#dbeafe,stroke:#3b82f6,stroke-width:3px
style DEL fill:#dcfce7,stroke:#16a34a
style ARI fill:#fef9c3,stroke:#ca8a04- Copies from: a Sales Quotation (optional), or created directly.
- Becomes: a Delivery (when goods ship) and/or an A/R Invoice (when billed). Each
downstream line records the order in its
BaseType/BaseEntry/BaseLinefields, so the chain can be traced Order โ Delivery โ Invoice.
Key fields
The order is a Document entity keyed by DocEntry, with DocObjectCode = oOrders.
Header
| Field | Meaning |
|---|---|
DocEntry | Internal primary key. |
DocNum | User-visible order number. |
CardCode | Customer business-partner code. |
DocDate | Order (posting) date. |
DocDueDate | Requested delivery date. |
DocCurrency | Order currency. |
DocTotal | Order total in document currency. |
ShipToCode | Ship-to address code. |
SalesPersonCode | Sales employee. |
DocumentStatus | bost_Open until fully delivered and invoiced, then bost_Close. |
Comments | Free-text remarks. |
Lines (DocumentLines)
| Field | Meaning |
|---|---|
LineNum | 0-based line index. |
ItemCode | Item master code. |
Quantity | Ordered quantity. |
Price | Unit price before VAT. |
LineTotal | Quantity ร Price. |
WarehouseCode | Warehouse from which stock will be committed / shipped. |
ShipDate | Required delivery date for the line. |
VatGroup | Tax code. |
BaseType/BaseEntry/BaseLine | Link back to a quotation line, if copied. |
Stock and G/L effect
No accounting entry. A sales order posts nothing to the general ledger โ the customer has committed but nothing has shipped or been billed yet.
Stock may be committed. Depending on configuration, an order reserves stock: the ordered quantity shows as committed in inventory reports (it reduces available quantity) but the on-hand quantity is unchanged โ no goods have physically moved. This reservation is a planning signal, not a stock transaction. The actual reduction of on-hand stock happens at the Delivery stage.
Service Layer entity
| Property | Value |
|---|---|
| SL entity | Orders |
| Object code | oOrders (17) |
| Norma path | /b1s/v1/Orders |
How to create it in Norma
Use the create_sales_order tool. It needs:
card_codeโ the customer’s code (e.g.C001).linesโ each anitem_code+quantity.
Prices come from the item master; the sales-order tool does not take an authoritative per-line price (unlike the quotation, invoice, and credit-memo tools). Use it when the customer wants to order, buy, or purchase items โ not for quotes, deliveries, or invoices.
As with every Norma write, the order is held for human review. The tool assembles
the order, the review gate presents the customer, lines, and total, and only on
approval does the connector POST it to /b1s/v1/Orders. No approval, no write.