Do I have to raise a sales order before I can invoice? Standard sales workflow
“Do I have to raise a sales order before I can invoice?” No: the order is optional. It posts nothing and moves no stock (only the sales invoice does), so which documents you use is a decision about how your business sells, and this page walks the full path for when a quote, an order and a delivery are worth having.
A customer wants twelve laptops delivered to their office next Tuesday, and they want a quote first. By the end of this guide you will have taken that from a priced offer to money in the bank, using the five documents BigLedger actually has for it. Allow about twenty minutes the first time you walk it through; after that, a routine order takes five.
This is the long path. If the customer is standing at your counter paying now, you want Cash Sales instead — one document, sixty seconds.
Meet GadgetSphere
GadgetSphere Sdn Bhd sells consumer electronics from 22 Malaysian branches. A corporate customer has asked for twelve ultraportable laptops for a new office, delivered to Klang Valley. The price is RM 4,200 each: RM 50,400 net, RM 3,024 SST at 6%, RM 53,424 in total. They will pay a 20% deposit — RM 10,684.80 — and settle the balance 30 days after delivery. You are selling from branch GS-KV-01.
The shape of the workflow
flowchart LR
Q["Sales Quotation<br/>posts nothing"] --> SO["Sales Order<br/>posts nothing<br/><i>reduces available stock</i>"]
SO -->|"Send To Queue"| PP["Pick Pack Queue<br/>the sent lines wait here"]
PP -->|"Create Delivery Job"| DJ["Delivery job<br/>Delivery and Installation"]
PP -->|"Send To Warehouse Picking Queue"| WMS["Warehouse picking list<br/>Warehouse Management"]
SO -->|"knock off"| SI["<b>Sales Invoice</b><br/><b>stock out · journal · receivable</b>"]
SI --> RV["Receipt Voucher<br/>money in · clears the debt"]
SO -.->|"deposit"| RV
Read the labels carefully, because this is where every previous version of this guide went wrong: of the documents in this flow, the Sales Invoice is the one that moves stock and posts money. The quotation and the order are both zero-effect documents. Finalising a sales order does not deduct inventory, does not create a journal, and does not open a receivable. What it does do is reduce your available stock, so the available figure already counts those twelve laptops as spoken for. It does not send anything to the Pick Pack Queue either: that is a separate button, Send To Queue, on the finalised order’s Delivery Details panel (Step 4).
Before you start
- The customer exists in Customer Maintenance, with credit terms set (Net 30 here) and not blacklisted.
- The items exist and have a price in the pricing scheme linked to your branch.
- Company default GL codes are mapped —
SALES,DEBTORandOUTPUT_TAXfor the invoice, andCOGSandSTOCK_BALANCEfor the month-end cost-of-sales journal. GadgetSphere usesSALES-LAPTOP,DEBTOR-TRADE-RETAIL,LIAB-SST-OUTPUT,COST-LAPTOP. - Your company’s Knock Off Configuration has a Sales Order → Sales Invoice row (Organisation > Company > Knock Off Configuration). Without it the invoice cannot find the order in Step 5.
- Settlement methods exist with a cashbook behind each one, if you are taking a deposit.
- There is stock, or you know when there will be. The invoice will refuse to finalise if there is none at the location.
Step 1: Quote the customer
Sales > Sales Quotation (Internal) > Sales Quotations > Create
The outcome of this step is a priced, numbered offer you can send.
Create the quotation, pick the branch and location on Main Details, choose the customer on Account, and add the twelve laptops on Line Items. The price comes from the pricing scheme; override it if you have negotiated.
Press SAVE, read it back, then FINAL. FINAL assigns the document numbers and locks the header — that is all it does. Nothing is reserved, nothing is committed, and the quotation does not even reduce available stock. Print or email it from the Export tab.
Step 2: Turn the accepted quote into an order
Sales > Sales Order (Internal) > Sales Order > Create > KO For > Sales Quotation
The outcome: a committed order (FINAL). Nobody in the warehouse or dispatch sees it yet — that is Step 4.
Create the sales order, then open the KO For tab and search for your finalised quotation. Select it. The customer, the lines and the prices copy across — you are not retyping anything.

On Main Details, set the things the quotation did not care about:
- Credit terms and due date — Net 30, pulled from the customer record.
- Sales Order Status, if your tenant keeps its own status list (Settings → Sales Order Status). This is how you tag an order as Awaiting stock or Ready to pick and find it again.
- Reference — the customer’s purchase order number. Put it here; it is what they will quote when they ring about the invoice.
On Delivery Details, set the delivery branch and location and the requested delivery date.
Press SAVE, then FINAL.
What FINAL on a sales order actually does: it numbers and locks the order, subtracts twelve laptops from available stock at GS-KV-01, and — through the company’s Knock Off Configuration — makes the order visible in the KO For lists of the invoice and delivery documents. It writes no journal and no inventory transaction, and it puts nothing in the Pick Pack Queue; that is Step 4’s button.
Step 3: Take the deposit
Sales > Sales Order (Internal) > (your order) > Settlement
The outcome: RM 10,684.80 in the bank, recorded against this order.
Open the Settlement tab on the order and add a deposit line: the date, the amount, and the settlement method the customer paid with. Cheque number for a cheque, transaction number for a bank transfer — whichever fields that method requires.
The deposit line is a payment line on the order itself — no separate receipt voucher is created. When the order is finalised, the order writes the cashbook line and the journal (debit the bank, credit the customer) itself, but only if your tenant runs those posting jobs for sales orders. Check the order’s Trace Document tab: one line on Cashbook Txn and one journal on Journal Txn means the RM 10,684.80 is in your books. If both stay empty, it is not, and you should use the order’s Receipt Voucher tab instead. That tab creates a separate, numbered receipt linked to the order, and the receipt’s FINAL writes the cashbook line you will later match in Bank Reconciliation. The two routes differ most when an order is voided: Creating a Sales Order compares them and follows one deposit to the end.
Either way, the order’s ARAP tab now shows Outstanding −10,684.80: a credit held for this customer against this order. The order’s product lines still post nothing.
If the deposit arrives later, or by a route the counter did not handle, raise it directly in Receipt Voucher (Internal) against the customer, and contra it to the invoice when that exists.
Step 4: Send the lines for fulfilment
Sales > Sales Order (Internal) > (your order) > Delivery Details > Send To Queue, then Pick Pack Queue
The outcome: the twelve laptops are in the Pick Pack Queue, and handed on to whoever fulfils them at your branch.
Open the finalised order’s Delivery Details panel, tick Require Delivery on the lines going out, set Qty To Deliver, and click Send To Queue. That button — not FINAL — is what puts the lines in the Pick Pack Queue; the applet refuses it on a draft order. An order that was finalised and never sent is the single most common reason nothing gets picked. Send each line once: a second send after a page reload adds to the queued quantity rather than replacing it.
The Pick Pack Queue lists the sent lines and offers the two hand-offs below. The Delivery Items screen shows each line’s own delivery fields, lets you edit the batch and bin numbers on a line, and prints the list; picking lists belong to the Warehouse Management applet. What happens next depends on how your branch fulfils.
If your branch runs drivers and vehicles, select the lines in the Pick Pack Queue and click Create Delivery Job. That creates a job in the Delivery and Installation applet and reduces the queued balance; dispatch then puts the job on a trip — see the Installation Scheduling Workflow.
If your branch runs the Warehouse Management applet, click Send To Warehouse Picking Queue instead. The lines leave the Pick Pack Queue and appear in the Warehouse Management applet’s Picking Queue, where the warehouse creates a picking list and then a packing list. A line takes one exit or the other, never both. If your branch runs neither, stop here: the Require Delivery flags, delivery branch and location you set on Delivery Details are saved with the order, and picking happens off the printed order.
For serialised goods — and laptops are — this is where the serial numbers get captured. Scan them onto the order lines. The count must equal the line quantity.
Step 5: Invoice — the step that does everything
Finance > Sales Invoice (Internal) > Sales Invoice > Create > KO For > Sales Order
The outcome: stock out, revenue booked, SST booked, and RM 53,424 owed to you.
Create the invoice, open KO For, search for the sales order and knock it off. The lines and the customer come across, with the serials attached.
Because the order holds the deposit, BigLedger asks Transfer Available Credit? Answer Yes. The deposit moves from the order to the invoice by contra, and once the invoice is final it shows RM 42,739.20 outstanding rather than RM 53,424. Answer No and the invoice shows the full amount, while the deposit stays on the order until somebody applies it from the invoice’s Contra tab.

Check three things on Main Details before you go further: the branch and location (stock leaves from here), the transaction date (this is the accounting date), and the currency. Then check the E-Invoice tab if your company is registered with LHDN — the buyer identification has to be right before submission, and fixing it afterwards means a cancellation.
Press SAVE, then FINAL.
BigLedger now runs every check at once and reports all the failures together. The ones you will meet in practice:
| What you see | What it means |
|---|---|
| “Not Enough Stock for item …” | There is no stock for that item at the line’s delivery location — the location the goods are delivered from, which may not be the location shown. If the shelf is full, look at Delivery Location in Main Details: a value left over from another branch is the usual cause, and re-picking the Branch and saving puts it right. For a real shortage, transfer stock in — do not switch the check off |
| “Customer is blacklisted due to credit limit / overdue credit term” | The customer’s blacklist flag is set. See the credit guide |
| Serial number quantity does not match | The serials on a line do not add up to its quantity |
| “The selected date falls within a locked fiscal period.” | Finance has locked that month. Change the date or ask them to reopen it |
When it passes, the invoice is FINAL and, a moment later, the posting job writes:
Dr Debtor — trade retail RM 53,424.00
Cr Sales — laptops, KV01 RM 50,400.00
Cr SST output tax RM 3,024.00and the stock processor takes twelve laptops out of GS-KV-01 at their moving-average cost. The invoice is queued for e-Invoice submission, the sales-contract, commission and membership-points processors run, and the order’s open quantity drops to zero.
There is no cost-of-sales line here, and that is by design. Cost of goods sold is written once a month by the Financial Report applet’s month-end processing — opening stock plus purchases less closing stock, into COGS against STOCK_BALANCE. Until then the Profit Loss Report works the margin out live from the sales lines.
A missing GL code never stops FINAL — and one kind never fails at all. An unmapped DEBTOR fails the posting job with MISSING_DEFAULT_GL_CODE: DEBTOR: the Posting tab shows no journal status while Inventory reads posted. Map the code in Chart of Account, then go to Financial Report > Error Checking > Trace Document, find the invoice under Missing Journal, and Resolve it.
An unmapped SALES or OUTPUT_TAX is worse: the job leaves that line out, builds the customer’s line from what is left, and the journal balances and posts. On a RM 106 invoice (RM 100 of goods, RM 6 SST) with no SALES code it posts debit trade debtors RM 6, credit output tax RM 6 — sales RM 100 short, and after the customer pays RM 106, trade debtors is RM 100 in credit. How you would notice: the receivable GL account stops agreeing with the debtor ageing; the customer statement and the ageing are built from documents and look right, and Trace Document finds nothing because a journal exists. Only a customer with no AR/AP type turns this into a failure (TOTAL_DEBITS_AND_TOTAL_CREDITS_NOT_BALANCES), and an invoice where nothing resolves fails with NO_JOURNAL_CREATED. Before go-live, check every sales, return and tax code has a company default (or every item its own), and read the journal of your first invoice after any chart-of-accounts change.
Step 6: Collect the balance
Finance > Receipt Voucher (Internal) > Internal RCT Voucher > Create
The outcome: the customer’s balance cleared and the money reconciled.
Thirty days later the customer pays RM 42,739.20 — the invoice less the deposit. Create a receipt voucher, pick the customer on Account, add a Settlement line for the amount and the method they used, then open Contra and tick the invoice.
That contra link is the part that matters. A receipt finalised without a contra is real money in the bank but an unapplied credit on the customer’s account — the invoice still shows as outstanding on the ageing report, and someone will chase a customer who has already paid.
Press FINAL. The cashbook line is created (this is what Bank Reconciliation matches against the statement), the journal posts Dr cashbook / Cr debtor, and the invoice’s open amount goes to zero.
What success looks like
Four checks, thirty seconds:
- Open the invoice’s Posting tab. Journal and Inventory both show as posted. (An empty Journal status with Inventory posted means the posting failed — usually an unmapped GL code, Step 5’s callout.)
- Stock Balance for the item at
GS-KV-01is twelve lower than it was this morning — and it moved at Step 5, not Step 4. - Open the order and look at SO Line with SI KO. The ordered quantity and the invoiced quantity are both 12, and nothing is left open.
- Open the customer’s Statement of Account. The invoice, the deposit and the final receipt are all there, and the balance is zero.
Common mistakes
Expecting the sales order to reduce stock. It reduces available stock — what you can still promise — not the stock balance. If you are reconciling a physical count against BigLedger, the number you want is the stock balance, and on the sales side it moves on invoices, cash bills and returns (and on a Sales GIN Stock Out, if an integration raises one) — never on an order. At a single location, a consignment Transfer Out to a customer moves it too.
Finalising the order and never sending it to the queue. Nothing reaches the Pick Pack Queue until Send To Queue, and nothing reaches the warehouse’s picking list or a delivery job until the second button after that (Create Delivery Job or Send To Warehouse Picking Queue). Symptom: a FINAL order, a customer asking where their laptops are, and an empty queue. Open the order’s Delivery Details and click Send To Queue.
Invoicing before the goods are picked. The invoice takes the stock out the moment it finalises. Invoice a week early and your system says the goods have gone while they are still on the shelf, which makes every stock report wrong until the goods actually leave.
Taking the deposit through the quotation’s Convert button and losing the quote. Convert creates the receipt voucher and then deletes the quotation. Take deposits on the order, or raise the receipt voucher directly.
Finalising a receipt voucher without contra-ing it to the invoice. The money is in the bank and the invoice is still outstanding. This is the single most common cause of “we chased a customer who had already paid.”
Turning off the stock-balance check to get an invoice out. The check exists because an invoice for stock you do not have gives you a negative balance and a cost of goods sold figure built on nothing. Transfer the stock, or invoice what you actually have and leave the rest open — that is what Partial Delivery is for.
Leaving orders open that will never ship. Every open FINAL order line holds available stock hostage. Use SO Line with SI KO to close the lines that are done with, so the availability figure means something.
Related documentation
- Sales Quotation (Internal), Sales Order (Internal), Sales Invoice (Internal), Receipt Voucher (Internal) — the applet references for each step
- Goods Delivery Note (Internal) — the delivery paperwork, which moves no stock
- SO Consolidation — one invoice for a month of orders, per customer
- Partial Delivery Workflow — when the order ships in pieces
- Credit Sales Workflow — selling on terms, and what credit control really does
- Delivery and Installation Scheduling — getting it to the customer’s door
- E-Invoice guides — what happens to the invoice after FINAL