Month-End Closing Process
This is the short version: the order to do things in when you close a month, and what breaks if you do them in a different order. Each stage links to the guide that walks it through properly. By the end you will have a Trial Balance that balances, a Profit and Loss and Balance Sheet you can send to your accountant, and a locked period nobody can quietly post into. Budget most of a working day for your first close and about two hours once the rhythm is established.
Meet GadgetSphere
GadgetSphere Sdn Bhd sells consumer electronics from 22 branches, with two sister companies —
GadgetSphere Online (GSO) and GadgetSphere Distribution (GSD). That means three Sets of Books,
and month-end runs once per Set of Books, not once for the group. You are closing March 2026. Your
external accountant wants the three statements by the 10th.
Before you start
- Every Set of Books has at least one ledger linked to it. One with no ledger fails with Set of Books is missing primary ledger configuration.
- Every GL Category is linked to a Report Section. A category without that link makes its GL Codes vanish from every statement and from month-end itself, silently.
- You can open the Financial Report applet with
CREATE(or OWNER / ADMIN) rights — creating and re-running a month-end record needs more than read access.
Stage 1: Finish the month’s documents
Sales, Purchasing, Finance applets — the document listings
Everything dated in March has to reach FINAL. A saved document is not a posted document: BigLedger queues the journal when a document is finalised, not when it is saved, and a background job writes it a few seconds later. Walk the listings for sales invoices, credit notes, purchase invoices, receipt vouchers and payment vouchers and clear anything still sitting in DRAFT with a March date.
The common failure here is a document that was finalised but whose posting job then failed, so the journal never got written — usually a missing default GL code on the item or the company. The document still says FINAL, which is why nobody notices. You will catch those in Stage 4; you do not have to hunt for them now.
Stage 2: Reconcile every cashbook
Finance > Bank Reconciliation applet
Twenty-eight cashbooks is a lot of reconciling, so start this early — it is the stage most likely to find a real error rather than a formatting one. Upload each March bank statement, run auto-matching, confirm or reject what it proposes, then work through whatever is left over.
Do not clear what is left with a journal. A manual journal to the bank account moves the ledger but writes no cashbook line, and the reconciliation reads cashbook lines only. The variance stays open even when the journal itself is correct. Money the bank moved that you never recorded (charges, interest, a customer paying straight in) needs a voucher. A receipt or payment voucher writes the cashbook line the reconciliation can match.
→ Bank Reconciliation Guide walks one cashbook through end to end, including what the session’s sign-off status does and does not lock.
Stage 3: Post the adjusting journals
Finance > Ledger and Journal applet
Accruals for costs you have incurred but not been invoiced for, prepayments for the reverse, depreciation, and any corrections the reconciliation threw up. Date them inside March. If last month’s depreciation journal is the same shape as this month’s, clone it rather than retyping it.
→ Journal Entries Guide covers the header, the lines, branch tagging, cloning and how to reverse one you got wrong.
Stage 4: Check nothing is stuck
Finance > Financial Report applet > Error Checking
Two diagnostics, five minutes, and they save the embarrassing version of this process where the statements are wrong and nobody notices until the accountant does.
Trace Document tells you why a given document did or did not post. Missing Journal on a FINAL document means the journal was never created — usually a missing GL code on the item, and the message names it. Fix the mapping, then click Resolve (or Repost if the document is already posted). Repost deletes the old journal before it builds the new one and says nothing if it fails, so check the document’s Journal Txn grid afterwards; if it is empty, Resolve on Missing Journal posts it or shows why it cannot. Missing Shadow Document on a foreign-currency document means its company-currency copy was never made; Resolve creates and finalises it.
Stock Flow Report compares finalised document amounts with the journal lines on each module’s
account. It does not read stock value or the stock account. A Difference is
one of three things: MISSING_ACCOUNTING (a document, no journal), MISSING_INVENTORY (a journal, no
matching document line) or WRONG_AMOUNT (both, disagreeing). Select the rows and click CREATE to post
the missing side. A row that comes back with a server error needs its default GL code fixed first.
Stage 5: Run Month End Processing — once per Set of Books
Finance > Financial Report applet > Month End Processing > Create
Pick the Set of Books, the year (2026) and the month (March), and click Create. Repeat for GSO
and GSD. Before the close proper, the same click runs two processors that have no button of their
own: a cost-of-goods-sold journal (opening stock + purchases − purchase returns, plus the month’s stock adjustments and moving-average resets, − closing stock,
debit cost of goods sold, credit stock) if the company has COGS and STOCK_BALANCE default GL
codes, and a retained-earnings journal moving the month’s result if it has PROFIT_LOSS and
RETAINED_EARNING (for a profit it debits the profit-and-loss account and credits retained earnings;
a loss goes the other way). Neither complains when the defaults are missing — it simply writes nothing, and
the cost-of-sales line on the statements stays at zero. Then, for each ledger in the Set of Books,
BigLedger writes three things: a closing-day journal dated 31 March that reverses each account’s
net movement for the month, an opening-day journal dated 1 April that re-opens the balance-sheet
accounts only, and one summary row per account holding the month’s net movement and its opening
and closing amounts. Those summary rows are what every statement is built from.
Check every run, because the screen says success even when the close failed. Three things stop
the closing or opening journal being written, and none of them shows a message. A ledger with no
journal lines at all in March has nothing to close. A GL Category with no Report Section link leaves
those journals unbalanced. So does a company with no PROFIT_LOSS / RETAINED_EARNING default GL
code. Since July 2026 an unbalanced journal is refused. In every case the record is created and the
screen reports success. After each run, open Ledger And Journal and, for each ledger of the Set of
Books, find the two journals described AUTO CREATED FROM MONTH END PROCESSING: one dated 31 March
and one dated 1 April. If both are there, the month is closed. If either is missing, fix the cause and
run it again.
To re-run a month you have already closed, open the record, go to the Processor tab and click PROCESS. It deletes what it wrote last time and rebuilds it, which is how a back-dated posting gets picked up. Months chain to each other. Each month’s close starts from the opening journal the month before wrote on the 1st. So re-processing February changes March’s starting point, and March’s figures stay stale until you PROCESS March too. Always PROCESS the month that changed and then every later closed month, in order. For the same reason, the first month you ever close must be the first month your books have entries in. Close forward from there, one month at a time, or every balance from before your first close is missing from the chain.
Stage 6: Build the statements
Finance > Financial Report applet > Financial Report
Create a snapshot for each Set of Books over the range you need — March alone for the monthly pack, January to March for the quarter. The snapshot freezes the Trial Balance, Profit and Loss, Balance Sheet and MITRS views at the moment you create it. REGENERATE rebuilds its lines from the current summary rows while keeping the header.
→ Financial Reporting Guide reads each statement in turn and exports the pack.
Stage 7: Lock March
Master Data > Chart of Account applet > Fiscal Year > FY 2026 > Fiscal Period tab
Set March 2026 to the status that matches how settled you are:
LOCK_GL— nobody can post a manual journal into March, but automatic journals from documents still post. Use this while you are waiting on one straggler.LOCK_TXN— no operational document can be finalised with a March date (stock transfers are the one exception). This is the usual month-end lock. Note that it checks the date at FINAL only: a manual journal can still be cloned or updated into aLOCK_GLmonth, because that check runs on create alone.LOCK_ALL— both. Save this for after the audit sign-off; it is the hard close.
Be aware of what the lock is and is not. Anyone who can open the Chart of Account applet can set a
period back to OPEN, and there is no approval on it. The control is who has the applet, not the
status.
If something lands in March after you have closed
It happens — a late supplier invoice, a correction. The order is fixed and doing it in the other order leaves you with statements that quietly disagree with the ledger:
- Set March back to
OPEN, post the document or journal, finalise it. - PROCESS the March Month End Processing record again, for the affected Set of Books. If you have already closed April or later, PROCESS each of those too, in order, earliest first, and check each run as in Stage 5.
- REGENERATE every Financial Report snapshot whose range includes March.
- Re-lock March.
What success looks like
Thirty seconds, in the Financial Report applet. Open the March snapshot for GadgetSphere Sdn Bhd and
look at the Trial Balance tab: it has rows, and total debits equal total credits. Switch to the
Balance Sheet: total assets equal liabilities plus equity. In Ledger And Journal, each ledger has
its two AUTO CREATED FROM MONTH END PROCESSING journals for March. Then open Chart of Account > Fiscal Year >
FY 2026 > Fiscal Period and confirm March shows the lock status you set. Three Sets of Books, so do
it three times — and if GSD looks fine but GSO is empty, you closed two of the three.
Common mistakes
| What you see | Why | Fix |
|---|---|---|
| The Trial Balance is empty even though you can see balances on individual accounts | Month End Processing was never run for the months in the snapshot’s range — the snapshot reads summary rows, not journals | Run Month End Processing for each month in the range, for that Set of Books, then REGENERATE the snapshot |
| Month-end fails with Set of Books is missing primary ledger configuration. | The Set of Books has no ledger line | Chart of Account > Set Of Books > Ledgers > Add the primary ledger, save, run again |
| A whole group of accounts is missing from the Profit and Loss | Their GL Category is not linked to a Report Section, so month-end never saw them | Chart of Account > GL Category > GL Section tab, link the category, then PROCESS the month again and every later closed month in order, and REGENERATE |
| Cost of goods sold is zero on the snapshot although the month had sales | The cost-of-goods-sold processor inside Month End Processing found no COGS or STOCK_BALANCE default GL code on the company and wrote nothing, silently | Map both defaults in Chart of Account > Company > Default GL Codes, PROCESS the month again, REGENERATE |
| Cost of goods sold is too low, and the margin report and the Profit and Loss disagree | Some purchases were posted to an item’s or a line’s own GL code. Month-end counts purchases only on the company’s default Purchase and Purchase Return codes: one purchases account per company is a setup rule. The size of the P&L’s gap then depends on that account’s GL category and report section | Post all purchases to the default Purchase code, PROCESS the month again, REGENERATE |
| The statements do not reflect a correction you posted yesterday | The snapshot was frozen before the posting, and a snapshot is not live | PROCESS the month again, then every later closed month in order, then REGENERATE the snapshot. REGENERATE alone is not enough |
| Month End Processing said success, but a statement is empty, short or does not balance for that month | The closing or opening journal was not written, and the screen was not told: a ledger with no entries in the month, a GL Category with no Report Section link, or no PROFIT_LOSS / RETAINED_EARNING default GL code on the company | Look in Ledger And Journal for the two AUTO CREATED FROM MONTH END PROCESSING journals per ledger. Fix the cause, PROCESS the month and every later closed month in order, then REGENERATE. A ledger with nothing at all in the month cannot be closed. Take it out of the Set of Books, or post the month’s entries first |
| April’s Balance Sheet is wrong although April was processed after the fix | The fix went into March, and March was re-processed, but April’s close still starts from March’s old opening journal | PROCESS April again, then every later closed month, in order, then REGENERATE |
| The books reopen after you thought they were closed | A period status can be set back to OPEN by anyone who can open the Chart of Account applet, with no approval step | Restrict who has the applet. The lock is a signal, not a control |