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-KV01, 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:

LevelRecordWhat it is forHow many
Report sectionbl_fi_report_section_hdrA line of the statement — Sales Revenue, Current Assets, Retained Earnings. The engine decides P&L versus balance sheet by the section’s code90 of 90 tenants, typically 19
GL categorybl_fi_mst_gl_category_list_hdrA group of GL codes — Sales – Smartphones, Rental. Where a GL code is filed70 of 90 tenants, typically 81
GL codebl_fi_mst_glcodeThe account you post to. Each GL code belongs to exactly one category

The section and the category are joined by a link record, bl_fi_report_section_gl_category_link — one row that says “this category appears under this section”. You make it on the GL Category screen’s GL Section tab. It is present in 67 of 90 tenants, typically 72 links per tenant — that is, most categories are linked, not all.

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. Three of the 70 tenants that hold categories hold no links at all, so no statement can show a figure for them.
  • 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. A table for that was designed (its comment says “standard GL Category Type, hard coded values, for example: Asset, Current Asset, Fixed Asset, Liability, Equity …”) and it holds no rows in any tenant and nothing references it. 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. That is the “19” you see in almost every tenant. 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&LThe result line
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 (it writes the same table), and a tenant whose chart was created with a custom default list from an applet setting may have different ones. Adding is safe. Renaming a seeded code is not, for the reason in the next section.

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.

Two consequences:

  • A section you create — MarketplaceFees, say — is a balance-sheet section, whatever you call it. If you want a new P&L line, put the category under one of the eleven 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. The statement shows sections in whatever order the screen sorts them; you cannot number them, 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 lineIt is a balance-sheet section — 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