Opening Balances in BC — Done Right : A practical guide for consultants who’ve been burnt by a client saying “just upload the trial balance.”

Every BC go-live reaches the same moment: the client hands you a trial balance and says “can we just upload this?” Here’s everything you need to know about why that’s not quite right — and how to do it properly.

Opening balances are one of those things that look straightforward on the surface but have a dozen ways to go wrong. Get them right and nobody notices. Get them wrong and you’ll be untangling reconciliation issues months after go-live. This post walks through each area — customers, vendors, bank, fixed assets, and G/L — and ties it all together with the suspense account approach that makes the whole thing clean and auditable. (Not talking about inventory in this post. Probably a separate post for that.)

Start Here: The Suspense Account

Before you touch a single journal, create one G/L account that will do the heavy lifting throughout the entire opening balance upload. Call it Opening Balance Suspense and give it a code that screams “temporary” — something like 99999 (depending on how many numbers you have in the Chart of Accounts) at the very end of your chart of accounts.

Set it as a Balance Sheet / Equity type. Not Income, not Expense — those flow through the P&L and if anything lingers there even for a day, your financial statements are dirty. Equity is the right home because it conceptually represents the net worth being brought into the system.

The golden rule

This account must be zero when you’re done. If it’s not, something’s missing or doubled up. That’s actually a feature — it’s your built-in validation check for the entire opening balance process.

Customer Opening Balances

Customer balances go through the General Journal using Account Type = Customer. The golden question here is: do you post one lump sum per customer, or one line per invoice?

If the client needs aging reports and wants to manage collections from day one — and they almost always do — post per invoice. That preserves due dates and document numbers, so the aged debtors report on day one of go-live is actually meaningful.

Posting Date Account Type Account No. Doc. Type Description Bal. Account No. Amount
31/03/2025 Customer C001 Invoice Opening Bal – Inv 1023 99999 5,200.00
31/03/2025 Customer C001 Invoice Opening Bal – Inv 1031 99999 3,800.00
31/03/2025 Customer C002 Invoice Opening Bal – Inv 2207 99999 11,500.00

Notice that the balancing account is 99999 — our suspense account. BC automatically posts to the Accounts Receivable control account (from the Customer Posting Group), so you never touch that account directly.

Pro tip

Use a Configuration Package to import customer journal lines from Excel rather than keying them manually. For any client with more than 20 customers, this will save you hours and eliminate keying errors.

Vendor Opening Balances

Same approach as customers, just mirrored. Account Type = Vendor and again post per invoice if the client wants to run aged creditors reports and manage payment runs properly from day one.

Posting Date Account Type Account No. Doc. Type Description Bal. Account No. Amount
31/03/2025 Vendor V010 Invoice Opening Bal – PO 4451 99999 -7,200.00
31/03/2025 Vendor V022 Invoice Opening Bal – PO 4488 99999 -2,900.00

BC posts to the Accounts Payable control account automatically via the Vendor Posting Group. Again — never post directly to the control account in the G/L.

Bank Opening Balances

Bank is slightly different. You’re not just getting the G/L balance right — you also need to create Bank Ledger Entries so that the bank reconciliation module actually works from day one.

The technique: post a General Journal line that debits and credits the same bank G/L account, while posting to the Bank Account sub-ledger. This creates the bank ledger entry (for reconciliation) without disturbing the G/L balance — because it nets to zero on the G/L account itself.

Important

Microsoft’s own documentation specifically warns: do not post bank opening balances by directly debiting the bank G/L account. Always go through the Bank Account sub-ledger method so reconciliation entries are created properly.

Posting Date Account Type Account No. Description Bal. Acc. Type Bal. Acc. No. Amount
31/03/2025 Bank Account HSBC-MAIN Opening Balance G/L Account 12000 45,000.00
31/03/2025 G/L Account 12000 Opening Balance – offset G/L Account 99999 -45,000.00

Fixed Assets — Two Entries, Not One

This is where most implementations get lazy, and it causes real problems later. When uploading fixed asset opening balances, you must post two separate FA journal entries per asset:

  1. Acquisition Cost — the gross original cost of the asset, posted with FA Posting Type = Acquisition Cost
  2. Accumulated Depreciation — the total depreciation to date, posted as a negative amount with FA Posting Type = Depreciation

Why not just post the net book value (NBV) in one line? Because Business Central stores FA Ledger Entries by posting type. The FA card shows gross cost and accumulated depreciation separately. If you post only NBV, those fields are wrong, the depreciation calculation going forward is based on incorrect figures, and your balance sheet will show the asset at cost as being lower than it actually is. It’s a silent error that doesn’t surface until someone looks at the fixed asset register properly.

FA No. FA Posting Type Description Bal. Account No. Amount
FA-001 Acquisition Cost Delivery Vehicle – Cost 99999 85,000.00
FA-001 Depreciation Delivery Vehicle – Accum. Dep. 99999 -34,000.00
FA-002 Acquisition Cost Office Equipment – Cost 99999 12,000.00
FA-002 Depreciation Office Equipment – Accum. Dep. 99999 -7,500.00

BC posts to the FA Acquisition Cost account and Accumulated Depreciation account automatically, based on the FA Posting Group setup. The balancing side goes to your suspense account 99999.

G/L Opening Balances — The Final Step

Now that sub-ledgers are done, you post the remaining balance sheet accounts from the trial balance — equity, long-term loans, tax payables, accruals, prepayments, and so on — directly via a G/L journal.

Here’s the critical point: skip the control account lines from the trial balance. Don’t post to Accounts Receivable, Accounts Payable, bank accounts, or FA accounts in the G/L journal — BC already created those balances when you posted the sub-ledger entries. If you post them again, you’ll double them up.

The suspense account 99999 is your plug line. After posting all the remaining TB lines, add a final line that brings the suspense account to zero — this is the mathematical proof that your entire opening balance is correct.

Final check

Run the Trial Balance report in BC and compare it line-by-line to the client’s opening TB. They should match exactly. Then confirm account 99999 shows a zero balance. If both are true, your opening balances are clean.

What If the Client Just Wants to “Upload the Trial Balance”?

This comes up on almost every project. The client sees the TB, sees a list of numbers, and asks why you can’t just put them all into BC directly.

You can. But here’s what they’re actually agreeing to:

What won’t work Why it matters
Aged Debtors / Creditors reports No customer/vendor ledger entries = no aging detail
Payment runs BC can’t match payments against open invoices
Bank reconciliation No bank ledger entries to reconcile against
FA depreciation runs No FA ledger entries = depreciation won’t calculate

In short: the G/L will balance, but the system won’t actually function as an ERP. It becomes a glorified spreadsheet with a nice interface.

The conversation to have with the client is straightforward: “We can upload the trial balance totals into the G/L only, but your AR, AP, and Fixed Asset modules won’t work — no aging, no depreciation. Is that what you want?” Nine times out of ten, once they understand what they’re giving up, they want the proper approach.

When TB-only is acceptable

There are a few genuine exceptions: shell companies with minimal transactions, interim go-lives where the client will re-upload detail later, or scenarios where the legacy system is being kept live in parallel for AR/AP. Document the decision and get sign-off — you don’t want to own that choice six months later.

Leave a Reply

Your email address will not be published. Required fields are marked *