Skip to content

Reports


The Reports module provides access to all built-in system reports as well as a full custom report builder. Reports can be run interactively on screen and exported to Excel or PDF.


  • Built-In Report — A pre-configured report that ships with the system, organized by module (AP, AR, Inventory, Payroll, etc.). Built-in reports have fixed column layouts and grouping structures but accept flexible parameters (date ranges, customer filters, status filters) to narrow results. They cannot be modified but can be exported to Excel or PDF.

  • Custom Report — A user-created report built with the Custom Report Builder. Custom reports select from available datasets, define their own columns, filters, grouping, and parameters. They are private to the creator until shared with specific roles or users.

  • Report Parameters — Input fields that filter what data a report returns. Parameters include date ranges, entity lookups (customer, vendor, employee), status/type filters, and ID ranges. Required parameters must be filled before the report can run.

  • Dataset — The underlying data source that a custom report queries. Each dataset represents a logical collection of records (e.g., “Sales Invoices”, “Work Orders”, “Job Expenses”). The dataset determines which field paths are available for columns and filters.

  • Report Sharing — Custom reports are private by default. The owner can share a report with specific roles and/or individual users. Shared access is read-only: shared users can run and export the report, but the Edit action is disabled for them — only the owner can edit or overwrite a custom report. The Manage Custom Reports permission (found in the Utilities permission category) is required to create custom reports and use the builder, but it does not grant edit rights over reports owned by other users.


Upstream — Where Reports gets its data:

  • All modules → Reports is a read-only consumer of data from every other module in the system:
    • General Ledger — Trial balance, income statement, budget vs. actual
    • Accounts Payable — AP aging, vendor activity, check register, 1099 reports
    • Accounts Receivable — AR aging, customer statements, sales analysis, cash receipts
    • Inventory — Stock status, receiving history, product usage, valuation reports
    • Job Costing — Job profitability (gross profit), WIP, Actual vs. Estimate, detailed job status
    • Service — Work order analysis, technician productivity, contract status
    • CRM — Lead roster/pipeline, lead conversion by source, lead sales performance by salesman, proposal roster
    • Payroll — Payroll register, tax liability, timesheet summaries

Downstream — Where Reports sends its data:

  • Excel/PDF Exports — Report results can be downloaded as .xlsx files for further analysis or as PDF files for printing and distribution
  • Reports are read-only and never write data back to any module

Key Integration Point — Cross-Module Visibility: Reports provide the only unified view across all modules. A controller can run an AP Aging report, then an AR Aging report, then a Cash Flow report — all from the same Reports interface — to get a complete picture of the company’s financial position without navigating to each individual module.


Navigate to Reports in the main sidebar to see all reports available to you.

Reports are organized by module (e.g., Accounts Payable, Accounts Receivable, Payroll, Inventory, etc.). Each module group is collapsible. The list displays:

ColumnDescription
ModuleThe module the report belongs to
Report TitleName of the report

Use the search bar at the top to filter by report name or module name.

ActionDescription
Run ReportClick the report name to open it
Add (custom)Create a new custom report (requires Manage Custom Reports permission)
Edit (custom)Modify an existing custom report (requires Manage Custom Reports permission)
Share (custom)Configure which roles and users can see a custom report
Delete (custom)Remove a custom report (owner only)

Clicking a report name opens the report screen. All built-in reports follow the same interface.

  1. Set parameters — Fill in the filter fields (date ranges, customers, statuses, etc.). Required parameters are marked. See Section 6 for a full parameter type reference.
  2. Click Run — The results display in a grid on the page. Results may be grouped and collapsible depending on the report.
  3. Export if needed — Use Export Excel or Export PDF to download the results (see Section 7).
  • Results display in a sortable, grouped grid
  • Groups can be collapsed or expanded
  • Aggregation rows (totals, sums) appear at group footers where applicable
  • Tree-structured reports show parent/child rows with indentation

Some report columns are interactive: individual cells render as clickable links that open the underlying record or transaction detail. Whether a cell is clickable is determined by the report definition (the server marks certain columns as drill-down cells), so not every report or column behaves this way. There are three kinds of drill-down cells:

Cell TypeWhat it opensWhere it opens
Record linkThe underlying source record for that row (for example, a customer, invoice, or other linked record)A new browser tab
Ledger accountA Ledger Account Detail dialog showing that GL account’s transactionsA dialog on the same page
Source documentA View Ledger Document dialog showing the journal entry / source document behind that rowA dialog on the same page

Clickable cells appear in the report’s primary (link) color. Drill-down cells are only active on detail rows — group footer and aggregation (total/subtotal) rows are not clickable.

When a cell is a record link, clicking it opens that record in a new browser tab, leaving your report results untouched in the original tab.

Clicking a ledger-account cell opens the Ledger Account Detail dialog for that GL account. The dialog title shows the account in the form (account number) - description. The transactions are pre-filtered to the date range carried by the report cell.

The dialog shows the following columns for each transaction:

ColumnDescription
DateTransaction date
ReferenceReference for the source transaction
NameName associated with the source transaction
DescriptionTransaction description
DebitDebit amount
CreditCredit amount
BalanceRunning account balance

Above the grid you can adjust the Start Date and End Date, toggle Collapse By Subledger, and click Search to re-query the account over a different range. Expand a transaction row to see its individual ledger entries, and use the view (eye) icon on a row to open that entry’s source document. Click Close to return to the report.

Clicking a document cell opens the View Ledger Document dialog for the journal entry behind that row. The dialog header shows the document’s Date, Document Number, and reference, along with name and description. The Details tab lists every GL line on the document:

ColumnDescription
Ledger AccountThe GL account for the line (clickable — opens the account in a new tab)
NameName associated with the line
ReferenceReference for the line
DescriptionLine description
DebitDebit amount
CreditCredit amount

If you have the View Attachments permission, an Attachments tab is also available on the dialog. Click Close to return to the report.

Parameters vary by report. The following types of parameters appear across all reports:

Parameter TypeDescription
DateSingle date picker
Date RangePre-defined or custom date range — see pre-defined options below
Month / YearMonth and year selector
Through MonthSelect a month to report through
MQY PeriodMonthly / Quarterly / Yearly period selector

Pre-defined Date Range options:

OptionDescription
CustomEnter a specific start and end date
TodayCurrent date only
YesterdayPrevious day
This WeekCurrent calendar week
This Week-to-dateStart of current week through today
This MonthFull current month
This Month-to-dateFirst of current month through today
This QuarterFull current quarter
This Quarter-to-dateStart of current quarter through today
This YearFull current year
This Year-to-dateJanuary 1 through today
Last WeekPrevious full calendar week
Last Week-to-dateStart of last week through today
Last MonthPrevious full month
Last Month-to-dateStart of last month through today
Last QuarterPrevious full quarter
Last Quarter-to-dateStart of last quarter through today
Last YearPrevious full year
Last Year-to-dateJanuary 1 of last year through today
Since 30 days agoRolling 30-day window
Since 60 days agoRolling 60-day window
Since 90 days agoRolling 90-day window
Since 365 days agoRolling 365-day window
Next WeekUpcoming calendar week
Next 4 WeeksNext 4 calendar weeks
Next MonthNext full month
Next QuarterNext full quarter
Next YearNext full year
Parameter TypeDescription
ID RangeFilter by a single ID or a range of IDs (from / to)
Aging RangeSelect an aging period (in days) and aging-as-of date; the system automatically calculates the standard aging buckets (Current, 1–X days, X+1–2X days, 2X+1–3X days, 3X+1+ days)

These fields let you search for or select a record. Customer, Customer Site Address (the customer lookup), Vendor, Product, Salesman, Job, Purchase Order, Sales Order, Sales Invoice, Service Contract, Work Order, and Flat Rate use type-ahead server search; the remaining lookups (Employee, Schedulable Employee, User, Ledger Account, Cost Center, Building, Subledger, Budget, Bank, Payroll, and the Customer Site Address dropdown) are filterable dropdowns populated from pre-loaded lists:

ParameterSearches For
CustomerCustomer account
Customer Site AddressSite addresses linked to the selected customer
VendorVendor account
ProductInventory product
EmployeeEmployee record
Schedulable EmployeeTechnician or schedulable staff member
SalesmanSales representative
UserSystem user account
JobJob Costing job
Purchase OrderPurchase order
Sales OrderSales order
Sales InvoiceSales invoice
Service ContractService contract
Work OrderWork order
Flat RateFlat rate item
Ledger AccountGeneral ledger account
Cost CenterLedger cost center
BuildingBuilding / warehouse
SubledgerGL subledger period
BudgetGL budget
BankBank account
PayrollPayroll period
ParameterOptions
All / Open / ClosedAll, Open, Closed
Purchase Order StatusAll, Open, Closed, Cancelled
Sales Order StatusAll, Open, On Hold, Cancelled, Closed
Sales Invoice TypeConfigured invoice types
Sales Order TypeConfigured order types
Sales Order Shipment StatusAll, Open, Closed
Sales Order Shipment — ShippedAll, Shipped, Not Shipped
Sales Order Shipment — InvoicedAll, Invoiced, Not Invoiced
Work Order StatusConfigured work order statuses
Work Order Analysis TypeBy Cost Center; By Scheduled Employee; By Cost Center and Scheduled Employee; Ungrouped
Service TypeConfigured service types
Service Contract StatusActive, Cancelled, Expired, Pending Renewal, Pending Sale, Pending Start, Renewal Sent
Service Contract TypeConfigured contract types
Lead StatusAll, Won, Lost, In-Progress
Lead StageConfigured lead stages
Lead DepartmentConfigured lead departments
Lead SourceConfigured lead sources
Lead Unqualified ReasonConfigured unqualified reasons
Proposal StatusAll, Approved, Draft, Pending, Rejected, Submitted, Withdrawn
Proposal Converted StatusAll, Converted, Unconverted
Proposal Conversion TypeWork Order
Employee StatusAll, Active, Terminated
Timesheet StatusAll, Approved, Unapproved
Scheduled Time Off TypePersonal, Sick, Vacation
Product CategoryConfigured product categories
Product TypeConfigured product types
Stock CodeStock code lookup
Job TypeConfigured job types
Job Cost Entry TypeConfigured entry types
Equipment Item TypeConfigured equipment types
Vendor TermsConfigured vendor payment terms
Customer TermsConfigured customer payment terms
Flat Rate CategoryConfigured flat rate categories
GL SourceGL posting source
AR Deposit GroupConfigured deposit groups
Inventory Adjustment ReasonConfigured adjustment reasons
Product Log Transaction TypeInventory transaction types
Communication TypeCommunication type
Communication DirectionInbound, Outbound
Communication PriorityLowest, Low, Medium, High, Highest
Communication SentimentNegative, Neutral, Positive
Communication StatusConfigured communication statuses
Payroll DivisionPayroll division
Parameter TypeDescription
TextFree-text filter field
Number / DecimalNumeric filter value
CheckboxBoolean true/false toggle
Date Based OnSelects which date field the report filters by; available choices depend on the report’s context — for Sales Order reports: Due to Ship, Ordered, Promised; for Sales Invoice reports: Due Date, Invoice Date, Paid Date, Ledger Date, Shipped Date
Multiple Cost CentersSelect one or more cost centers
Multiple Service TypesSelect one or more service types

After running a report (or on a custom report), three output options are available:

ButtonFormatNotes
RunOn-screen gridInteractive, sortable, collapsible groups. Aggregation totals shown at group footers. Custom reports are capped at 100 rows on screen; export to Excel or PDF for full results.
Export Excel.xlsx fileDownloads immediately. Filename matches the report name.
Export PDFPDF fileGenerated asynchronously; the download starts automatically when ready.

Users with the Manage Custom Reports permission can create fully custom reports from the Reports list by clicking Add.

The builder has two tabs: Configuration and Preview.

The Configuration tab walks through four steps:

FieldRequiredDescription
NameYesReport name (max 255 characters) — appears in the Reports list
CategoryNoReport category for organizing in the list

Parameters — Define the input fields users will fill in before running the report:

Parameter FieldDescription
LabelDisplay name for the parameter
TypeParameter type: Text, Boolean, Date, ID Range, Date Range, Model (lookup), or Enum (status/type)
MetaFor Model types: which model to search. For Enum types: which enum field to use
Default ValuePre-filled default value
RequiredWhether the parameter must be filled before the report can run

A new parameter row appears automatically when you start typing in the last (empty) row — there is no separate Add Row button. Use the row’s delete (trash) icon to remove a parameter.

FieldRequiredDescription
DatasetYesThe data source the report queries — selected from a list of available datasets

Filters — Build filter conditions to limit the data returned:

  • Select a field path from the dataset
  • Choose a comparison operator (equals, contains, greater than, etc.)
  • Enter a static value or reference a parameter defined in Step 1
  • Combine multiple conditions with AND / OR logic

Define the columns that appear in the report output:

Column FieldDescription
Field PathThe dataset field to display in this column
AggregationHow to aggregate values: None, or SUM (for numeric columns)

Columns can be reordered by dragging rows up or down.

Define how report rows are grouped:

  • Each group specifies one or more columns to group by
  • Multiple groups create a nested grouping hierarchy
  • Group rows can be reordered by dragging to change the nesting order

Switch to the Preview tab at any time to run the report with its current configuration and see what the output will look like before saving.

Note: On-screen report runs (both preview and full) display a maximum of 100 rows. To see all results, export to Excel or PDF.

Click Save to store the custom report. It will then appear in the Reports list and can be shared with other roles or users (see Section 9).


Custom reports are private to their creator by default. Use the Share action from the Reports list to make a report visible to others.

FieldDescription
RolesSelect one or more roles — all users in those roles will see the report
UsersSelect specific individual users who should have access

Sharing changes take effect immediately. Shared reports are read-only for recipients — only the owner can edit or overwrite a custom report. The Manage Custom Reports permission is required to create or edit custom reports, but it does not grant edit rights over a report that was shared to you as read-only. Only the owner can delete it.


PermissionDescription
Per-report permissionsEach built-in report has its own permission entry in the Reports permission category. Your role must be granted the specific report permission to see and run that report.
Manage Custom ReportsA Utilities-category permission required to use the report builder and to create, edit, delete, and share custom reports. Editing applies to reports you own — reports shared with you or your role are read-only in the list (the Edit action is disabled). Deleting a report additionally requires being its owner.

Built-in report visibility is controlled by per-report permission entries (permission category: Reports), not by module-level permissions. Contact your system administrator to adjust which reports each role can access.


Example 1: Running the Built-In Schedule of Accounts Payable Report

Section titled “Example 1: Running the Built-In Schedule of Accounts Payable Report”

Scenario: Sarah (Controller) needs to review outstanding vendor invoices to plan cash flow for the next 30 days.

Step 1 — Open the report:

  1. Navigate to Reports in the sidebar.
  2. Expand the Accounts Payable module group.
  3. Click Schedule of Accounts Payable.

Step 2 — Set parameters:

  1. Aging Bucket Interval = 30 (the default — creates buckets: Current, 1–30, 31–60, 61–90, 91+).
  2. As of Date = 02/28/2026.
  3. Aging Date = 02/28/2026.
  4. Start ID / End ID = (leave blank to include all vendors).

Step 3 — Run and review:

  1. Click Run. Results list invoices grouped by vendor, with a subtotal per vendor and a grand total at the bottom. Each detail row shows Vendor ID, Name, Invoice Date, Due Date, Invoice Number, Prepayment, Balance, Current, and the aging-bucket columns (1–30, 31–60, 61–90, 91+):

    Vendor IDNameBalanceCurrent1–3031–6061–9091+
    V100FastPipe Supply$3,550.00$2,350.00$1,200.00$0.00$0.00$0.00
    V101Industrial Electric$5,000.00$5,000.00$0.00$0.00$0.00$0.00
    V102ABC Controls$4,800.00$0.00$4,800.00$0.00$0.00$0.00
    …12 more vendors…
    Grand Total$34,700.00$18,450.00$12,300.00$3,200.00$750.00$0.00
  2. Sarah notes: $18,450 currently due + $12,300 coming due in 30 days = $30,750 cash needed in the next month.

Step 4 — Export:

  1. Click Export Excel to download for the weekly cash planning meeting.
  2. Click Export PDF to file with the February month-end package.

Example 2: Building a Custom Work Order Profitability Report

Section titled “Example 2: Building a Custom Work Order Profitability Report”

Scenario: Tom (Service Manager) wants a report showing profitability by service type for all completed work orders, so he can identify which types of work are most profitable. No built-in report has this exact view.

Step 1 — Create the custom report:

  1. Navigate to Reports and click Add (requires Manage Custom Reports permission).

Step 2 — Configure Step 1 (Name and Parameters):

  1. Name = WO Profitability by Service Type.
  2. Category = Service.
  3. Add parameters:
    • Parameter 1: Label = “Date Range”, Type = Date Range, Required = ✓
    • Parameter 2: Label = “Service Type”, Type = Enum (Service Type), Required = ✗

Step 3 — Configure Step 2 (Dataset & Filters):

  1. Dataset = Work Order.
  2. Add filters:
    • Field: completedDateTime → Operator: Is Greater Than Or Equal To → Value: Date Range parameter (start); add a second filter Field: completedDateTime → Operator: Is Less Than Or Equal To → Value: Date Range parameter (end) (there is no “within” operator — a date range is expressed as two bounds)
    • Field: isInvoiced → Operator: Is Equal To → Value: true (work orders are marked invoiced via this boolean; workOrderStatus is a related record, not the text “Invoiced”)
    • Field: serviceType → Operator: Is Equal To → Value: Service Type parameter (optional)

Step 4 — Configure Step 3 (Columns):

  1. Add the following columns:

    #Field PathAggregation
    1serviceType.nameNone
    2humanIdNone
    3customer.nameNone
    4totalSaleAmountSUM
    5totalCostAmountSUM
    6Gross Profit % (gpp metric)None

Step 5 — Configure Step 4 (Groups):

  1. Group by: serviceType.name (creates a section per service type with subtotals).

Step 6 — Preview and save:

  1. Switch to the Preview tab. Enter Date Range = “This Quarter” and click Run.

  2. Results show:

    Service TypeWO CountTotal SaleTotal CostGross ProfitAvg GP%
    HVAC Repair42$38,500$14,200$24,30063.1%
    Plumbing18$12,400$5,800$6,60053.2%
    Maintenance31$22,100$8,900$13,20059.7%
    Install8$65,000$42,000$23,00035.4%
  3. Click Save.

Step 7 — Share with managers:

  1. From the Reports list, click Share on the new report.
  2. In the Share Report dialog, use the Roles and/or Users multi-selects to grant access. For this example, select Roles = Service Manager, Operations Manager (the role names shown here are illustrative — pick the roles or individual users that apply to your organization).
  3. Click Save. The selected roles and users get read-only access: they can run and export this report, but cannot edit it.

Rules are grouped by category. Each rule has an ID for cross-referencing.

  • BR-RPT-C1: Required Parameters — Required report parameters must be filled before the report can run.
  • BR-RPT-C2: Read-Only — Reports never write data back to any module; they are strictly read-only consumers.
  • BR-RPT-A1: Pre-Defined Date Ranges — Date parameters auto-update for ranges like “This Month,” “Last Quarter,” “Year to Date.”
  • BR-RPT-A2: Aggregation Rows — Group footers auto-calculate totals, sums, and counts.
  • BR-RPT-W1: Report Lifecycle — Select Report → Set Parameters → Run → Review Grid → Export (Excel/PDF).
  • BR-RPT-X1: Universal Data Consumer — Reports read from all modules: GL, AP, AR, Inventory, JC, Service, CRM, Payroll.
  • BR-RPT-X2: Sharing by Role — Custom reports shared with a role are visible to all users assigned to that role.

Q: The report won’t run — “required parameters must be filled.” One or more required parameters are empty (BR-RPT-C1). Check all parameter fields marked as required and fill them before clicking Run. Date range parameters often use convenient shortcuts like “This Month” or “Last Quarter.”

Q: My custom report isn’t visible to other users. Custom reports are private by default (BR-RPT-X2). Click Share on the report and select the roles or individual users who should see it. Shared access is read-only — only the owner can edit the report; only the owner can delete it.

Q: The data I need isn’t available as a dataset in the Custom Report Builder. Not all system data is exposed as a dataset. If the dataset dropdown doesn’t include what you need, contact your administrator to request a new dataset be configured on the server side.

Q: Report totals don’t match what I see in the module. Check the report parameters — date range, status filters, and entity filters determine which records are included. A mismatch usually means the report parameters are narrower or broader than what you’re comparing against in the module. Also verify the As of Date and Aging Date for aging reports.

Q: I can’t edit a shared report that someone created. Editing a custom report requires the Manage Custom Reports permission, and you can only edit reports you own — reports shared with you are read-only, so the Edit action is disabled for them. Only the owner can delete a report. If a report was shared to you and you need changes, ask the owner, or create your own copy with the adjustments you need.

Q: Group subtotals aren’t showing on my custom report. Ensure you configured a Group By field in Step 4 of the report builder. Aggregation rows auto-calculate for grouped reports (BR-RPT-A2). Also check that the column aggregation settings (SUM, COUNT, etc.) are set correctly.


The Income Statement report displays the selected Cost Center at the top of the report output, making it clear which department or division the statement covers when filtering by cost center.

The GL posting system includes balance assertion with detailed GL entries across all posting flows. When journal entries are posted from any module (AP, AR, Service, Payroll, etc.), the system validates that the resulting GL entries balance correctly, and the detailed individual entries are included in the assertion for full audit traceability.


  • Date range shortcuts: Pre-defined date range options like “This Month-to-date” or “Last Quarter” update automatically — you do not need to change dates each time you run the report.

  • Aging reports: For aging-based reports, the Aging Range parameter lets you set a custom aging period (number of days per bucket). The system then calculates all four standard buckets automatically.

  • Collapsible groups: Report results with multiple grouping levels can be collapsed at any level. Click the group header row to toggle that group’s detail rows open or closed.

  • Excel vs. PDF: Excel exports are best for further analysis or data manipulation. PDF exports are best for printing or sharing a formatted version of the results.

  • Custom report datasets: Not all data in the system is available as a dataset. If you need data that does not appear in the Dataset dropdown in Step 2, contact your administrator to request a new dataset be configured on the server side.

  • Parameter linking: In custom reports, a filter condition can reference a report parameter (instead of a hard-coded value). This lets users provide the filter value at runtime — for example, a “Customer” parameter that filters the dataset to only that customer’s records.

  • Report sharing and visibility: A custom report you create is only visible to you until you share it. Once shared with a role, every user in that role will see it in the Reports list under its category.

  • Editing shared reports: A custom report can only be edited by its owner; reports shared with a role or individual user are read-only, so the Edit action is disabled for recipients. Only the owner can delete it. Shared users can run and export a shared report but not modify its configuration.