Skip to content
Standard Sales Workflow

Standard Sales Workflow

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"]
  PP --> 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: only the Sales Invoice 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 same twelve laptops cannot be promised twice. 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 mappedSALES, DEBTOR and OUTPUT_TAX for the invoice, and COGS and STOCK_BALANCE for the month-end cost-of-sales journal. GadgetSphere uses SALES-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.

Taking a deposit at the quotation stage? The quotation has a Collection tab for exactly that, and a Convert button that turns those collection lines into a Receipt Voucher. Be aware that Convert deletes the quotation when it creates the voucher. If you want to keep the quote on file, take the deposit against the sales order instead (Step 3).

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.

Sales Order Main Details showing the branch dropdown, delivery location and transaction date
Main Details: branch, delivery location and transaction date. Branch and location decide where the stock will eventually leave from.

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.

There is no document approval step here, and there is no credit-limit block. BigLedger’s approval engine covers Purchase Orders, Purchase Requisitions and Stock Requisitions only. The order applet’s Approval menu is for sell-below-minimum-price line approvals and does not gate FINAL. And a credit limit on the customer record does not stop this order, however large it is. The only thing that can refuse a FINAL on credit grounds is a blacklist flag, which is set separately. See Credit Sales Workflow for how to live with that.

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 records what the customer paid and against which order. The money reaches the ledger through a receipt voucher — the order’s Receipt Voucher tab is where the vouchers linked to this order appear, and it is the voucher’s FINAL that writes the cashbook line you will later match in Bank Reconciliation.

Remember that the sales order itself posts nothing: its amount signum is zero, so no journal comes from the order however much money you record against it. The voucher is what posts.

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.

Nothing in this step changes your stock balance. Picking is a physical activity that BigLedger is helping you organise; the stock figure does not move until Step 5. If you need a signed piece of paper for the customer to accept the goods, raise a Goods Delivery Note (Internal) — it knocks off the order’s open lines and prints beautifully, and it also moves no stock.

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.

Sales Invoice KO For tab searching for a source Sales Order
KO For: the same tab knocks off a quotation, order, delivery order, jobsheet, stock transfer or another invoice.

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 seeWhat it means
“Not Enough Stock for item …”There is no stock for that item at the line’s location. Transfer stock in or change the location — 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 matchThe 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.00

and 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 — it fails the posting job afterwards. The invoice sits on the listing as FINAL with no journal behind it. An unmapped DEBTOR fails the job with MISSING_DEFAULT_GL_CODE: DEBTOR; an unmapped SALES or OUTPUT_TAX makes the job drop that line and fail with TOTAL_DEBITS_AND_TOTAL_CREDITS_NOT_BALANCES (or NO_JOURNAL_CREATED when nothing survives). Either way the Posting tab shows Journal as failed while Inventory has 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. Check the Posting tab 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:

  1. Open the invoice’s Posting tab. Journal and Inventory both show as posted. (Journal failed with Inventory posted means a GL code is unmapped — Step 5’s callout.)
  2. Stock Balance for the item at GS-KV-01 is twelve lower than it was this morning — and it moved at Step 5, not Step 4.
  3. 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.
  4. 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 it only moves on invoices, cash bills and returns.

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

Last updated on