Financial Report Structure
You have added a GL code — say EXPENSE-MARKETPLACE, for the commission the online marketplaces take from GadgetSphere Online — and it has movement in the ledger, and it is nowhere on the profit and loss. By the end of this page you will know why (its category is not linked to a report section), how to fix it in two minutes, and how the whole statement is put together, so that the next code you add lands on the right line the first time. There is one rule the engine applies that no screen shows you, and it is in the section Which sections are P&L.
The Chart of Account applet page lists every field on the screens involved; the Financial Report applet page describes how the month-end and snapshot engine runs. This page is about the structure they share.
Meet GadgetSphere
GadgetSphere’s three companies share one chart shape: mnemonic codes such as SALES-SMARTPHONE, COST-LAPTOP, EXPENSE-RENTAL, LIAB-SST-OUTPUT. Each code sits in a GL category (Sales – Smartphones, Cost of goods – Laptops, Rental), and each category is linked to one report section (SalesRevenue, CostOfGoodsSold, GeneralExpenses). The finance team is about to add the marketplace-commission code to GSO, and the balance sheet of GSD is missing a bank account somebody created last quarter.
Three levels, one join
A financial statement in BigLedger is assembled from three levels, and the middle one is the one people forget:
| Level | Where you maintain it | What it is for |
|---|---|---|
| Report section | Chart of Account → GL Section | A line of the statement — Sales Revenue, Current Assets, Retained Earnings. The engine decides P&L versus balance sheet by the section’s code |
| GL category | Chart of Account → GL Category | A group of GL codes — Sales – Smartphones, Rental. Where a GL code is filed |
| GL code | Chart of Account → GL Code | The account you post to. Each GL code belongs to exactly one category |
The section and the category are joined by a link — one record that says “this category appears under this section”. You make it on the GL Category screen’s GL Section tab. Nothing creates that link for you, nothing defaults it, and nothing warns you when it is missing.
Every report query in the engine — the month-end summary, the trial balance, the balance-sheet closing figures, the retained-earnings opening — walks the same path: GL code → its category → the link → the section. It is an inner join at every step, which means:
- A GL code with no category is invisible to every report.
- A category with no link to a section is invisible to every report, and so is every GL code in it. This is the
EXPENSE-MARKETPLACEproblem, and it is the single most common reason a figure is “missing” from a statement. A chart that has categories but no links at all prints statements with nothing on them: the reports are not broken, the join simply matches nothing. - A category linked to two sections appears under both, and its GL codes are counted twice. Nothing stops you creating the second link — the link validator checks that the section and the category exist, and nothing else — so if a subtotal is too high by exactly one category’s balance, look for a double link.
The sections every tenant starts with
When a chart of accounts is created with the default GL codes, BigLedger seeds eighteen report sections, and a platform migration added a nineteenth (Dividend) to every tenant — which is why a chart nobody has extended shows nineteen. The codes matter, because the engine matches on them — do not rename these:
| Section code | Statement | What goes under it |
|---|---|---|
SalesRevenue | P&L | Sales income |
SalesExpenses | P&L | Selling costs — marketplace commission, card fees, marketing |
CostOfGoodsSold | P&L | Cost of stock sold |
CostOfGoodsSold-Gains | P&L | Gains that reduce cost of sales |
CostOfGoodsSold-Expenses | P&L | Expenses that add to cost of sales |
GeneralExpenses | P&L | Rent, wages, utilities |
OtherRevenues | P&L | Interest received, sundry income |
OtherExpenses | P&L | Interest paid, sundry expenses |
TaxExpenses | P&L | Income tax |
Dividend | P&L | Dividends declared |
ProfitLoss | P&L | Treated as P&L by the engine, but not drawn on the Profit And Loss tab, which computes its own net-profit line — leave it empty |
CurrentAssets | Balance sheet | Cash, receivables, stock |
FixedAssets | Balance sheet | Property, fittings, equipment |
FixedAssets-AccumulatedDepreciation | Balance sheet | Accumulated depreciation |
OtherAssets | Balance sheet | Deposits, long-term receivables |
CurrentLiabilities | Balance sheet | Payables, SST payable, accruals |
LongTermLiabilities | Balance sheet | Loans, hire purchase |
ShareCapital | Balance sheet | Paid-up capital |
RetainedEarnings | Balance sheet | Accumulated profits — read specially, see below |
You can add sections on the GL Section screen (they are the same kind of record), and a tenant whose chart was created with a custom default list from an applet setting may have different ones. Adding one does no harm to the ledger, but the statement tabs will not draw it — see the next section. Renaming a seeded code is worse, for the same reason.
Which sections are P&L — the rule no screen shows
The engine carries a fixed list of eleven section codes that it treats as profit and loss: SalesRevenue, SalesExpenses, CostOfGoodsSold, CostOfGoodsSold-Gains, CostOfGoodsSold-Expenses, GeneralExpenses, OtherRevenues, OtherExpenses, TaxExpenses, Dividend, ProfitLoss. Everything else is balance sheet. The list is in the code, not in any table or setting, and there is no flag on a section to change it.
The statements themselves are drawn the same way. The Financial Report’s Profit And Loss and Balance Sheet tabs each walk a fixed list of section codes in a fixed order — Sales Revenue, Sales Expenses, Net Sales, the three cost-of-sales sections, Gross Profit, General Expenses, Other Revenues, Other Expenses, Profit Before Taxes, Tax Expenses, Dividend, Net Profit; then Current Assets, the three non-current asset sections, Current Liabilities, Long Term Liabilities, Share Capital, Retained Earnings.
Two consequences:
- A section you create —
MarketplaceFees, say — is drawn on neither statement tab, and at month end its balance is carried forward as if it were balance sheet, whatever you call it. If you want a new P&L line, put the category under one of the existing sections and use the category name as the line. RetainedEarningsis read by name. The balance sheet’s retained-earnings line is the opening balance of the section whose code is exactlyRetainedEarnings, and the month-end retained-earnings journal sums the ten P&L sections other thanProfitLoss. Rename either and the balance sheet stops balancing.
There is no ordering column on a section, and none is needed: the order is the fixed one above. You cannot move a section, and a section named to sort first will not.
Procedure: make a new category appear on the statement
Chart of Account → GL Category → Create; then the GL Section tab
The outcome: EXPENSE-MARKETPLACE shows on GSO’s profit and loss under Sales Expenses.
- Create the category. Name
Marketplace commission, codeMKT-COMM. Save. - Link it to a section. Open the category, GL Section tab, pick
SalesExpenses, save. One section. This writes the link row; without it the category is filed nowhere. - Put the GL code in it. On the GL code
EXPENSE-MARKETPLACE, set the category toMarketplace commission. (If you created the code first, it may already be in some other category — move it; a code has exactly one.) - Regenerate the report. The Financial Report is a snapshot read from month-end summary rows; an existing snapshot does not change when you add a link. Open it and REGENERATE, or re-run Month End Processing for the month if the movement was posted before the link existed — the month-end summary is itself built through the same join, so movement posted while the category was unlinked was never summarised.
That last point is the one that costs people an afternoon: linking the category fixes the structure, and the figures for past months only appear after Month End Processing for those months is run again.
Bulk, from a file. Import GL Category takes a CSV with columns GL_CATEGORY_CODE, GL_CATEGORY_NAME, PARENT_CATEGORY, DESC, ACCOUNT_NO and SECTION_CODE. Code, name and section code are required; each row creates the category and its link in one go. The section code must already exist as a section — a row with SECTION_CODE = Sales Revenue (with a space) fails with INVALID SECTION CODE, because the code is SalesRevenue. Failing rows are flagged on the import screen, not rejected as a file; fix the cell and re-import the row.
What success looks like
Open the Financial Report for GSO, last month, Profit And Loss tab. Under Sales Expenses there is a line Marketplace commission with the GL code EXPENSE-MARKETPLACE beneath it and the month’s figure beside it. On the Trial Balance tab the same code appears once — not twice — and the trial balance’s debits equal its credits. For the GSD bank account that was missing: it is a GL code in a category linked to CurrentAssets, and after REGENERATE it is on the Balance Sheet tab.
Common mistakes
| What people do | What actually happens | Do this instead |
|---|---|---|
| Create a category and start posting to its codes | Every report drops the codes — the category has no section | Link on the GL Section tab before the first posting |
| Link a category to a second section “so it shows in both places” | It is counted twice; subtotals are wrong by exactly its balance | One section per category; if a line belongs in two places, split the category |
Create a section called OperatingExpenses for a new P&L line | Neither statement tab draws it, and month end carries its balance forward as balance sheet — only the eleven fixed codes are P&L | Add the category under GeneralExpenses or SalesExpenses and name the category for the line |
Rename RetainedEarnings or SalesRevenue to a house style | The engine reads those codes by name; the balance sheet stops balancing | Change the section’s name, never its code |
| Link the category, then look at last month’s report | The snapshot is unchanged; the summary rows were built before the link | REGENERATE the report; re-run Month End Processing for months already closed |
Import categories with Sales Revenue in the section column | INVALID SECTION CODE on every such row | Use the section code exactly: SalesRevenue |
Related documentation
- Chart of Account applet — the GL Section, GL Category and Import screens, field by field
- Financial Report applet — Month End Processing, REGENERATE, and the troubleshooting row for a code missing from every report
- Set of Books, fiscal years and fiscal periods — which ledgers a report reads and which months are locked
- Chart of accounts guide — building the codes and categories in the first place