Developing reports
Developing reports in AL for Business Central: report objects, datasets, layouts (Word, Excel, RDL), request pages, report extensions, substitution, obsoleting, telemetry, performance, testing and troubleshooting. It answers how to build, extend, format, expose, monitor and retire reports.
Path: Development > Programming in the AL language > Developing reports · tier official · system development · narrative reviewed (checked by Opus)
Overview
A report in AL is built from a dataset (data items and columns taken from tables), one or more layouts (Word, Excel, RDL or custom), and an optional request page where users set options and filters. The Reports overview, Report Design Overview and Report object pages introduce these parts, and the walkthrough on designing a report from multiple tables shows an RDL report from dataset to totals and an Excel layout.
Subtopics go deeper on single areas: formatting report data, report layouts, discoverability (how users find reports), triggers and events, and how users run, print and save reports. Further pages cover extending reports with report extension objects, substituting reports through an event, and obsoleting reports and layouts.
For running reports in production, the telemetry, performance and troubleshooting pages explain how to find slow or failing runs. The test reports page covers verifying output with a report dataset library. Start with Reports overview and Report object, then move to dataset and layouts.
Key points
- A report combines a dataset (data items and columns), layouts (Excel, Word, RDL) and a request page.
- Report extension objects add columns, data items, triggers, request page elements and layouts to existing reports; a worked food inventory example shows the table and report extension code.
- Report substitution uses the OnAfterSubstituteReport event in Codeunit 44 ReportManagement; from 2021 release wave 1, report extensions are an alternative.
- Obsoleting reports uses ObsoleteReason, ObsoleteTag and ObsoleteState, with layout-level obsolescence from 2025 release wave 1; deprecation is also communicated via captions, search terms and help content.
- Request pages let users set options and filters before a report runs, using properties such as RequestFilterFields and SaveValues; teaching tips, help links and saved settings are also covered.
- Report generation telemetry tracks successful, failed and canceled runs, dataset and rendering time, SQL execution, and output formats, and supports performance analysis.
- Performance strategies include read scale-out, background scheduling and query optimization.
- Testing uses Codeunit 131007 Library - Report Dataset, with methods like RunReportAndLoad and AssertElementWithValueExists.
Subtopics
- Formatting report data (3 pages)
- Report layouts (22 pages)
- Report discoverability (2 pages)
- Report triggers and events (7 pages)
- How users work with reports (3 pages)
- AL language reference (reports) (3 pages)
More Learn pages
- Obsoleting reports: Learn how to obsolete Business Central reports.
- Report dataset: The dataset determines the data extracted to print or display the information from the database.
- Report Design Overview: Design a report by defining the dataset and designing the layout. Report object is composed of dataset, layout, request page, properties, triggers and code.
- Report Extension Example: Reports are used to print or display information from a database.
- Report extension object: The report extension object in AL for Business Central allows you to create an extension of an existing report.
- Report Generation Telemetry: Learn about the report telemetry in Business Central.
- Report object: The report object in AL for Business Central allows to create a new report.
- Report performance: Provides information for developers to help improve performance for Business Central reports.
- Reports overview: Use reports to display information from database to structure and summarize information and print documents, such as invoices.
- Substituting Reports in Business Central: Learn how to substitute one report for another in Business Central by handling the OnAfterSubstituteReport event, and how report extensions compare.
- Test reports: How to validate if a report produces correct data
- Troubleshooting reports: Learn about how to troubleshoot Business Central reports
- Using request pages with reports: Introducing how to work with request pages with Business Central reports.
- Walkthrough - Designing a report from multiple tables: This walkthrough shows you how to design a report from multiple tables.
Videos, posts and code changes
Linked by a Haiku matcher with a grounding quote from the item’s summary (link/topics.ts); machine-generated.
- #10270 [Quality Management] Repair and improve XML documentation of procedures (code change): “XML documentation for Quality Management procedures has been repaired and improved”
- #10404 Deliverable 638799: Requisitions in Base App - add layout to report + minor fixes (code change): “Word layout was added to the Spend Request Document report”
- #10489 MSlenejennum/647452/new header and footer layouts and report themes (code change): “New composite report parts management codeunit seeds 11 header/footer designs and 3 themes”
- #11137 Composite Report Parts: seed via a report extension instead of install/upgrade code (code change): “Report extension replaces SeedPart-based install/upgrade code for seeding”
- #11211 [Bug 649379] Composite layout stress-test fixes, part resolution source and status action captions (code change): “Fixes composite report layout defects: a new layout can no longer overwrite”
- #7938 Bugs/632378 make quality inspection gen rule warning actionable (code change): “the Create Inspection report and the receiving and warehouse”
- #9428 637301 Report layout override lifecycle (code change): “Report layout overrides for extension-installed layouts now write Tenant Report Layout Override”
- #9433 636017 Move Item Price List and Res. Price List report action tooltip… (code change): “Report action tooltips for Item Price List and Res. Price List reports are moved”
- #9453 [Bug 642248] Header/Footer Theme Assignment: persist selected layout (missing Rec.Modify) (code change): “A data-persistence bug on the Header/Footer Theme Assignment page is fixed by adding a missing Rec.Modify() call”
- #9949 [Bug 645022] UI improvements for report themes and header/footers (composite layout) (code change): “Composite layout administration pages get UI improvements”
- #183 Add reporting review guidance and evaluation fixtures (code change): “Nine reporting rules and guidance articles have been added to the BCQuality”
- Composite Layouts in Business Central 29.0: Brand One Report End to End (community post): “In AL, the Subtype, HeaderFooterPart and ThemePart properties configure this”
- Quick Tip: Deep Dive into Report Objects and Layouts @BC TechDays 2025 (community post): “Reports combine three layers: data dataset, presentation layout, and user input”
- Quick Tip: BC28: What Is New in Document Reporting (community post): “BC28 introduces enhanced document reporting features including an improved Word add-in”
- What’s New: AL Language (2025 release wave 1) (video): “reports; strings; json; yaml; testing; Report Tooltips; Excel Layout”
- What’s New: Server and Database (2025 release wave 2) (video): “Server and Database analysis mode semantic search advanced tell me document reporting”
Business Central pages and reports
The pages, reports and queries this hub’s Learn pages name (ms.search.form, API reference), joined to the code by exact object id (data/index/docs-objects.json); a page shows the table it runs on.
- Page 21 “Customer Card” · on Table 18 “Customer” · via Report layouts
- Page 2650 “Email Printer Settings” · on Table 2650 “Email Printer Settings” · via How users work with reports
- Page 2750 “Universal Printer Settings” · on Table 2751 “Universal Printer Settings” · via How users work with reports
- Page 2752 “Add Universal Printers Wizard” · captioned “Add Universal Print Printers” · via How users work with reports
- Page 2753 “Universal Print Shares List” · captioned “Print Shares” · on Table 2752 “Universal Print Share Buffer” · via How users work with reports
- Page 2754 “Universal Printer Tray List” · captioned “Universal Printer Trays” · on Table 823 “Name/Value Buffer” · via How users work with reports
- Page 8900 “Administrator Main Role Center” · captioned “Administrator Role Center” · via How users work with reports
- Page 9650 “Custom Report Layouts” · on Table 9650 “Custom Report Layout” · via Report layouts
- Page 9652 “Report Layout Selection” · on Table 9651 “Report Layout Selection” · via Report layouts
- Page 9660 “Report Layouts” · via Report layouts
- Page 9666 “Report Theme and Header/Footer” · captioned “Manage themes and header-footer layouts” · via Report layouts
- Page 9882 “Report Res. Govern. Settings” · captioned “Report Limits and Settings” · via Formatting report data
Source: Microsoft Learn (CC BY 4.0). Descriptions are Learn’s own.
What Learn documents here 8 of 54 Learn pages
- learn(Obsolete) Create and modify custom report layouts2025-03-12
- learn(Obsolete) Import and Export Custom Report Layouts2021-04-01
- learn(Obsolete) Set the Layout Used by a Report2022-03-07
- learn(Obsolete) Update Custom Report Layouts2021-06-24
- learnAdd pages and reports to Tell me2025-05-15
- learnAdding barcodes to reports2021-04-06
- learnAssign document layouts to customers or vendors2024-11-28
- learnAvailable fonts2025-02-28
Show 32 more
- learnBarcode Fonts with Business Central Online2021-10-29
- learnCreating a Word layout report2025-02-13
- learnCreating an Excel layout report2025-03-13
- learnCreating an RDL layout report2025-01-08
- learnDefining multiple report layouts2024-01-20
- learnDesign Word Layouts with the Business Central Add-in2026-09-09
- learnDeveloping a Custom Report Render2026-03-03
- learnFormatting field values in report datasets2023-12-01
- learnFormatting the data in a field2026-07-03
- learnGet started creating report layouts2026-09-09
- learnLocalizing the report data formatting and caption strings2023-01-04
- learnManage Saved Settings for Reports and Batch Jobs2021-12-21
- learnMap Data Fields in Word Layouts2026-09-09
- learnObsoleting reports2025-03-13
- learnOnAfterDocumentPrintReady Event2021-04-01
- learnOnAfterDocumentReady Event2023-03-13
- learnOnAfterIntermediateDocumentReady Event2023-03-10
- learnOnAfterSetupPrinters Event2021-04-01
- learnOnCustomDocumentMergerEx event2023-12-20
- learnOnGetFilename Event2025-06-11
- learnReport and document layouts overview2026-09-09
- learnReport data type2026-10-01
- learnReport dataset2024-01-18
- learnReport Design Overview2023-12-08
- learnReport discoverability2024-03-11
- learnReport Extension Example2021-04-01
- learnReport extension object2024-11-11
- learnReport Generation Telemetry2026-09-22
- learnReport object2024-09-16
- learnReport performance2024-01-18
- learnReport Property Reference in AL2026-10-01
- learnReport Triggers and Runtime Operations2021-05-17