This month's cost of sales looks wrong
“March’s cost of sales makes no sense against March’s sales.” Sales were up 3% on February, and gross margin jumped from 24% to 37%. Nobody changed a price. Before anyone re-runs anything, find out which part of the figure moved.
This page is for the accountant or finance manager who has to explain the month, and for the support colleague helping them. BigLedger works out the month’s cost of sales once, when the month is closed, from six figures, and a sale posts no cost of its own. So the question is never “which sale is wrong”. It is which of the six figures moved, and was it meant to. Allow 20 minutes. You need last month’s figures beside this month’s, because a month read on its own hides the term that moved.
The 30-second check
Ledger And Journal, the journals dated the last day of each month
- Find this month’s cost-of-sales journal. It is described AUTO CREATED FROM COGS PROCESSING and dated the last day of the month, one per ledger. If it is not there, month-end wrote no cost of sales. The usual reason is a missing Cost of goods sold or Stock balance default GL code, and the run reports success anyway: see the first row of Six other ways the two figures part company.
- Read its created date. That is when month-end last ran. Anything dated in the month and keyed after it is not in the figure. Process the month again, then every later closed month in order (If something lands in March after you have closed).
- Put it beside last month’s journal, line by line. Each journal has up to four lines: cost of goods sold, the stock account, Purchase and Purchase Return. The line that moved by more than sales did is the one to chase.
For GadgetSphere Sdn Bhd (GS), March’s journal was created on 5 April, after the last March document was keyed. Here are the two journals side by side:
| Line | February | March |
|---|---|---|
Dr COST-DEFAULT (cost of goods sold) | 4,440,000 | 3,795,000 |
Dr EXPENSE-PURCHASE-RETURN | 80,000 | 60,000 |
Dr INV-STOCK-CONTROL (the stock account) | 180,000 | 965,000 |
Cr EXPENSE-PURCHASES | 4,700,000 | 4,820,000 |
Purchases moved by 2.6%, in line with sales. The stock line went from RM 180,000 to RM 965,000. Stock is the term to chase.
Rebuild the six figures
The journal is built from six figures. BigLedger stores them with the journal, but we know of no screen that shows them. So you rebuild them, and you need to, because the stock line is four of them netted together: opening stock − closing stock + adjustments + Reset MA. How the six add up to cost of sales, and why adjustments are counted this way, is on When cost of goods sold reaches the ledger.
| Figure | Where to read it | February | March |
|---|---|---|---|
| Purchases | The journal’s credit to the company’s default Purchase account | 4,700,000 | 4,820,000 |
| Purchase returns | The journal’s debit to the default Purchase Return account, as a negative figure | −80,000 | −60,000 |
| Opening stock | The same read as closing stock, at the last day of last month; or last month’s manual closing value, if one is selected and not zero | 9,600,000 | 9,750,000 |
| Closing stock | Historical Stock Balance for the company: every location, no item filter, Date As the last day, Calculate Base On the same as the company’s Inventory Closing Base On | 9,750,000 | 10,690,000 |
| Adjustments and Reset MA | What the month’s stock adjustments and Reset MA journals posted to the stock account (a write-off is negative) | −30,000 | −25,000 |
| Cost of sales | The sum, which should equal the journal’s cost-of-goods-sold line | 4,440,000 | 3,795,000 |
Check your rebuild against the stock line before you trust it. For March: 9,750,000 − 10,690,000 − 25,000 = −965,000, a debit of RM 965,000 to the stock account, as the journal shows. If your figures do not reproduce the journal’s stock line, a document changed the stock ledger after the close ran, or someone changed a manual closing value. Historical Stock Balance and the close also read slightly different ledger lines; the six conditions under which they agree are in Stock report versus the stock account.
Now compare term by term. February’s closing stock rose RM 150,000 over its opening; March’s rose RM 940,000, while sales moved 3%. So the figure to explain is the RM 940,000 rise in closing stock. Closing stock is every unit the company’s stock ledger holds at every location at the moment the close runs. It does not check whether the business owns those units or has been billed for them.
Find what moved
Each row starts from what you see when you compare the months.
| What you see | Cause | What to do |
|---|---|---|
| Cost of sales low this month and high next month, by about the same amount; closing stock up | Goods arrived on a GRN Stock In near the month end and the supplier’s invoice is dated next month. The receipt puts them into the stock ledger and onto your inventory-not-invoiced account, never the Purchase account. Only the invoice reaches Purchase. So this month’s closing stock holds them and this month’s purchases do not | See The goods you received but were not billed for, below |
| Cost of sales low, and the stock account high, while a supplier’s consigned goods sit on your shelf unbilled; then high in the month the consignment billing posts | The consignment GRN puts the principal’s goods into your stock ledger, and the close counts every unit in it. Consigned goods reach Purchase only when you raise the consignment billing. They are also on your consignment stock account, so the balance sheet carries them twice | BigLedger does not yet take consigned goods out of closing stock. A fix is planned. The size of the effect is roughly the consigned goods you still hold, unbilled, at the month end |
| Cost of sales low in one month and never comes back | Stock arrived with no purchase or stock adjustment beside it. One case seen in practice is opening stock whose purchase document was removed while the stock stayed. The value stays in the stock account with no document behind it | Find the document that brought the stock in and repair it, then process that month and every later one again. If you cannot find one, send the item to BigLedger support. Coming from a system that posted cost on every sale sets out both ways to bring opening stock in |
| Cost of sales short by one supplier invoice, often a foreign-currency one | The invoice moved stock, but its journal did not post, so nothing reached Purchase | The second row of Six other ways: find it, write its journal with Trace Document’s Resolve, process the month again |
| Purchases look short, although the invoices posted | The invoices went to an item’s or a line’s own GL code. Month-end counts only the default Purchase and Purchase Return accounts | Purchases on their own GL code |
| Purchases fell in a month you sent consigned goods back on a Consignment GIN | If your company posts journals for the GIN, it credits the default Purchase account with the GIN’s amount, unless a line or item GL code overrides it, although the goods were never a purchase | Consignment: Settle and Return, Step 6 |
| Cost of sales moved by a round figure that matches no document | A manual closing stock value for this month, or for last month, which becomes this month’s opening | The last row of Six other ways: see who keyed it and why |
| The figure changed after you printed it, or differs from what you reported | Someone processed the month again after a back-dated document, and every run replaces the journal | Process every later closed month again too, in order, and re-issue what you reported |
GadgetSphere’s RM 940,000, taken apart
GadgetSphere’s RM 940,000 breaks down like this. RM 612,000 is flagship smartphones received on GRN Stock In on 30 and 31 March, with the distributor’s invoices dated 2 April. RM 186,000 is a principal’s wireless-audio stock held on consignment and not yet billed. The other RM 142,000 is ordinary stock growth ahead of a promotion. Without the first two, March’s cost of sales would be about RM 4,593,000 and gross margin about 24%, in line with February.
The goods you received but were not billed for
This one reverses by itself, provided each supplier invoice is keyed as a Purchase Invoice No Stock In linked to its receipt. An ordinary Purchase Invoice brings the goods into stock a second time. In April the invoices arrive, April’s purchases include RM 612,000 for goods already in March’s closing stock, and April’s cost of sales comes out RM 612,000 high. Over March and April together the figure is about right. Neither month is right on its own.
Decide which month matters more, and write the decision down. Two choices:
Accept the swing. If you report quarterly, or the board reads two months together, leave both months as BigLedger works them out. Note the timing item on March’s close, with the list of open receipts behind it, so whoever reads April knows why it is high. Until April, March’s balance sheet carries those goods twice: on the inventory-not-invoiced account and in the stock account.
Make March stand on its own. Key March’s closing stock as a manual value: the calculated closing stock less the goods received and not invoiced on the last day, valued on the same cost basis. For GadgetSphere that is 10,690,000 − 612,000 = RM 10,078,000. Then process March again. The same value becomes April’s opening stock, so April is not doubled. Your inventory-not-invoiced account still carries those goods, which is where they belong until the invoice arrives.
The value goes on Chart of Account › the company › Fiscal Year › FY 2026 › Closing Stock Balance › Inventory, in March’s Stock Value (Manual), with Select Manual ticked. If clicking the year opens nothing, the company’s Closing Stock Balance toggles are off; the Chart of Account page names them.
If you key the manual value, three things matter:
- A manual value of zero is ignored. The calculated figure stands.
- The manual value replaces the whole closing figure. Key it after every March document is in, and work it out again every time you process March again.
- Expect a gap in your tie-out. If the stock account tied to Historical Stock Balance before, it will then sit below it by the received-not-invoiced value. That gap is the point. Check it against the inventory-not-invoiced account’s balance at 31 March. The two differ when tax was keyed on a receipt, or an invoice came in at a different price from the receipt; the Purchase Invoice No Stock In page explains both.
BigLedger’s own design for the close takes received-not-invoiced goods, and unbilled consigned goods, out of closing stock by itself. That part is planned and not built. Until it ships, the manual value is the only way to make a month stand on its own for received goods. For consigned goods, this page names the problem and gives no workaround yet.
What success looks like
Your six rebuilt figures reproduce this month’s journal line for line. Every figure that moved more than sales did has a named cause. Each cause is either accepted as timing and noted on the close, or fixed at its source with the month processed again, followed by every later closed month. Gross margin, after the timing items you noted, sits where trade explains it. For GadgetSphere that is about 24% in both months once you note RM 612,000 of timing and RM 186,000 of consigned goods against March, or about 27% in the ledger if you keyed the manual value for the received goods.
When it is a support matter
When the six figures reproduce the journal and you still cannot say why one moved, send BigLedger support:
- the company, the Set of Books and the month
- your six figures for this month and last month
- the journal’s created date
- the documents you suspect, with their dates and their created dates
What this page cannot tell you
- Cost of sales by branch. The journal is written for the company, with no branch on it, so this rebuild works at company level. For a branch-level view of margin, start from The margin report and the profit and loss don’t agree.
- Raw material, work in progress, finished goods and non-stock closing values. Each posts its own small journal against its own pair of accounts, outside the six figures.
- Whether a Reset MA moves closing stock when you close on FIFO. We have not traced that yet, so treat a large Reset MA figure in a FIFO month as a question for support.
Related documentation
- When cost of goods sold reaches the ledger: the formula, and what it cannot see
- Month-End: Run Month End Processing, Build the Statements and Lock the Period: the checks before and after you process a month
- Coming from a system that posted cost on every sale: why a sale posts no cost, and what replaced it
- Cut off, close and lock the month on stock: stock you hold that is not yours
- The margin report and the profit and loss don’t agree: when the line cost and the ledger disagree for the same month
- When two numbers don’t tally: every other pair of figures that should agree