Coming from a system that posted cost on every sale
“I finalised a sales invoice and its journal has no cost-of-sales line. And the stock account hasn’t moved since the 1st.” If your last system posted the cost of every sale as it happened, both look like a fault. In BigLedger they are how the ledger is meant to work. Cost of sales reaches the ledger once a month, when the month is closed, and the stock account moves with it.
This page is for the finance team, and the implementer, in the first months after moving from a system like that. In ten minutes you will know what replaced the per-sale cost line, why it was built this way, which checks the old system did for you that are now yours, and two ways to bring opening stock across.
One sale, under each design
GadgetSphere sells an ultraportable laptop for RM 4,200 plus RM 252 SST. Its average cost is RM 3,100.
| A system that posts cost on every sale | BigLedger | |
|---|---|---|
| The sale’s journal | Dr receivable 4,452 / Cr sales 4,200 / Cr SST 252, and Dr cost of sales 3,100 / Cr stock 3,100 | Dr DEBTOR-TRADE-RETAIL 4,452 / Cr SALES-LAPTOP 4,200 / Cr LIAB-SST-OUTPUT 252. Nothing else |
| The sale’s cost | On the journal | Written onto the invoice line, so the margin report shows gross profit at once |
| Cost of sales in the ledger | Grows with every sale | Arrives in one journal at month end |
| The stock account | Falls with every sale | Moves once a month, by the change in closing stock, plus any stock adjustments keyed in between |
Nothing has failed on the BigLedger side. The sale’s cost exists. It is on the line, not in the ledger, and a back-dated purchase can still rewrite it. The ledger’s cost of sales is worked out at month end, for the whole month at once, from the month’s opening stock, purchases and closing stock. The formula, and what it cannot see, are on the Financial Accounting core concepts page.
Why it was built this way
BigLedger’s own posting design has the sale post receivable and sales only, and works out closing stock at month end. That is a choice, and it buys something a multi-branch business needs.
GadgetSphere receives goods at 22 branches, keys some supplier invoices days after the goods were sold, and dates some of them back. Under per-sale costing, every back-dated purchase would have to rewrite the cost on every later sale’s journal, including journals in a month already reported, or post a correction somewhere else. Under BigLedger’s design, posted journals stay where they are. The cost written on each sales line does move, so the margin report always shows today’s best figure. The ledger’s figure is settled in one place, at month end, where a person can check it. Which figures BigLedger stores, and which it works out fresh explains the same kind of trade wherever else BigLedger makes it.
The price of the trade is work at month end that the old system did for you without asking.
What is now your job
| The old system did this | Now |
|---|---|
| Posted cost of sales with each sale | Run Month End Processing for every month, in order. Nothing runs it on a schedule. A month with no close has no cost of sales in the ledger |
| Corrected a later sale’s cost when a purchase was back-dated | Process the month again, and every later closed month, after anything is dated back into it. A run replaces that month’s journal. A closed month does not update itself |
| Kept the stock account equal to the stock records | Tie the stock account to the stock report after each close. The close moves the account by the month’s change in closing stock. It never resets it, so a difference that gets in stays in (the tie-out) |
| Took cost out of stock only for goods you owned | Know which stock you hold and do not own, or have received and not been billed for. The close counts every unit in the stock ledger (what the formula cannot see) |
| Booked every purchase to stock | Keep every purchase on the company’s default Purchase account. Month-end counts only that account and Purchase Return |
The checks to run before and after each close are on Month-End: Run Month End Processing.
What will not happen, whatever you set:
- No setting makes a sale post its cost.
- Nothing closes a month for you.
- Nothing re-closes a month after a document is dated back into it.
Reading the books in the middle of the month
On 15 March GadgetSphere’s stock account still shows RM 9,750,000, the closing stock of February. Every purchase since the 1st sits on EXPENSE-PURCHASES, and no cost of sales for March has reached the ledger. Until March is processed, the stock account shows February’s closing stock plus only what stock adjustments, Reset MA and anything coded directly to it have posted since.
For a mid-month gross margin, use figures built from the cost on each sales line: the margin report, or the Inventory Cost row of the Financial Report applet’s live Profit Loss Report. Use the ledger’s cost of sales only once the month is processed. The margin report and the profit and loss don’t agree explains why the two can differ even then.
Bring opening stock across in one of two ways
At go-live the stock ledger needs your opening quantities and their cost, and the ledger needs their value. Either of two routes does it. Choose one per company, before go-live, and write down which. GadgetSphere’s count on 31 December 2025 came to RM 9,600,000.
| A Purchase Invoice (Internal) upload | A Stock Adjustment, Adjust-In | |
|---|---|---|
| What it is | The route the opening stock upload walks through: one invoice per branch from a one-time supplier, dated the cut-off | One adjustment per location, keyed or imported, dated the cut-off |
| What it posts | Dr Purchase / Cr the one-time supplier, RM 9,600,000 | Dr the stock account / Cr the stock adjustment account, RM 9,600,000 |
| What the first close does with it | December’s purchases and December’s closing stock both include RM 9,600,000. Cost of sales is unaffected, and the close moves the stock account up by RM 9,600,000 | December’s closing stock includes it and the adjustment term takes it back out. Cost of sales is unaffected, and the stock account already holds it |
| What you must clear afterwards | A RM 9,600,000 credit on the creditor control account, and the invoice itself stays open against the one-time supplier in the Creditor Report: a journal clears the account, not the document. The opening-balance journal must not debit the stock account again, because the first close already has | A RM 9,600,000 credit on the stock adjustment account. Your opening-balance journal must clear it |
| Where it can go wrong | A leftover amount column overrides quantity × cost without any error | An Adjust-In keyed at 0.00 dilutes the item’s cost. On a file import, COST_PRICE is what the moving average absorbs and STL_AMOUNT is what the journal posts. Fill both with the same line total; if they differ, the ledger and the moving average disagree |
| Serial numbers | Carried in on the invoice line | Listed on each line |
| Needs the cut-off month processed | Yes. Only December’s close moves the value into the stock account. If your first close is January, January’s opening already holds it and the stock account never receives it | No. The adjustment posts to the stock account itself |
Leave stock out of the opening-balance journal on either route. The cash and ledger step of the migration guide still lists inventory control among the accounts to debit; on either route above, that would put the stock into the account twice.
Either way, check the first close. After December is processed, the stock account should equal Historical Stock Balance at 31 December, on the close’s basis, exactly once. If it is double, the opening-balance journal also debited stock.
Never remove the document while its stock stays. Stock that arrives with no purchase or adjustment beside it lowers cost of sales in the month it lands, and its value stays in the stock account with no document behind it. To correct opening stock, raise a further adjustment, or reverse both the stock and its posting.
When a month looks wrong
A month after go-live that looks wrong usually comes from one of the old habits above. Start from This month’s cost of sales looks wrong: it rebuilds the month’s six figures and compares them with last month’s.
Read next
- When cost of goods sold reaches the ledger: the formula, and what it cannot see
- Month-End: Run Month End Processing: the close, and the checks before and after it
- Opening Balance Migration Guide: the order the five kinds of opening balance come across in
- Cost of sales worked out at month end: the same mechanism from the stock side, worked through