Sales Workflow
“Do I have to raise a sales order before I can invoice?” No. Which documents a company uses is a decision about how it sells, and across BigLedger most companies invoice with no order in front of the invoice. What the system fixes is what each document does the moment it goes FINAL, and the names are a poor guide to it: a Sales GIN moves nothing, a Sales GIN Stock Out moves stock, a Sales Invoice No Stock Out posts the sale and moves none, and a credit note brings no goods back.
This page is the map of the folder for the person who decides which documents a company raises, and for the accounts person who answers for the numbers they produce. For each document it says whose screen it is and what FINAL writes into stock, the general ledger, the cashbook and the e-invoice queue; then when to pick which; then what to check. Each applet’s own page, listed below, carries its fields, settings and failure modes. The module view is Sales, and the till is Point of Sale.
What each document writes when it goes FINAL
Nothing happens on Save. FINAL is a separate call that queues one primary job processor, and that processor fans out to the secondaries that write stock lines, the journal, cashbook lines and the e-invoice queue, each in its own job and each a moment after the button. So a document can be FINAL with one of these missing, and nobody is told at the time.
| Document | Whose screen | Stock | General ledger | Cashbook | e-Invoice |
|---|---|---|---|---|---|
| Sales Inquiry | The sales desk, before there is a price; a sales agent is required on the form | Nothing | Nothing | Nothing. Convert turns its collection lines into a receipt voucher | No |
| Sales Quotation | Sales staff preparing quotes | Nothing, and not in available either | Nothing | Nothing on the quotation | No |
| Sales Order | Sales administrators | Nothing in the balance. Its un-invoiced balance lowers available, and a line can hold a reservation | Nothing | A deposit on its Settlement tab, where the tenant’s cashbook job runs for orders | No |
| Sales Proforma Invoice | Whoever quotes a job or asks for a deposit; its page names no role | Nothing | Nothing from its item lines. A Payment-tab line is signed as a payment and can post | — | No |
| Delivery Order | The office that raises deliveries for the warehouse and the driver | Nothing. The goods stay in stock until the invoice; the open lines count as committed stock and against the customer’s available credit | Nothing | Nothing | No |
| Sales Invoice | Sales administrators and accounts staff | Out | The receivable, against Sales and Output Tax. No cost line | One line per Payment-tab line | Queued |
| POS General cash bill | Cashiers; supervisors for sessions and the Z report | Out | The same as an invoice | The tender, one line per settlement line | Queued. Consolidated by branch or individual; RM 10,000 and above is always individual |
| Sales Invoice No Stock Out | Finance billing services and recharges. Not in the applet store; reached through the API | Nothing, whatever the caller sends | The same journal as an invoice | Settlement lines | Not an e-invoice type |
| Sales GIN Stock Out | Not in the applet store; reached through the API | Out | Journalled like a sale | — | Not an e-invoice type |
| Sales GIN, Sales GRN | Warehouse and sales operations, as a record | Nothing | Nothing | Nothing. A settlement row on a GRN is a record | No |
| Sales Return | Sales or customer service raise it, the warehouse receives against it, finance settles it | In | Your Sales Returns account, against the receivable | The refund on its Payment tab, which is what brings its balance to zero | Queued |
| Sales Refund Note | Its page names no role; in practice the desk that settles returns | In | Your Sales account, not Sales Returns | Refund lines on its Payment tab | Queued |
| Sales Credit Note | Accounts-receivable staff | Nothing | Sales and Output Tax reduced, against the receivable | A refund paid out on its Settlement tab | Queued |
| Sales Debit Note | Its page names no role; in practice the same desk as the credit note | Nothing | Sales and Output Tax raised, against the receivable | Settlement lines | Queued |
| Customer Consignment | Warehouse or store staff | Out of your location into the customer’s consignment location, and back | Nothing | Nothing | No. The sale is an ordinary Sales Invoice when the customer reports what sold |
| Consignment Billing | The buyer’s accounts-payable clerk. A purchase document filed in this folder | Nothing | Purchases against the supplier, and the consignment liability cleared | — | Not an e-invoice type |
The other applets in the folder write none of this themselves. Recurring Sales Invoice, SO Consolidation and JS Consolidation produce a draft Sales Invoice, and the posting happens when someone finalises it there. Job Sheet and Car Workshop record the work; the money taken on a job sheet is a record inside it, not a receipt voucher. Sales Commission counts FINAL orders, invoices and cash bills, pays through a payment voucher, and ignores credit and refund notes, so a returned sale keeps its commission. Sales Report, Sales Report Supplier Access and Daily Cashier Report read; Custom Processor queues FINAL documents for a system outside BigLedger.
Where the figures in that table come from
- The direction (in, out, nothing) is written by the server onto every line each time the document is saved, from the document type alone. No applet setting and no API caller changes it.
- The account a goods line posts to is the first found of: a GL code on the line, one on the
header, the item’s company GL link, the company default. Only a Sales Return line takes the
SALES_RETURNdefault; a Sales Refund Note line lands onSALES, so a returns analysis built on the Sales Returns account misses every refund note. - The receivable side comes from the customer’s AR/AP type, read from the customer record when
the journal is built, not from the snapshot the document keeps. A customer typed
AP_TRADE(a supplier you also sell to) has the sale posted against your creditors, netting what you owe them. - Cost of sales is on no sales document. The unit cost stored on a finalised line is written back by the costing job after the stock line exists, and a back-dated purchase rewrites it; the cost-of-sales journal is written once a period by the close, from the stock ledger.
- A cashbook line is one per settlement line on a FINAL document, written by the cashbook job. A settlement method with no cashbook, or a cashbook with no GL code, fails that job, not the save.
- The LHDN queue takes six sales types: invoice, cash bill, credit note, debit note, refund note and return. At FINAL the document’s Skip E-Invoice flag is resolved from the document, then its branch, then its customer, and the entry gate then needs the company ENABLED and the document not already queued. When any of that fails, nothing is written and no error is shown. The buyer on the e-invoice is the document’s own buyer block when one is filled, otherwise the customer snapshot the document took when it was raised. A sales invoice or cash bill of RM 10,000 or more is always submitted individually, whatever the company’s submission type.
Which document to raise
An order first, or straight to the invoice
The order is optional, and most companies skip it. What a FINAL order buys you: its un-invoiced
balance is taken off available in Stock Availability
so nobody promises the same unit twice, a line can hold a reservation, the invoice is raised by
knock-off rather than retyped (part now, part later, with the balance held on the order), and
SO Consolidation can bill a month of orders as one
invoice per customer. One condition sits under all of it: FINAL opens an order for knock-off and
availability only for the source-to-target pairs in the company’s Knock Off Configuration. With no
SO → Sales Invoice pair, the order is FINAL, the invoice’s KO For picker is empty, and available
is untouched.
Delivery order before the invoice, or after
Stock leaves on the invoice, whichever order you raise them in. A delivery order dated in March and invoiced in April leaves the goods in March’s closing stock and puts the sale and its cost in April — the worked example is on Inventory’s related applets. What the delivery order does carry is credit: its open lines count against the customer’s available credit and as committed stock. Few companies across BigLedger use it at all; the invoice is the delivery document for most.
Invoice or cash bill
The cash bill is an invoice settled on the spot, posting the same journal and the same stock-out plus the tender, raised at the till by a cashier rather than in the office. Retail does not make a walk-in open an account, so the sale goes to a generic cash customer and finalises there, and the applet offers no way to change the customer afterwards. When that customer comes back days later wanting an e-invoice in their company’s name, the cheap answer is to complete the e-invoice buyer block in My E-Invoice Admin while the bill is still waiting to be reported, or to let them key it in the buyer portal. The expensive answer, a return, a new invoice under the right account and a contra, is needed only when the account itself must change, and it is the only answer once the consolidated run has swept the bill in.
Taking goods back: return, refund note or credit note
“How do I take goods back — refund, credit note or exchange?” Three documents, three different things, and across BigLedger credit notes are raised in far more companies and far more often than sales returns, so a share of them are returns recorded on the wrong document.
| You need | Raise | Stock | Posts to | Money |
|---|---|---|---|---|
| Goods back, and the money or a credit | Sales Return | In | Sales Returns | The refund on its Payment tab, or a contra. With SALES_RETURN_WITH_PAYMENT on, FINAL waits until the return’s balance is zero |
| Goods back and cash back, booked against Sales | Sales Refund Note | In | Sales | Refund lines on its Payment tab |
| Money off, goods stay with the customer | Sales Credit Note | Nothing | Sales | Contra against open invoices, or a refund on its Settlement tab |
| You undercharged | Sales Debit Note | Nothing | Sales | Collected like an invoice |
The sales module’s reversal decision adds VOID for an invoice nothing has moved on yet. At a company enabled for e-invoicing, VOID is refused on a credit note and on a return; the correction is a further note, or a cancellation on the e-invoice side.
Billing without moving stock, and issuing without billing
Two document types do the halves separately: Sales Invoice No Stock Out posts the sale and holds every line at no stock movement, and Sales GIN Stock Out takes stock out and is journalled like a sale. Neither is in the applet store; both are reached through the API, and a GIN Stock Out and a Sales Invoice for the same goods not knocked off against each other take the stock out twice. A plain Sales GIN or Sales GRN is a record only. From a screen, a service fee or a recharge goes on an ordinary Sales Invoice with a service item: the sale posts and nothing moves. (A basic item with no inventory item is not the way to do it — it is given one the first time it posts, and then moves stock.)
A Saturday at GS-KV-03
A customer bought wireless earbuds for RM 399 on Wednesday, one side is dead, and she wants her money
back now. The counter raises a Sales Return against Wednesday’s cash bill and records RM 399 cash on
its Payment tab. Under the surface the goods lines are signed −1 and the refund line +1, so the return
opens at zero and FINAL is allowed; the stock job puts the pair back at GS-KV-03’s location, the
journal debits Sales Returns and Output Tax against the cash customer, the cashbook job writes RM 399 out
of the till’s cashbook, and the e-invoice gate queues the return against the original bill.
Had the cashier raised a Sales Credit Note instead, the ledger would be right and the shelf wrong:
the earbuds go back on display and the system still counts them as sold, so the next count at GS-KV-03
finds one pair more than it holds. Had she raised a Sales Refund Note, the stock and the cash would
match the return, and the RM 399 would land on Sales rather than Sales Returns, so the branch’s returns
figure would be short by one pair. All three finalise without complaint. The choice is the
counter’s, made before FINAL, and the supervisor’s check is the day’s credit notes against what went back
on the shelf.
When a sales number is wrong
| What you see | The usual cause | Check first | Fix |
|---|---|---|---|
| Every invoice finalises and none of them post | The company has no default GL code for the customer’s receivable account, usually the second or third company in a group | Financial Report Trace Document › Missing Journal › Resolve, which shows the reason | Map DEBTOR (or DEBTOR_NON_TRADE) in Chart of Account, then Resolve each invoice |
| A customer’s sales are missing from the debtor reports and sitting in creditors | The customer carries an AP type, on its record or on its Company Linking row for that company | The customer’s AR/AP type and the company row | Correct the type, then rebuild each posted document’s journal with Repost in Trace Document, agreed with whoever closed the month |
| Goods came back and the system still counts them as sold | The return went on a credit note | The credit notes for that item | Raise a Sales Return for the goods. Keep the credit note only if it was for money off |
| The returns figure on the Sales Returns account is short | Refund notes post to Sales | The period’s refund notes | None in the ledger. Read Sales Returns plus the refund notes, or code the refund note’s line GL to the returns account |
| The order still shows a quantity outstanding after it was invoiced in full | The outstanding figure is a stored row per downstream document type, and three ordinary things leave it high | The order still shows a quantity outstanding | As the guide says |
| The invoice’s KO For picker is empty, and the order is FINAL | No SO → Sales Invoice row in the company’s Knock Off Configuration | Organization › the company › Knock Off Config | Add the row. Orders finalised before it existed are re-queued from Data Fix › Generic Documents › Missing Open Queue (or by BigLedger support if you do not hold that applet) |
| Finalised, and nothing was submitted to LHDN | Usually queued and waiting for the scheduled run. Otherwise the entry gate dropped it: company not ENABLED at the time, Skip set on the document, branch or customer, or a type the gate does not take | Pools and routing; then the discrepancy report | A dropped document needs support to push it into the Posting Queue; enable the company before finalising |
| The salesperson field is greyed out on a FINAL invoice, and it used to be editable | The field is locked after FINAL unless ALLOW_EDIT_SALES_AGENT_FINAL is on for the tenant | The invoice applet’s settings | Ask the tenant administrator to turn it on. The posting does not read the field |
| The margin report and the profit and loss disagree | No sales document posts cost of sales, and a back-dated purchase rewrites the cost on earlier lines | The margin report and the P&L | Read the margin after the period close |
What these documents will not do
Each holds whichever applet raised the document and through the API. After each one, who does the job.
- No sales document writes a cost-of-sales line. The accountant runs the period close in Financial Report and reads the margin after it.
- A credit note brings nothing back into stock, and a delivery order takes nothing out. The counter raises a Sales Return for goods that came back; the accountant lists delivery orders dated in the period with no invoice and invoices or accrues them before the close.
- Nothing approves a sales document. The approval engine covers purchase orders, requisitions and stock requisitions only, and the FINAL validator asks no approval question. Control over an invoice is who holds the finalise permission, and the manager decides who that is.
- The credit limit is a check in the Sales Order and Sales Invoice screens, one company at a time. A cash bill, a delivery order and a document that arrives by API are not measured, and no figure adds up what a customer owes the group. The one server-side stop is the blacklist, on cash bills, invoices, orders and outbound delivery orders. Deciding credit is the credit controller’s job, with Deciding on Credit.
- A failed posting leaves the document FINAL. Stock, journal, cashbook and e-invoice are separate jobs, and a missing account or cashbook fails the job silently. The accountant runs the check below before each close.
- The invoice applet does not change the customer or the date after FINAL. The server keeps back-office routes a support engineer or an integration can call, and the invoice page says what each refuses. From the screen, the e-invoice buyer is completed on the e-invoice side, and the account changes by return, re-issue and contra.
- A reservation on an order outlives the order’s VOID. The void chain has no reservation step; whoever voids the order releases its reservations in Stock Reservation.
How you know the sales documents are right before the close
About ten minutes per company, before each close.
- Nothing is FINAL without a journal. In Ledger And Journal
Error Checking › Missing Journal, run the period for
INTERNAL_SALES_INVOICE,INTERNAL_SALES_CASHBILL,INTERNAL_SALES_CREDIT_NOTE,INTERNAL_SALES_DEBIT_NOTE,INTERNAL_SALES_RETURNandINTERNAL_SALES_REFUND_NOTE. You are done when each list is empty. - Every refund reached the cashbook. For each sales return and credit note with a refund line, run Trace Document’s Missing Cashbook. You are done when none reports a missing line.
- Returns are on return documents. List the period’s credit notes; for each one where goods came back there is a Sales Return or Refund Note for the same goods. You are done when every returned item has one.
- Every e-invoiceable sale is in the pipeline. Run the discrepancy report for the period and read Exists in ERP, Missing in E-invoice. A document you skipped on purpose appears here too, so you are done when every row is one you can name as skipped. Foreign-currency documents are not examined by this report, so list them separately.