Skip to content
Coming from a system that posted cost on every sale

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 saleBigLedger
The sale’s journalDr receivable 4,452 / Cr sales 4,200 / Cr SST 252, and Dr cost of sales 3,100 / Cr stock 3,100Dr DEBTOR-TRADE-RETAIL 4,452 / Cr SALES-LAPTOP 4,200 / Cr LIAB-SST-OUTPUT 252. Nothing else
The sale’s costOn the journalWritten onto the invoice line, so the margin report shows gross profit at once
Cost of sales in the ledgerGrows with every saleArrives in one journal at month end
The stock accountFalls with every saleMoves 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 thisNow
Posted cost of sales with each saleRun 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-datedProcess 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 recordsTie 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 ownedKnow 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 stockKeep 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) uploadA Stock Adjustment, Adjust-In
What it isThe route the opening stock upload walks through: one invoice per branch from a one-time supplier, dated the cut-offOne adjustment per location, keyed or imported, dated the cut-off
What it postsDr Purchase / Cr the one-time supplier, RM 9,600,000Dr the stock account / Cr the stock adjustment account, RM 9,600,000
What the first close does with itDecember’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,000December’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 afterwardsA 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 hasA RM 9,600,000 credit on the stock adjustment account. Your opening-balance journal must clear it
Where it can go wrongA leftover amount column overrides quantity × cost without any errorAn 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 numbersCarried in on the invoice lineListed on each line
Needs the cut-off month processedYes. 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 itNo. 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

Last updated on