Skip to content

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:

LevelWhere you maintain itWhat it is for
Report sectionChart of Account → GL SectionA line of the statement — Sales Revenue, Current Assets, Retained Earnings. The engine decides P&L versus balance sheet by the section’s code
GL categoryChart of Account → GL CategoryA group of GL codes — Sales – Smartphones, Rental. Where a GL code is filed
GL codeChart of Account → GL CodeThe 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-MARKETPLACE problem, 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.
There is no “category type” on a GL category — no Asset / Liability / Equity / Revenue / Expense field that decides which statement it belongs to. The section, and only the section, decides where a figure appears.

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 codeStatementWhat goes under it
SalesRevenueP&LSales income
SalesExpensesP&LSelling costs — marketplace commission, card fees, marketing
CostOfGoodsSoldP&LCost of stock sold
CostOfGoodsSold-GainsP&LGains that reduce cost of sales
CostOfGoodsSold-ExpensesP&LExpenses that add to cost of sales
GeneralExpensesP&LRent, wages, utilities
OtherRevenuesP&LInterest received, sundry income
OtherExpensesP&LInterest paid, sundry expenses
TaxExpensesP&LIncome tax
DividendP&LDividends declared
ProfitLossP&LTreated 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
CurrentAssetsBalance sheetCash, receivables, stock
FixedAssetsBalance sheetProperty, fittings, equipment
FixedAssets-AccumulatedDepreciationBalance sheetAccumulated depreciation
OtherAssetsBalance sheetDeposits, long-term receivables
CurrentLiabilitiesBalance sheetPayables, SST payable, accruals
LongTermLiabilitiesBalance sheetLoans, hire purchase
ShareCapitalBalance sheetPaid-up capital
RetainedEarningsBalance sheetAccumulated 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.
  • RetainedEarnings is read by name. The balance sheet’s retained-earnings line is the opening balance of the section whose code is exactly RetainedEarnings, and the month-end retained-earnings journal sums the ten P&L sections other than ProfitLoss. 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.

  1. Create the category. Name Marketplace commission, code MKT-COMM. Save.
  2. 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.
  3. Put the GL code in it. On the GL code EXPENSE-MARKETPLACE, set the category to Marketplace commission. (If you created the code first, it may already be in some other category — move it; a code has exactly one.)
  4. 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 doWhat actually happensDo this instead
Create a category and start posting to its codesEvery report drops the codes — the category has no sectionLink 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 balanceOne section per category; if a line belongs in two places, split the category
Create a section called OperatingExpenses for a new P&L lineNeither statement tab draws it, and month end carries its balance forward as balance sheet — only the eleven fixed codes are P&LAdd the category under GeneralExpenses or SalesExpenses and name the category for the line
Rename RetainedEarnings or SalesRevenue to a house styleThe engine reads those codes by name; the balance sheet stops balancingChange the section’s name, never its code
Link the category, then look at last month’s reportThe snapshot is unchanged; the summary rows were built before the linkREGENERATE the report; re-run Month End Processing for months already closed
Import categories with Sales Revenue in the section columnINVALID SECTION CODE on every such rowUse the section code exactly: SalesRevenue

Related documentation