#8553 [Bug][SubscriptionBilling]: Performance: Billing document creation does not scale to large datasets (4M+ subscription lines)
Billing document creation now scales to millions of subscription lines through code optimizations, database indexes, transaction checkpoints, and progress tracking, eliminating redundant lookups and event dispatch overhead.
- 14files
- 14AL files
- 13objects
Pull request · merged into main (BC30) on 2026-07-30 by miljance (community contribution) · 14 files (+770 -170), 14 AL · performance · tier official · reviewed (checked by Opus)
What changed
- New Progress Tracker codeunit gives a reusable, GuiAllowed-guarded ETA dialog that is safe for Job Queue runs
- Commit checkpoints added every 10 contracts in billing proposals and per document on the non-posting creation path; per-commitment commit removed in usage data billing
- New subscriber codeunit skips redundant unit price and cost calculations when inserting billing document lines
- Dictionary-based aggregation, SetLoadFields and IsEmpty checks replace costly loops and lookups
- New or extended keys on Billing Line, Subscription Line, Usage Data Billing and Usage Data Generic Import; three event subscribers inlined into hot paths
- Behaviour changes for users or extensions.
AL objects touched
- Codeunit 8062 “Billing Proposal”, Subscription Billing: modified
- Codeunit 8060 “Create Billing Documents”, Subscription Billing: modified
- Codeunit 8066 “Purchase Documents”, Subscription Billing: modified
- Codeunit 8063 “Sales Documents”, Subscription Billing: modified
- Page 8067 “Recurring Billing”, Subscription Billing: modified
- Table 8061 “Billing Line”, Subscription Billing: modified
- Table 8064 “Billing Line Archive”, Subscription Billing: modified
- Table 8059 “Subscription Line”, Subscription Billing: modified
- Codeunit 8033 “Generic Connector Processing”, Subscription Billing: modified
- Codeunit 8026 “Process Usage Data Billing”, Subscription Billing: modified
- Codeunit 8028 “Usage Based Contr. Subscribers”, Subscription Billing: modified
- Table 8006 “Usage Data Billing”, Subscription Billing: modified
- Table 8018 “Usage Data Generic Import”, Subscription Billing: modified
src/Apps/W1/Subscription Billing/App/Base/Codeunits/ProgressTracker.Codeunit.al: added, not in the BC30 snapshot yet
Context
- Fixes: #7690 [Bug][SubscriptionBilling]: Performance: Billing document creation does not scale to large datasets (4M+ subscription lines) (closed)
- Work items: AB#641986
- Labels: ADO: Sync, AL: Apps (W1), From Fork, Team: Finance
- Systems: sales
Source: metadata of a merged pull request in microsoft/BCApps (bcapps): title, labels, changed paths and counts, with a summary in our words. No source text and no description beyond one short quote (D10, D61).