Custom Reports — Complete User Guide — Two Accounts Web
Comprehensive guide for Custom Reports — availability, enabling, field-by-field configuration, the full calculation pipeline, sample data and output, General Ledger verification, and accounting-regulation validation
Table of Contents
- What Are Custom Reports?
- Prerequisites — Availability
- Navigating to Custom Reports
- The Report List
- Creating a Custom Report — Field-by-Field
- Report Output
- How the Report Is Calculated
- Related Settings and Configuration
- Sample Data and Report Output
- General Ledger Verification
- Reporting and Accounting Impact
- Accounting Regulation Validation
- Common Issues and Best Practices
1. What Are Custom Reports?
Custom Reports is a built-in reporting tool that lets you build your own General Ledger reports without writing any code. You decide:
- Which columns to display (from the transactor's data — date, account, debit, credit, customer, supplier, employee, bank account, quantity, description, custom fields, and more),
- Which rows to include (date-range filters, and conditions on any field: contains text, is above/below a value, is checked, falls between two dates, equals a specific account, etc.),
- How to sort the rows (any field, ascending or descending), and
- How to group the rows (by one or more fields, with automatic sub-totals and a grand total).
Think of it as an analyst's tripod: the report takes the General Ledger for the business, lets you select, filter, sort and group it, and then prints a clean, printable, exportable table with totals. It is ideal for ad-hoc management analyses — "which expense accounts moved this month", "what did employee X earn per division", "which customers are the largest" — without needing a developer.
2. Prerequisites — Availability
Custom Reports is the one reporting area that is always available — it is not tied to any tab in the navigation bar, and there is nothing to switch on in the Customize Menu.
What This Means for the Customize Menu
- Unlike payroll or inventory reports, the Custom Reports entry appears in Reports → Custom Reports regardless of which tabs are enabled.
- You do not need the Employees, Payslips, Customers, or any other tab turned on to use it.
- If you open the Customize Menu you will find no dedicated "Custom Reports" toggle — it is always on.
3. Navigating to Custom Reports
From the main navigation bar:
- Open Reports.
- Go to the Custom Reports category.
- Click Custom Reports.
This opens the report list — every custom report you have saved for the business appears here, sorted by its Name.
4. The Report List
The list shows one row per saved report, with four columns:
| Column | Description |
|---|---|
| From | The From Date saved on the report — the start of its period. |
| Until | The To Date saved on the report — the end of its period. |
| Name | The report's name. If no name was entered, the row shows "Custom Report". |
| Description | The optional note saved with the report (may be blank). |
Each row is clickable:
- Click the row to run and open the report output.
- Edit opens the report form to change any setting.
- A row also offers Clone (create a copy to modify) and the usual document actions from the report screen.
A New Report button at the top creates a fresh custom report.
5. Creating a Custom Report — Field-by-Field
Click New Report to open the report form. It is organised in sections that read like a query: what to show (Select), which rows (Where), in what order (Order By), and how to group (Group By).
5.1 Name
| Field | Required? | What To Enter | Effect |
|---|---|---|---|
| Name | ✅ Yes | A name for the report (e.g. "January GL Transactions"). | Shown in the report list and as the report title on the output page. A blank name displays as "Custom Report". |
5.2 Description
| Field | Required? | What To Enter | Effect |
|---|---|---|---|
| Description | ❌ Optional | A note to identify the report (e.g. "Ad-hoc analysis — not part of standard statements"). | Displayed in the report list only. On the output page the subtitle under the title is the report period ("For the period from … to …"), not this note. |
5.3 From Date and To Date
| Field | Required? | What To Enter | Effect |
|---|---|---|---|
| From Date | ✅ Yes | The first day of the period (e.g. 1-Jan-2026). | Only General Ledger transactions dated on or after this date are included. |
| To Date | ✅ Yes | The last day of the period (e.g. 31-Jan-2026). | Only General Ledger transactions dated on or before this date are included. |
5.4 Accounting Method (Accrual / Cash)
| Field | Required? | Options | Effect |
|---|---|---|---|
| Accounting Method | ✅ Yes | Accrual Basis (default) or Cash Basis | Determines which transactions appear. Accrual shows revenue and expenses as recorded (the normal double-entry picture). Cash Basis re-processes the ledger into receipts and payments, so sales invoices become cash received and purchase invoices become cash paid (detailed below). |
5.5 Select Columns
The Select section defines every column you want on the report. When you create a brand-new report, the system pre-fills four columns for you: Date, Account (the General Ledger account), Debit, and Credit. You can keep them, remove them, or add more.
Each column row has three parts and an optional alias:
| Field | Required? | What To Enter | Effect |
|---|---|---|---|
| Primary Field | ✅ Yes | Which piece of transaction data to show in this column — e.g. Date, Account, Debit, Credit, Customer, Supplier, Employee, Bank/Cash Account, Quantity, Description, and any custom fields. | Defines the column's main value. Only fields that resolve to a valid transaction property become columns. |
| Secondary Field | ❌ Conditional | When the Primary Field is an object (e.g. Account, Customer, Salary Item), you can pick a sub-field from it — commonly its Name, or a specific Custom Field. | Lets you drill into a linked record (e.g. "Account → Name" shows the account's name rather than its identifier). |
| Custom Field | ❌ Conditional | If the Secondary Field is "Custom Fields", choose which configured custom field to display. | Shows the value of that custom field for each transaction. |
| Display Name (alias) | ❌ Optional | A heading for the column (e.g. "Amount"). | If left blank, the column is automatically headed with the field name(s). Enter your own text to rename it. |
5.6 Where Conditions (Filters)
Where is turned on with the "Has Where" toggle. When enabled, you build a list of conditions; a transaction is shown only if it passes all of them.
Each condition has three parts — a field (primary/secondary/custom, like Select), an operator, and a value. The operators offered depend on the field's type:
| Field type | Operators available | Value to enter |
|---|---|---|
| Text (description, code, notes…) | Is Empty / Is Not Empty / Contains / Does Not Contain | For Contains / Does Not Contain, enter the text you are matching. |
| Number (amounts, quantities, discounts…) | Is More Than / Is Less Than / Is Not Zero / Is Zero | For More / Less, enter the amount to compare against. |
| Yes / No (boolean flags) | Is Checked / Is Not Checked | — |
| Date | Is Between | Enter a Start Date and an End Date (inclusive). |
| Record / entity (account, customer, supplier, employee, item…) | Is / Is Not / Is Empty / Is Not Empty | For Is / Is Not, pick the specific record (e.g. a particular account). |
5.7 Order By (Sorting)
Order By is turned on with the "Has Order By" toggle. Each ordering row has a field and a direction:
| Field | Required? | Options | Effect |
|---|---|---|---|
| Field | ✅ Yes | Any transaction field (Date, Account, Customer, Debit, etc.). | The rows are sorted by this field. |
| Direction | ✅ Yes | Ascending or Descending | Ascending = A→Z / oldest→newest / smallest→largest; Descending = the reverse. |
You can add multiple rows — each is applied as a secondary sort in sequence (e.g. sort by Date, then by Account). Records/objects are sorted by their name.
5.8 Group By (Grouping / Sub-totals)
Group By is turned on with the "Has Group By" toggle. Each grouping row has a field (primary/secondary/custom). Transactions are collected into groups by that field's value, and the report prints a bold group header and a "Total — {group}" sub-total under each group.
When Group By is on, a further option appears:
| Field | Required? | What It Does |
|---|---|---|
| Groups To Collapse | ❌ Optional | If checked, the detail rows are hidden and you see only one summary row per group (the numeric columns show the group totals). Use it for a clean, high-level trial-balance style view. |
6. Report Output
When you run the report, the output page is built as a single printable table containing:
- a header with the business name, the report name, and the subtitle "For the period from {From Date} to {To Date}",
- the column headings you defined in Select,
- the data rows (columns: text/date/object on the left, numeric right-aligned),
- sub-total rows per group, and
- a emphasised grand total row (only numeric columns are totalled).
6.1 Flat Listing
With no Group By (or with Group By disabled), the report lists every selected transaction as its own row, in the Order By sequence (or by date if none is set), then prints a highlighted grand-total row.
6.2 Grouped Listing
With Group By, rows are collected under bold group headers. Each group prints its member rows, then a "Total — {group}" sub-total row. Nested groups repeat this pattern at each level.
6.3 Collapsed Groups
With "Groups To Collapse" checked, groups are shown as single summary rows — the numeric columns contain that group's totals (a per-group consolidation), followed by the grand total.
6.4 Total Rows
Group sub-total = sum of each numeric column over the group's rows
Grand total = sum of each numeric column over ALL rows
Text / date columns never appear in total rows.
7. How the Report Is Calculated
7.1 Source of the Data
The report is generated from the business's General Ledger. It starts with every ledger line and:
- keeps only lines dated between the From Date and To Date (inclusive), and
- keeps only lines that are proper ledger transactions (balancing/supporting lines without a transaction document are handled according to the ledger rules).
All amounts are the ledger lines' base-currency amounts, so the report is always expressed in the business's base currency.
7.2 The Pre-Calculation Pipeline
Before any row is printed, the system runs the ledger through the same pre-processing used by the standard financial statements, so the figures are complete and correct:
- Cost of goods sold is calculated for inventory movements,
- Fixed asset disposals and intangible asset disposals are recognised,
- Realised investment gains are calculated, and
- Foreign-exchange revaluation is applied to the ledger for the report's From and To dates.
This means a custom report about inventory value, assets, or FX balances already reflects the same adjustments as the standard reports.
7.3 Accrual vs Cash Basis
When Cash Basis is selected, the pipeline first converts accrual documents to cash movements:
- sales invoices are matched with receipts and converted to cash-basis entries (a sale becomes the cash received), and
- purchase invoices are matched with payments and converted to cash-basis entries (a purchase becomes the cash paid),
with the conversion window starting one day before the report's From Date so that invoices issued just before the period but paid inside it are included. Accrual Basis skips this step and reports the ledger as recorded.
7.4 Where Filter Rules
Each Where condition is applied according to the field's type, exactly as laid out in section 5.6. Conditions are applied in sequence and are cumulative (AND): a row must pass every condition. Conditions on fields that do not resolve are ignored safely.
7.5 Ordering Rules
- Rows are ordered by the sequence of Order By fields entered.
- The first Order By field sets the primary sort; each additional field refines it.
- When a field is an object (account, customer, etc.), rows are sorted by that object's display name; plain values sort normally (string / number / date).
- If no Order By is set, rows keep their natural (date) order.
7.6 Column Resolution
- Only Select entries that resolve to a real transaction field become columns.
- A blank Display Name becomes the field's name (auto-labelled); a Secondary Field appends its name; a custom field shows the custom field's name.
- Numeric-typed columns are flagged as decimal: they are right-aligned and are the columns that appear in totals.
7.7 Grouping and Totals
- Grouping buckets transactions by the Group By field's value (grouped by display name when it is an object).
- With more than one Group By field, groups nest (outer then inner).
- Totals are the sum of each numeric column across a group (sub-total) and across everything (grand total).
- With Groups To Collapse, detail rows are replaced by one summary row per group.
8. Related Settings and Configuration
| Setting / Record | Where | How It Affects Custom Reports |
|---|---|---|
| Report permission | Administrator / user permissions | Controls whether a user can open Custom Reports and run saved reports. |
| Chart of Accounts | Settings → Chart of Accounts | Provides the accounts you can select/filter/group by. The report shows the ledger lines posted to these accounts. |
| Custom Fields on transactions | Settings → Custom Fields | Custom fields configured on General Ledger transactions become selectable via the Primary → "Custom Fields" → custom field path, in Select, Where, Order By, and Group By. |
| Bank & Cash / Customers / Suppliers / Employees / Items | Their respective tabs | Records that appear on ledger lines can be selected and grouped by — the report groups by their names. |
| Base Currency and exchange rates | Business Details / Currencies | All report amounts are base-currency; ledger lines from foreign currencies are converted, and FX revaluation is applied to the period. |
| Inventory valuation, asset disposal, investments | Their respective settings | They feed the pre-calculation pipeline (COGS, disposals, realised gains) so ledger figures are statement-ready. |
9. Sample Data and Report Output
9.1 Sample Setup
The document in the period is John Smith's January 2026 payslip. When it is saved, the system posts the following General Ledger lines (all dated 31-Jan-2026):
| # | Account | Debit | Credit |
|---|---|---|---|
| 1 | Salaries Expense | 30,000 | |
| 2 | Overtime Expense | 5,000 | |
| 3 | Income Tax Payable | 5,000 | |
| 4 | Health Insurance Payable | 1,500 | |
| 5 | Employee Clearing Account — John Smith | 28,500 | |
| 6 | Social Security Expense | 6,000 | |
| 7 | Social Security Payable | 6,000 |
9.2 Creating the Report
From Reports → Custom Reports, click New Report and enter:
| Section | Field | Value Entered |
|---|---|---|
| Header | Name | January 2026 Payroll — by Account |
| Header | Description | (blank) |
| Header | From Date | 1-Jan-2026 |
| Header | To Date | 31-Jan-2026 |
| Header | Accounting Method | Accrual Basis |
| Select | Column 1 | Date |
| Select | Column 2 | Account → Name |
| Select | Column 3 | Debit |
| Select | Column 4 | Credit |
| Where | Has Where | On — Date Is Between 1-Jan-2026 and 31-Jan-2026 |
| Order By | Has Order By | On — Date Ascending |
| Group By | Has Group By | On — Account |
| Group By | Groups To Collapse | Off (for the grouped detail view) |
9.3 Report Output — Flat Listing
If you run the same report without Group By, you get one row per ledger line:
For the period from 1-Jan-2026 to 31-Jan-2026
| Date | Account | Debit | Credit |
|---|---|---|---|
| 31-Jan-2026 | Salaries Expense | 30,000.00 | |
| 31-Jan-2026 | Overtime Expense | 5,000.00 | |
| 31-Jan-2026 | Income Tax Payable | 5,000.00 | |
| 31-Jan-2026 | Health Insurance Payable | 1,500.00 | |
| 31-Jan-2026 | Employee Clearing Account — John Smith | 28,500.00 | |
| 31-Jan-2026 | Social Security Expense | 6,000.00 | |
| 31-Jan-2026 | Social Security Payable | 6,000.00 | |
| Total | 41,000.00 | 41,000.00 |
9.4 Report Output — Grouped by Account
With Group By = Account and Groups To Collapse off, the same rows are collected under account headers, each with a sub-total, and a grand total:
For the period from 1-Jan-2026 to 31-Jan-2026
| Date | Account | Debit | Credit |
|---|---|---|---|
| Salaries Expense | |||
| 31-Jan-2026 | Salaries Expense | 30,000.00 | |
| Total — Salaries Expense | 30,000.00 | ||
| Overtime Expense | |||
| 31-Jan-2026 | Overtime Expense | 5,000.00 | |
| Total — Overtime Expense | 5,000.00 | ||
| Income Tax Payable | |||
| 31-Jan-2026 | Income Tax Payable | 5,000.00 | |
| Total — Income Tax Payable | 5,000.00 | ||
| Health Insurance Payable | |||
| 31-Jan-2026 | Health Insurance Payable | 1,500.00 | |
| Total — Health Insurance Payable | 1,500.00 | ||
| Employee Clearing Account — John Smith | |||
| 31-Jan-2026 | Employee Clearing Account — John Smith | 28,500.00 | |
| Total — Employee Clearing Account — John Smith | 28,500.00 | ||
| Social Security Expense | |||
| 31-Jan-2026 | Social Security Expense | 6,000.00 | |
| Total — Social Security Expense | 6,000.00 | ||
| Social Security Payable | |||
| 31-Jan-2026 | Social Security Payable | 6,000.00 | |
| Total — Social Security Payable | 6,000.00 | ||
| Grand total | 41,000.00 | 41,000.00 |
9.5 Report Output — Collapsed Groups
With the same report but "Groups To Collapse" checked, only one summary row per account is shown — a trial-balance-style view:
| Account | Debit | Credit |
|---|---|---|
| Salaries Expense | 30,000.00 | |
| Overtime Expense | 5,000.00 | |
| Income Tax Payable | 5,000.00 | |
| Health Insurance Payable | 1,500.00 | |
| Employee Clearing Account — John Smith | 28,500.00 | |
| Social Security Expense | 6,000.00 | |
| Social Security Payable | 6,000.00 | |
| Grand total | 41,000.00 | 41,000.00 |
9.6 Calculation Verification
Row correctness: every row equals one General Ledger line from the payslip posting — nothing is invented, nothing is omitted.
Lines posted by the payslip (Jan 2026):
1. Salaries Expense Dr 30,000
2. Overtime Expense Dr 5,000
3. Income Tax Payable Cr 5,000
4. Health Insurance Payable Cr 1,500
5. Employee Clearing (John) Cr 28,500
6. Social Security Expense Dr 6,000
7. Social Security Payable Cr 6,000
Group sub-totals (exactly one line per group here):
Salaries Expense Debit 30,000 ✓
Overtime Expense Debit 5,000 ✓
Income Tax Payable Credit 5,000 ✓
Health Insurance Payable Credit 1,500 ✓
Employee Clearing Credit 28,500 ✓
Social Security Expense Debit 6,000 ✓
Social Security Payable Credit 6,000 ✓
Grand total:
Debit = 30,000 + 5,000 + 6,000 = 41,000 ✓
Credit = 5,000 + 1,500 + 28,500 + 6,000 = 41,000 ✓
DR = CR ✓ Balanced
Where + date + period applied:
All seven lines are dated 31-Jan-2026.
Range 1-Jan-2026..31-Jan-2026 is inclusive → all seven lines pass ✓
Where "Date Is Between 1/Jan and 31/Jan" → all seven lines pass ✓
10. General Ledger Verification
Every row in the output is literally drawn from the General Ledger. The underlying posting is:
Dr Salaries Expense 30,000.00
Dr Overtime Expense 5,000.00
Cr Income Tax Payable 5,000.00
Cr Health Insurance Payable 1,500.00
Cr Employee Clearing Account — John Smith 28,500.00 ← net pay
Dr Social Security Expense 6,000.00
Cr Social Security Payable 6,000.00
────────── ──────────
Total Debits: 41,000.00 Total Credits: 41,000.00 ✓ Balanced
How the report's columns come from these lines:
- Date — read from each ledger line (31-Jan-2026).
- Account → Name — the ledger line's account, displayed by its name (e.g. "Salaries Expense").
- Debit — the base-currency amount of the line when it is a debit (positive); blank for credit lines.
- Credit — the base-currency amount of the line when it is a credit (presented as a positive figure); blank for debit lines.
Cross-check with the Balance Sheet :
Income Tax Payable 5,000 ✓
Health Insurance Payable 1,500 ✓
Social Security Payable 6,000 ✓
Employee Clearing (John) 28,500 net pay (and its opening balance) ✓
11. Reporting and Accounting Impact
- Flexibility with control: Custom Reports never changes the ledger — it only reads it. There is no risk of altering books by creating, editing, or deleting a custom report.
- Consistency with the standard statements: Because the same pre-calculation pipeline is used (COGS, disposals, realised gains, FX revaluation, and optionally cash-basis conversion), a custom report's figures reconcile with the Profit & Loss, Balance Sheet, and Trial Balance for the same period.
- Management analysis: Use it for account- or entity-based analysis (per customer, supplier, employee, division, item), period-to-period comparisons, and on-demand reconciliations.
- Auditability: Each cell traces to a real ledger line, making ad-hoc figures fully supported by an audit trail. Reports can be printed, emailed, and exported (the screenshot/export buttons on the report screen).
12. Accounting Regulation Validation
| Standard | Requirement | How the Report Complies |
|---|---|---|
| Accrual basis of accounting (IAS 1 / IFRS Framework) | Transactions are recorded when they occur, not when cash changes hands. | In Accrual Basis the report reflects the ledger as recorded (revenues and expenses in the period they occur). The Cash Basis option explicitly re-processes documents into receipts/payments when a cash view is needed. |
| Reliable representation / faithful presentation | Reports must faithfully represent the transactions they describe. | Every figure is computed from the live General Ledger (base currency), and can be traced to individual ledger lines and their source documents. |
| Double-entry principle | Debits equal credits for every entry and every period. | The report exposes Debit and Credit columns and totals, and the sample verifies DR = CR = 41,000. Because it only re-aggregates balanced ledger postings, totals are inherently balanced. |
| IAS 1 — disaggregation / relevance | Information should be disaggregated into material classes useful to users. | Select, Group By, and Where let a user present the ledger at exactly the level of aggregation needed (by entity, account, division, item), supporting management's information needs. |
| IAS 2 / IAS 16 / IAS 38 / IAS 40 / investment revaluation | Inventory costs, asset disposals, and realised gains must be reflected. | The pre-calculation pipeline computes inventory COGS, fixed/intangible asset disposals, and realised investment gains before the report runs, so custom reports on those areas are statement-ready. |
| IAS 21 — foreign exchange | Foreign transactions are translated to the functional currency and revalued. | Amounts are shown in base currency, and FX revaluation is applied for the report's period. |
| IAS 7 — cash flow | Cash receipts and payments should be identifiable. | The Cash Basis accounting method converts accrual documents to cash movements, useful for cash analysis and reconciliations. |
| IFRS for SMEs — by its nature (management use) | SMEs need cost-effective, flexible reporting. | Custom Reports provides a no-code, ad-hoc, auditable reporting layer for the General Ledger with no extra software. |
13. Common Issues and Best Practices
13.1 The Report Shows No Rows
Cause: No General Ledger transactions fall inside the From/To dates, no transactions pass the Where conditions, or the business has no ledger activity in the period.
Solution: Widen the date range, remove or relax Where conditions, and confirm the ledger has documents in the period.
13.2 The Report is Missing an Account / Entity
Cause: A Where condition (or an object filter) excluded it, or it had no ledger activity in the period.
Solution: Review the Where list; remember conditions are AND (cumulative).
13.3 Amounts Look Different From Another Report
Cause: This report is base-currency amounts, possibly on a different basis (Accrual vs Cash), or with different Where/Grouping.
Solution: Confirm the Accounting Method and date range match your expectation, and check the Where filters.
13.4 Totals Appear Only on Some Columns
Explanation: Only numeric columns (Debit, Credit, Quantity, etc.) are totalled. Text/date columns cannot be summed and are left blank in total rows.
13.5 Group Headers Show Blank or "Empty"
Cause: Some rows have no value for the Group By field (e.g. transactions without a customer being grouped by Customer).
Solution: This is normal — the system displays an "Empty" group so unclassified rows are still visible and totalled.
13.6 Credit Figures Appear as Positive in the Credit Column
Explanation: Ledger credits are stored as negatives; the report converts them to positive Credit-column figures for readability, keeping DR = CR totals.
Best Practices
- Give every report a clear Name so the saved list is easy to scan (the list sorts by name).
- Use Group By → "Groups To Collapse" for a trial-balance-style summary; leave it off to inspect detail rows.
- Add Display Name aliases for readability (e.g. rename a heavily-filtered amount column to "Amount").
- Set Order By on Date first for chronological listings, then refine by Account or entity.
- Reconcile custom reports to the standard statements for the same period/basis before relying on them.
- Clone a report rather than duplicating from scratch when you need a similar variant.
End of Custom Reports Guide