Skip to content

Set of Books, Fiscal Years and Fiscal Periods

You have three companies to close every month and a group accountant who wants one set of statements per company, and you have just discovered that BigLedger will happily let a cashier finalise a cash bill dated last February. By the end of this page you will have a Set of Books for each company that the financial reports can read, a fiscal year with twelve periods for each, and the closed months locked so that the February cash bill is refused — and you will know exactly which lock refuses what, because the three locks do not do what their names suggest. Setup takes about twenty minutes for three companies. There is nothing to install.

The screens are all in the Chart of Account applet; that page lists every field. This page is about what the records mean and what the system does with them.

Meet GadgetSphere

GadgetSphere Sdn Bhd (GS), GadgetSphere Online Sdn Bhd (GSO) and GadgetSphere Distribution Sdn Bhd (GSD) each keep one primary ledger in MYR and close on a calendar year. The group finance team closes each company’s month by the 10th of the next month, after which nobody in the 22 branches should be able to post a sale into it, and after which the accountants themselves should still be able to post adjusting journals for another week. On the 20th the accountants stop too. That is two different locks on two different dates, which is exactly what the periods are for.

Three things, and what each one is for

The thingWhat it decidesWhere it livesHow many tenants use it
Set of BooksWhich ledgers a financial report reads. A report is generated for one Set of Books and covers every ledger linked to itbl_fi_mst_set_of_books_hdr (name, code, currency) and one line per ledger in bl_fi_mst_set_of_books_line34 of 90 tenants, typically 2
Fiscal yearThe date range a company reports on — not necessarily January to Decemberbl_fi_cfg_fiscal_year_hdr, one per company per year31 of 90, typically 3 years
Fiscal periodOne slice of the year, and the only thing that can be locked. Each period carries a closing status that decides whether documents and journals dated inside it are acceptedbl_fi_cfg_fiscal_period_hdr, twelve per year in practice31 of 90, typically 24 periods

Two design notes from the developers’ own table comments, because they explain why the records are shaped the way they are:

“A set of books may contains multiple ledger_header. One ledger for basic account reporting, another set of ledger base on different accounting standard, and another set of ledger base on different currencies etc.”bl_fi_mst_set_of_books_hdr

“In each fiscal year, there may be X number of fiscal periods. X can be 1, 2 (half yearly), 4 (quarterly), 12 (monthly), or 52 (weekly), or 13 or 14 or whatever number specified by the user. Different fiscal period could be used for different purpose, in different modules. For example: Company A has a financial year from May 2003 to April 2004 (12 periods), but the GST filing is done quarterly …”bl_fi_cfg_fiscal_period_hdr

The second is a design intent, and it is worth knowing that the product as shipped does the first half and not the second: the screen generates monthly periods and nothing else, and the backend refuses a second set of periods for the same company (see What the backend actually checks). The tables that were meant to carry the other purposes — bl_fi_cfg_fiscal_settings, the period extension and event tables — hold no rows in any of the 90 tenants.

Before you start

  • Each company exists in Organisation, and each has a primary ledger — the Chart of Account applet’s Companies → Ledgers tab shows it. A Set of Books with no ledger linked is refused by the report engine with Set of Books is missing primary ledger configuration.
  • You can open the Chart of Account applet with rights to create Set of Books and Fiscal Year records. Whoever can edit a fiscal period can unlock it — there is no approval step — so restrict this to the people who close the books.
  • Nothing is created for you. A new company has no fiscal year and no Set of Books, and a company with no fiscal year is never locked: the lock check counts matching locked periods and finds none. If you have been running for a year without one, every date has been open the whole time.

Step 1: Create a Set of Books per company

Chart of Account → Set of Books → Create

The outcome: a named bundle of ledgers that Month End Processing and the Financial Report can be pointed at.

Give it a name — GS Statutory, GSO Statutory, GSD Statutory — and on the Ledgers tab link the company’s primary ledger. One ledger per Set of Books is the normal case; the reason a Set of Books can hold several is that the report engine sums every ledger linked to it, so a management-reporting Set of Books that spans two companies’ ledgers is one record here, not a consolidation feature elsewhere.

The name is the only thing the screen asks for, and it is the only thing you will ever see again — the Financial Report’s listing shows it in a Set of Book column. Name it for the company and the purpose. The backend validates nothing about the name or code; it only checks that a currency, if you supply one through the API, exists.

If you skip this step, Month End Processing cannot be created at all — its form requires a Set of Books — and there is no financial report for the company.

Step 2: Create the fiscal year and let the screen build the periods

Chart of Account → Fiscal Year → Create

The outcome: twelve OPEN periods for the company, one per month.

Pick the Company, type a Name (FY2026), and choose the Start Date and End Date. The screen snaps both to whole months — the 15th of January becomes the 1st — and generates one period per month between them, named January 2026, February 2026 and so on, every one with closing status OPEN. A year that runs April to March produces twelve periods just the same, starting at April 2026; the calendar year is not assumed.

Do this once per company. GadgetSphere needs three fiscal years, 36 periods.

One company, one set of periods, no overlaps — ever. When you save, the backend takes every fiscal period the company already has, from every fiscal year, and refuses the save if any new period’s start or end date falls inside an existing one (The date_start and date_end dates are overlapping with an existing fiscal period). This is what stops you creating FY2026 twice. It is also what stops the quarterly tax calendar the table comment describes: a second, quarterly set of periods for the same company is rejected as overlapping the monthly one. If you need a different year end, delete the old year first — and read What the backend actually checks before you do.

The commonest failure here is a year created with the wrong company selected. The periods save fine, the locks then apply to the wrong company, and you find out when a document in the right company posts into a month you thought was closed.

Step 3: Lock the closed months — in two stages

Chart of Account → Fiscal Year → (the year) → Fiscal Period → (the period) → Closing Status → Save

The outcome: branches cannot post into March; accountants still can; ten days later nobody can.

Each period has a Closing Status with four values. The names are misleading, so here is what each one refuses, in plain terms:

Closing statusSales, purchase, stock and payment documents dated in the periodManual journals dated in the period
OPENacceptedaccepted
LOCK_TXNrefusedaccepted
LOCK_GLacceptedrefused
LOCK_ALLrefusedrefused

LOCK_TXN is the operational lock: set it on the 10th and no branch can finalise a document dated in March. Accounting continues — adjusting journals, accruals, the month-end journals the report engine writes. LOCK_GL is the accountants’ lock and does nothing to the branches. LOCK_ALL is both. So GadgetSphere’s routine for March 2026 is: on 10 April set LOCK_TXN; on 20 April set LOCK_ALL.

What “refused” looks like: a document save fails validation with The selected date falls within a locked fiscal period; a journal save comes back as HTTP 403 FISCAL_PERIOD_LOCKED with the same sentence. The user sees the message at Save; nothing is written.

Two exemptions are built in and you cannot switch them off. Stock transfers (outbound and inbound) post into a LOCK_TXN or LOCK_ALL period regardless, so a warehouse can still move stock dated in a closed month. Journals the system writes itself — the ones flagged automatic, which is how month-end processing and document posting create theirs — ignore LOCK_GL and LOCK_ALL. That second exemption is why locking a period does not break Month End Processing, and it is also why a locked period is not a guarantee that its ledger balances are frozen: finalising a document in an LOCK_GL period is allowed, and its automatic journal posts.

Reopening is the same screen: set the status back to OPEN and save. It is immediate and unlogged beyond the row’s updated by stamp.

What the backend actually checks

This section is short and worth reading, because it corrects three things a reader would reasonably assume.

Locks are computed from the date, every time. When a document or journal is saved, BigLedger counts the company’s active periods whose status is in the relevant lock set and whose date range contains the transaction date. One or more: refused. Zero: accepted. Nothing is stored on the document to say which period it fell in. The journal header has columns for a fiscal year and period, and posting never fills them — they are empty in every tenant. The consequence: if you later change a period’s dates, every historical document silently belongs to whichever period now contains its date. Do not edit period dates on a year that has postings.

The overlap check is per company, not per year and not per Set of Books. Every period of the company is compared against every other, whatever year it belongs to. That is the rule that gives you exactly one calendar per company.

The fiscal year’s link to a Set of Books is decorative. Both the year and the period carry a Set of Books column. Nothing validates it and nothing reads it beyond an optional listing filter. The lock check is by company and date only; the report engine finds its ledgers through the Set of Books lines, never through the fiscal year. Leave the field alone; it changes nothing.

Only the Financial Report applet reads a Set of Books: Month End Processing resolves it to ledgers and processes each, and a Financial Report snapshot joins the general-ledger summary rows to the ledgers on its lines. Nothing else on the platform looks at it.

What success looks like

Thirty seconds per company. Open a sales invoice screen, date a new invoice in a LOCK_TXN month, fill in one line and Save: you get The selected date falls within a locked fiscal period and nothing is created. Open the journal screen, date a manual journal in the same month and Save: it posts. Then, in the Financial Report applet, create a Month End Processing record for that company and month and pick the Set of Books from the drop-down: it is there by the name you gave it, and PROCESS completes without Set of Books is missing primary ledger configuration.

Common mistakes

What people doWhat actually happensDo this instead
Set LOCK_GL on the 10th to “close the month”Branches keep posting sales into it; only manual journals are refusedLOCK_TXN first, LOCK_ALL when the accountants are done
Assume a new company starts locked, or that last year is locked because it is overA company with no fiscal year is never locked; a period stays OPEN until somebody changes itCreate the year, then lock each month as you close it
Create a second fiscal year for a quarterly tax calendarRefused as overlappingOne monthly calendar per company; report quarterly from the monthly periods
Edit a period’s dates after the year has postingsDocuments move between periods without any record of itDelete and recreate a year only before anything is posted into it
Create the Set of Books and forget the Ledgers tabMonth End Processing fails with Set of Books is missing primary ledger configuration.Link the primary ledger before you leave the screen
Rely on LOCK_ALL to freeze ledger balancesStock transfers and system-written journals still postTreat the lock as a gate on people, and read the month-end snapshot as the frozen figures

Related documentation