Codeunit 8062 "Billing Proposal"
Subscription Billing · Microsoft.SubscriptionBilling
Across versions
- BC23-28not present
- BC29-30present
Subscription Billing · Microsoft.SubscriptionBilling · BC29-30 · source at ea08af5e · facts from BC29
Events published
OnAfterUpdateBillingLineFromSubscriptionLine(var BillingLine: Record "Billing Line"; SubscriptionLine: Record "Subscription Line")(integration)OnBeforeProcessContractSubscriptionLines(var SubscriptionLine: Record "Subscription Line"; BillingDate: Date; BillingToDate: Date; BillingRhythmFilterText: Text; BillingTemplate: Record "Billing Template")(integration)OnAfterProcessContractSubscriptionLines(var SubscriptionLine: Record "Subscription Line"; BillingDate: Date; BillingToDate: Date; BillingRhythmFilterText: Text)(integration)OnBeforeCreateBillingProposalFromContract(ContractNo: Code[20]; BillingRhytmFilter: Text; ServicePartner: Enum "Service Partner"; var IsHandled: Boolean)(integration)OnAfterCalculateNextBillingToDateForSubscriptionLine(var NextBillingToDate: Date; SubscriptionLine: Record "Subscription Line"; BillingFromDate: Date)(integration)OnBeforeInsertBillingLineUpdateBillingLine(var BillingLine: Record "Billing Line"; SubscriptionLine: Record "Subscription Line")(integration)OnAfterInitTempTable(var TempBillingLine: Record "Billing Line" temporary; GroupBy: Enum "Contract Billing Grouping")(integration)OnBeforeUpdateNextBillingDateInUpdateBillingLine(var SubscriptionLine: Record "Subscription Line")(integration)OnAfterSubscriptionLineGetInUpdateBillingToDate(var SubscriptionLine: Record "Subscription Line")(integration)OnCheckSkipSubscriptionLineOnElse(SubscriptionLine: Record "Subscription Line"; var SkipSubscriptionLine: Boolean)(integration)OnProcessSubscriptionLineOnAfterFilterUsageDataBilling(var UsageDataBilling: Record "Usage Data Billing"; SubscriptionLine: Record "Subscription Line")(integration)OnCreateBillingProposalBeforeApplyFilterToContract(var FilterText: Text; var BillingTemplate: Record "Billing Template"; BillingDate: Date; BillingToDate: Date)(integration)OnBeforeCalculateBillingLineUnitAmountsAndServiceAmount(var BillingLine: Record "Billing Line"; SubscriptionLine: Record "Subscription Line"; var IsHandled: Boolean)(integration)
Procedures
InitTempTable(var TempBillingLine: Record "Billing Line" temporary; GroupBy: Enum "Contract Billing Grouping")RefreshGroupsInTempTable(var TempBillingLine: Record "Billing Line" temporary; GroupBy: Enum "Contract Billing Grouping"; GroupKeys: List of [Code[20]])(internal): Rebuilds only the temporary rows of the groups touched by a selection-scoped action (for example Delete Billing Line or Change Billing To Date), instead of re-reading every Billing Line as InitTempTable does. Each affected group is dropped and rebuilt from the database, so the result is identical to…CreateBillingProposal(BillingTemplateCode: Code[20]; BillingDate: Date; BillingToDate: Date)CreateBillingProposal(BillingTemplateCode: Code[20]; BillingDate: Date; BillingToDate: Date; AutomatedBilling: Boolean)CalculateNextBillingToDateForServiceCommitment(ServiceCommitment: Record "Subscription Line"; BillingFromDate: Date): DateDisplayErrorIfNotAuthorizedToClearProposalOrDeleteDocuments()DeleteBillingProposal(BillingTemplateCode: Code[20])(internal)DeleteBillingLines(var BillingLine: Record "Billing Line")(internal)UpdateBillingToDate(var BillingLine: Record "Billing Line"; NewBillingToDate: Date)(internal)CreateBillingProposalFromContract(ContractNo: Code[20]; BillingRhytmFilter: Text; ServicePartner: Enum "Service Partner")(internal)CreateBillingProposalForContract(ServicePartner: Enum "Service Partner"; ContractNo: Code[20]; ContractLineFilter: Text; BillingRhythmFilter: Text; BillingDate: Date; BillingToDate: Date)(internal)CreateBillingProposalForPurchaseHeader(ServicePartner: Enum "Service Partner"; var TempServiceCommitment: Record "Subscription Line" temporary; BillingDate: Date; BillingToDate: Date)CreateBillingProposalForPurchaseLine(ServicePartner: Enum "Service Partner"; var TempServiceCommitment: Record "Subscription Line" temporary; BillingDate: Date; BillingToDate: Date; var PurchaseLine: Record "Purchase Line")CreatePurchaseLines(PurchaseHeader: Record "Purchase Header")CreateBillingDocument(ServicePartner: Enum "Service Partner"; ContractNo: Code[20]; DocumentDate: Date; PostingDate: Date; PostDocument: Boolean; OpenDocument: Boolean): BooleanDeleteBillingDocuments(BillingTemplateCode: Code[20])(internal)
Plus 35 local procedures.
Recent changes
- 2026-09-11 #10970 [Master] -SubBilling BillingLine doesn’t consider entries for usage date ranges crossing periods (main, BC30, fix)
- 2026-07-31 #9876 [Subscription Billing] Rename progress tracker (main, BC30, refactor)
- 2026-07-30 #8553 [Bug][SubscriptionBilling]: Performance: Billing document creation does not scale to large datasets (4M+ subscription lines) (main, BC30, performance)
Ask your agent
Procedure bodies are not stored here (D10). For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: bcatlas_resolve_node(object_type: "codeunit", object_name: "Billing Proposal"), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.