---
id: object/table/8059
type: object
title: Table 8059 "Subscription Line"
summary: Table 8059 "Subscription Line" in Subscription Billing (Microsoft.SubscriptionBilling). 62 fields, 77 public procedures, 13 events. Introduced in BC29, still in BC30, changed in BC30.
tier: official
language: en
tags:
  - table
  - subscription billing
versions:
  introduced: "29"
  last_changed: "30"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: 11f9d73d80bcbba795e97c5ed7a4ea5f400cffd117d97c8f65d9ba2593a0360f
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/Subscription%20Billing/app/Service%20Commitments/Tables/SubscriptionLine.Table.al
    title: src/Apps/W1/Subscription Billing/app/Service Commitments/Tables/SubscriptionLine.Table.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn:
    - https://learn.microsoft.com/dynamics365/business-central/SRB/purchases
    - https://learn.microsoft.com/dynamics365/business-central/SRB/working-with-contracts/contracts-services-mgmt
    - https://learn.microsoft.com/dynamics365/business-central/SRB/working-with-contracts/so-service-commitments
  objects: []
  features: []
  topics:
    - topic/business-central/business-functionality/sales/subscription-billing
    - topic/business-central/business-functionality/sales/subscription-billing/contracts
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/10446
    - change/bcapps/11679
    - change/bcapps/11399
    - change/bcapps/9225
    - change/bcapps/10970
    - change/bcapps/11218
    - change/bcapps/10235
    - change/bcapps/10675
    - change/bcapps/10608
    - change/bcapps/8553
    - change/bcapps/8115
object_type: table
object_id: 8059
name: Subscription Line
namespace: Microsoft.SubscriptionBilling
app: Subscription Billing
extends: null
first_version: "29"
last_version: "30"
present_in:
  - "29"
  - "30"
changed_in:
  - "30"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 62
  procedures: 118
  events: 13
  subscribers: 0
relations:
  out: 23
  referenced_by: 18
  pages: 6
  extended_by: 0
  event_subscribers: 0
  calls: 0
  called_by: 0
  implements: 0
---

# Table 8059 "Subscription Line"

> Table 8059 "Subscription Line" in Subscription Billing (Microsoft.SubscriptionBilling). 62 fields, 77 public procedures, 13 events. Introduced in BC29, still in BC30, changed in BC30.

Subscription Billing · Microsoft.SubscriptionBilling · BC29-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Apps/W1/Subscription%20Billing/app/Service%20Commitments/Tables/SubscriptionLine.Table.al) · facts from BC29

Learn documents this table through its pages: [Page 8014 "Service Commitments List"](../page/8014.md) (3 Learn pages).

## Properties

| Property | Value |
|---|---|
| Caption | Subscription Line |
| DataClassification | CustomerContent |
| LookupPageId | Service Commitments List |
| DrillDownPageId | Service Commitments List |

## Fields

Explanation: the field's ToolTip in the code; without one, the ToolTip of a page control bound to the field (marked via the page); without that, its Caption (marked caption) when that differs from the name.

| No. | Name | Type | Explanation | Notes |
|---|---|---|---|---|
| 1 | Subscription Header No. | Code[20] | Specifies the value of the Subscription No. field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 8057 "Subscription Header"](../table/8057.md) (Subscription Header) |
| 2 | Entry No. | Integer | Specifies the value of the Entry No. field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | AutoIncrement |
| 3 | Subscription Package Code | Code[20] | Specifies the code of the Subscription Package. If a Vendor Subscription Contract line has the same Subscription No. and Package Code as a Customer Subscription Contract line, the Customer Subscription Contract dimension value is copied to the Vendor Subscription Contract line. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 8055 "Subscription Package"](../table/8055.md) (Subscription Package); not editable; NotBlank |
| 4 | Template | Code[20] | Specifies the code of the Subscription Package Line Template. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 8054 "Sub. Package Line Template"](../table/8054.md) (Sub. Package Line Template); not editable; NotBlank |
| 5 | Description | Text[100] | Specifies the description of the Subscription Line. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 6 | Subscription Line Start Date | Date | Specifies the date from which the Subscription Line is valid and will be invoiced. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 7 | Subscription Line End Date | Date | Specifies the date up to which the Subscription Line is valid. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 8 | Next Billing Date | Date | Specifies the date of the next billing possible. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 9 | Calculation Base Amount | Decimal | Specifies the base amount from which the price will be calculated. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 10 | Calculation Base % | Decimal | Specifies the percent at which the price of the Subscription Line will be calculated. 100% means that the price corresponds to the Base Price. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 11 | Price | Decimal | Specifies the price of the Subscription Line with quantity of 1 in the billing period. The price is calculated from Base Price and Base Price %. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 12 | Discount % | Decimal | Specifies the percent of the discount for the Subscription Line. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 13 | Discount Amount | Decimal | Specifies the amount of the discount for the Subscription Line. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 14 | Amount | Decimal | Specifies the amount for the Subscription Line including discount. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 15 | Billing Base Period | DateFormula | Specifies for which period the Amount is valid. If you enter 1M here, a period of one month, or 12M, a period of 1 year, to which Amount refers to. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 16 | Invoicing via | Enum "Invoicing Via" | Specifies whether the Subscription Line is invoiced via a contract. Subscription Lines with invoicing via sales are not charged. Only the items are billed. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | enum [Enum 8051 "Invoicing Via"](../enum/8051.md) |
| 17 | Invoicing Item No. | Code[20] | Specifies the value of the Invoicing Item No. field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation Item."No." where("Subscription Option" = filter("Invoicing Item" \| "Service Commitment Item")) |
| 18 | Partner | Enum "Service Partner" | Specifies whether the Subscription Line will will be calculated as a credit (Purchase Invoice) or as debit (Sales Invoice). <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | enum [Enum 8053 "Service Partner"](../enum/8053.md) |
| 19 | Subscription Contract No. | Code[20] | Specifies the contract to which the Subscription Line is to be assigned. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 8052 "Customer Subscription Contract"](../table/8052.md), [Table 8063 "Vendor Subscription Contract"](../table/8063.md) (if (Partner = const(Customer)) "Customer Subscription Contract" where("Sell-to Customer No." = field("Sub. Header Customer No.")) else if (Partner = const(Vendor)) "Vendor Subscription Contract") |
| 20 | Notice Period | DateFormula | Specifies a date formula for the lead time that a notice must have before the Subscription Line ends. The rhythm of the update of "Notice possible to" and "Term Until" is determined using the extension term. For example, with an extension period of 1M, the notice period is repeatedly postponed by on... <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 21 | Initial Term | DateFormula | Specifies a date formula for calculating the minimum term of the Subscription Line. If the minimum term is filled and no extension term is entered, the end of Subscription Line is automatically set to the end of the initial term. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 22 | Extension Term | DateFormula | Specifies a date formula for automatic renewal after initial term and the rhythm of the update of "Notice possible to" and "Term Until". <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 23 | Billing Rhythm | DateFormula | Specifies the Dateformula for rhythm in which the Subscription Line is invoiced. Using a Dateformula rhythm can be, for example, a monthly, a quarterly or a yearly invoicing. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 24 | Cancellation Possible Until | Date | Specifies the last date for a timely termination. The date is determined by the initial term, extension term and a notice period. An initial term of 12 months and a 3-month notice period means that the deadline for a notice of termination is after 9 months. An extension period of 12 months postpones... <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 25 | Term Until | Date | Specifies the earliest regular date for the end of the Subscription Line, taking into account the initial term, extension term and a notice period. An initial term of 24 months results in a fixed term of 2 years. An extension period of 12 months postpones this date by 12 months. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 26 | Sub. Header Customer No. | Code[20] | Specifies the value of the Subscription Customer No. field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | FlowField: lookup("Subscription Header"."End-User Customer No." where("No." = field("Subscription Header No."))); not editable |
| 27 | Subscription Contract Line No. | Integer | Specifies the value of the Contract Line No. field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 8062 "Cust. Sub. Contract Line"](../table/8062.md), [Table 8065 "Vend. Sub. Contract Line"](../table/8065.md) (if (Partner = const(Customer)) "Cust. Sub. Contract Line"."Line No." where("Subscription Contract No." = field("Subscription Contract No.")) else if (Partner = const(Vendor)) "Vend. Sub. Contract Line"."Line No." where("Subscription Contract No." = field("Subscription Contract No."))) |
| 29 | Shortcut Dimension 1 Code | Code[20] | Specifies the code for Shortcut Dimension 1, which is one of two global dimension codes that you set up in the General Ledger Setup window. | TableRelation [Table 349 "Dimension Value"](../table/349.md) ("Dimension Value".Code where("Global Dimension No." = const(1), Blocked = const(false))) |
| 30 | Shortcut Dimension 2 Code | Code[20] | Specifies the code for Shortcut Dimension 2, which is one of two global dimension codes that you set up in the General Ledger Setup window. | TableRelation [Table 349 "Dimension Value"](../table/349.md) ("Dimension Value".Code where("Global Dimension No." = const(2), Blocked = const(false))) |
| 31 | Price (LCY) | Decimal | Specifies the price of the Subscription Line in client currency related to quantity of 1 in the billing period. The price is calculated from Base Price and Base Price %. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 32 | Discount Amount (LCY) | Decimal | Specifies the discount amount in client currency that is granted on the Subscription Line. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 33 | Amount (LCY) | Decimal | Specifies the amount in client currency for the Subscription Line including discount. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 34 | Currency Code | Code[10] | Specifies the currency of amounts in the Subscription Line. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 4 "Currency"](../table/4.md); not editable |
| 35 | Currency Factor | Decimal | Specifies the currency factor valid for the Subscription Line, which is used to convert amounts to the client currency. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 36 | Currency Factor Date | Date | Specifies the date when the currency factor was last updated. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 37 | Calculation Base Amount (LCY) | Decimal | Specifies the basis on which the price is calculated in client currency. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 38 | Discount | Boolean | Specifies whether the Subscription Line is used as a basis for periodic invoicing or discounts. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 39 | Quantity | Decimal | Specifies the value of the Quantity field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | FlowField: lookup("Subscription Header".Quantity where("No." = field("Subscription Header No."))); not editable |
| 40 | Create Contract Deferrals | Enum "Create Contract Deferrals" | Specifies whether this Subscription Line should generate contract deferrals. If it is set to No, no deferrals are generated and the invoices are posted directly to profit or loss. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | enum [Enum 8020 "Create Contract Deferrals"](../enum/8020.md) |
| 42 | Customer Price Group | Code[10] | Specifies the value of the Customer Price Group field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 6 "Customer Price Group"](../table/6.md) (Customer Price Group); not editable |
| 50 | Next Price Update | Date | Specifies the date of the next price update. <small>via [Page 8064 "Service Commitments"](../page/8064.md)</small> |  |
| 51 | Exclude from Price Update | Boolean | Specifies whether this line is considered in by the Contract Price Update. Setting it to yes will exclude the line from all price updates. <small>via [Page 8064 "Service Commitments"](../page/8064.md)</small> |  |
| 52 | Price Binding Period | DateFormula | Specifies the period the price will not be changed after the price update. It sets a new "Next Price Update" in the contract line after the price update has been performed. <small>via [Page 8064 "Service Commitments"](../page/8064.md)</small> |  |
| 59 | Period Calculation | enum "Period Calculation" | Specifies the Period Calculation, which controls how a period is determined for billing. The calculation of a month from 28.02. can extend to 27.03. (Align to Start of Month) or 30.03. (Align to End of Month). <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | enum [Enum 8005 "Period Calculation"](../enum/8005.md) |
| 60 | Variant Code | Code[10] | Specifies the Variant Code of the Subscription. | FlowField: lookup("Subscription Header"."Variant Code" where("No." = field("Subscription Header No."))); not editable |
| 107 | Closed | Boolean | — |  |
| 100 | Unit Cost | Decimal | — | not editable |
| 101 | Unit Cost (LCY) | Decimal | Specifies the unit cost of the item. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 200 | Planned Sub. Line exists | Boolean | Specifies if a planned Renewal exists for the Subscription Line. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | FlowField: exist("Planned Subscription Line" where("Entry No." = field("Entry No."))); not editable |
| 202 | Renewal Term | DateFormula | Specifies a date formula by which the Contract Line is renewed and the end of the Contract Line is extended. It is automatically preset with the initial term of the Subscription Line and can be changed manually. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> |  |
| 210 | Selected | Boolean | Specifies that the Subscription Line is to be called up in the purchase invoice. <small>via [Page 8095 "Get Vendor Contract Lines"](../page/8095.md)</small> |  |
| 211 | Indent | Integer | — |  |
| 480 | Dimension Set ID | Integer | Specifies the value of the Dimension Set ID field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | TableRelation [Table 480 "Dimension Set Entry"](../table/480.md) (Dimension Set Entry); not editable |
| 8000 | Usage Based Billing | Boolean | Specifies whether usage data is used as the basis for billing via contracts. <small>via [Page 8064 "Service Commitments"](../page/8064.md)</small> | not editable |
| 8001 | Usage Based Pricing | Enum "Usage Based Pricing" | Specifies the method for customer based pricing. <small>via [Page 8064 "Service Commitments"](../page/8064.md)</small> | enum [Enum 8007 "Usage Based Pricing"](../enum/8007.md); not editable |
| 8002 | Pricing Unit Cost Surcharge % | Decimal | Specifies the surcharge in percent for the debit-side price calculation, if a unit cost surcharge is to be used. <small>via [Page 8064 "Service Commitments"](../page/8064.md)</small> | not editable |
| 8003 | Supplier Reference Entry No. | Integer | Specifies the sequence number of the related reference. <small>via [Page 8064 "Service Commitments"](../page/8064.md)</small> | TableRelation [Table 8015 "Usage Data Supplier Reference"](../table/8015.md) ("Usage Data Supplier Reference" where(Type = const(Subscription))); not editable |
| 8006 | Created in Contract line | Boolean | Specifies whether the Subscription was created by creating a Contract line manually. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | not editable |
| 8007 | Source Type | Enum "Service Object Type" | Specifies the type of the Subscription. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | FlowField: lookup("Subscription Header".Type where("No." = field("Subscription Header No."))); enum [Enum 8019 "Service Object Type"](../enum/8019.md); not editable |
| 8008 | Source No. | Code[20] | Specifies the No. of the Item or G/L Account of the Subscription. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | FlowField: lookup("Subscription Header"."Source No." where("No." = field("Subscription Header No."))); not editable |
| 8009 | Item No. | Code[20] | Specifies the value of the Item No. field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | obsolete Pending 26.0; #if not CLEANSCHEMA29; FlowField: lookup("Subscription Header"."Item No." where("No." = field("Subscription Header No."))); not editable |
| 8010 | Subscription Description | Text[100] | Specifies the value of the Subscription Description field. <small>via [Page 8014 "Service Commitments List"](../page/8014.md)</small> | FlowField: lookup("Subscription Header".Description where("No." = field("Subscription Header No."))); not editable |

## Keys

- PK: Entry No. (clustered)
- Contract: Subscription Contract No., Subscription Contract Line No.
- Key3: Subscription Header No., Partner
- Key4: Supplier Reference Entry No., Subscription Line Start Date

## Events published

- `OnAfterUpdateNextBillingDate(var SubscriptionLine: Record "Subscription Line"; LastBillingToDate: Date)` (integration)
- `OnAfterCheckSubscriptionLineStartDateChangeAllowed(SubscriptionLine: Record "Subscription Line")` (integration): Raised after the Subscription Line Start Date change has passed the billing state check. Subscribers can only tighten the rule, by raising an error of their own.
- `OnAfterSetUsageDataBillingFilters(var UsageDataBilling: Record "Usage Data Billing"; SubscriptionLine: Record "Subscription Line"; BillingFromDate: Date; BillingToDate: Date)` (integration)
- `OnAfterCalculateServiceAmount(var SubscriptionLine: Record "Subscription Line"; CalledByFieldNo: Integer)` (integration)
- `OnAfterUpdateSubscriptionLine(var SubscriptionLine: Record "Subscription Line")` (integration)
- `OnAfterGetCombinedDimensionSetID(var SubscriptionLine: Record "Subscription Line")` (integration)
- `OnBeforeValidateShortcutDimCode(var SubscriptionLine: Record "Subscription Line"; xSubscriptionLine: Record "Subscription Line"; FieldNumber: Integer; var ShortcutDimCode: Code[20])` (integration)
- `OnAfterValidateShortcutDimCode(var SubscriptionLine: Record "Subscription Line"; xSubscriptionLine: Record "Subscription Line"; FieldNumber: Integer; var ShortcutDimCode: Code[20])` (integration)
- `OnBeforeValidateDimensionSetID(var SubscriptionLine: Record "Subscription Line"; xSubscriptionLine: Record "Subscription Line")` (integration)
- `OnAfterValidateDimensionSetID(var SubscriptionLine: Record "Subscription Line"; xSubscriptionLine: Record "Subscription Line")` (integration)
- `OnAfterCopyFromSalesSubscriptionLine(var SubscriptionLine: Record "Subscription Line"; SalesSubscriptionLine: Record "Sales Subscription Line")` (integration)
- `OnBeforeCheckServiceDates(ServiceStartDate: Date; ServiceEndDate: Date; NextBillingDate: Date; var IsHandled: Boolean)` (integration)
- `OnAfterUpdateServiceCommitmentFromContractPriceUpdateLine(var SubscriptionLine: Record "Subscription Line"; SubContractPriceUpdateLine: Record "Sub. Contr. Price Update Line")` (integration)

## Procedures

- `CheckServiceDates()` (internal)
- `CheckServiceDates(ServiceStartDate: Date; ServiceEndDate: Date; NextBillingDate: Date)` (internal)
- `ClearTerminationPeriodsWhenServiceEnded()` (internal)
- `CalculateSubscriptionDates()` (internal)
- `CalculateServiceEndDate()` (internal)
- `CalculateTermUntilDate()` (internal)
- `CalculateTermUntilUsingExtensionTerm(): Boolean` (internal)
- `CalculateCancellationPossibleUntil(): Boolean` (internal)
- `GetReferenceDate(): Date` (internal)
- `CalculatePrice()` (internal)
- `CalculateServiceAmount(CalledByFieldNo: Integer)` (internal)
- `SetUpdateRequiredOnBillingLines()` (internal)
- `UpdateNextBillingDate(LastBillingToDate: Date)` (internal)
- `RecalculateAmountsFromCurrencyData()` (internal)
- `ResetAmountsAndCurrencyFromLCY()` (internal)
- `SetLCYFields(IncludeUnitCost: Boolean)` (internal)
- `IsNoticePeriodEmpty(): Boolean` (internal)
- `UpdateServiceCommitment(CalledByFieldNo: Integer)` (internal)
- `EditDimensionSet()` (internal)
- `SetDefaultDimensions(UseSource: Boolean)` (internal)
- `ApplyContractDimensions(ContractDimSetID: Integer; SourceCode: Code[10]; ContractPartnerTableID: Integer)` (internal)
- `GetCombinedDimensionSetID(DimSetID1: Integer; DimSetID2: Integer)` (internal)
- `UpdateRelatedVendorServiceCommDimensions(OldDimSetID: Integer; NewDimSetID: Integer)` (internal)
- `FilterOnServiceObjectAndTemplate(ServiceObjectNo: Code[20]; ServiceTemplate: Code[20]; ServicePartner: Enum "Service Partner")` (internal)
- `FilterOnServiceObjectAndPackage(ServiceObjectNo: Code[20]; ServiceTemplate: Code[20]; PackageCode: Code[20]; ServicePartner: Enum "Service Partner")` (internal)
- `NewLineForServiceObject()` (internal)
- `InitForServiceObject(ServiceObject: Record "Subscription Header"; ServicePartner: enum "Service Partner")` (internal)
- `UpdateFromCustomerContract(CustomerContract: Record "Customer Subscription Contract")` (internal)
- `UpdateFromVendorContract(VendorContract: Record "Vendor Subscription Contract")` (internal)
- `CopyFromSalesServiceCommitment(SalesServiceCommitment: Record "Sales Subscription Line")` (internal)
- `TestServiceCommitmentsCurrencyCode(var ServiceCommitment: Record "Subscription Line" temporary)` (internal)
- `OpenExchangeSelectionPage(var NewCurrencyFactorDate: Date; var NewCurrencyFactor: Decimal; CurrencyCode: Code[10]; NewMessageTxt: Text; CalledFromServiceObject: Boolean): Boolean`
- `ResetServiceCommitmentCurrencyLCYFromContract(PartnerType: Enum "Service Partner"; ContractNo: Code[20])` (internal)
- `UpdateAndRecalculateServCommCurrencyFromContract(PartnerType: Enum "Service Partner"; ContractNo: Code[20]; CurrencyFactor: Decimal; CurrencyFactorDate: Date; CurrencyCode: Code[10])` (internal)
- `UpdateCurrencyDataOnServiceCommitments(var ServiceCommitment: Record "Subscription Line"; CurrencyFactor: Decimal; CurrencyFactorDate: Date; CurrencyCode: Code[10]; UpdateCurrencyCodeOnServiceCommitment: Boolean)` (internal)
- `FilterOnContract(PartnerType: Enum "Service Partner"; ContractNo: Code[20])` (internal)
- `SetCurrencyData(CurrencyFactor: Decimal; CurrencyFactorDate: Date; CurrencyCode: Code[10])` (internal)
- `EnsureCalculationBaseAmountExcludesVAT(SalesLine: Record "Sales Line"; SalesHeader: Record "Sales Header")` (internal)
- `ErrorIfBillingLineForServiceCommitmentExist()` (internal)
- `GetPartnerNoFromContract(): Code[20]` (internal)
- `ErrorIfBillingLineArchiveForServiceCommitmentExist()` (internal)
- `ArchiveServiceCommitment()` (internal)
- `ArchiveServiceCommitment(PerformUpdateOn: Date; TypeOfPriceUpdate: Enum "Type Of Price Update")` (internal)
- `ArchiveServiceCommitmentFromServiceObject(xServiceObject: Record "Subscription Header"; ServiceObject: Record "Subscription Header")` (internal)
- `CreateServiceCommitmentArchive(var ServiceCommitmentArchive: Record "Subscription Line Archive"; xServiceCommitment: Record "Subscription Line"; PerformUpdateOn: Date; TypeOfPriceUpdate: Enum "Type Of Price Update")` (internal)
- `IsPartnerCustomer(): Boolean` (internal)
- `IsPartnerVendor(): Boolean` (internal)
- `CalculateCalculationBaseAmount()` (internal)
- `RefreshRenewalTerm()` (internal)
- `IsFullyInvoiced(): Boolean` (internal)
- `SetSkipArchiving(NewSkipArchiving: Boolean)` (internal)
- `UpdateNextPriceUpdate()` (internal)
- `SetSkipTestPackageCode(NewSkipTestPackageCode: Boolean)` (internal)
- `ModifyExcludeFromPriceUpdateInAllRelatedServiceCommitments(ServicePartner: Enum "Service Partner"; ContractNo: Code[20]; NewExcludeFromPriceUpdate: Boolean)` (internal)
- `CalculateUnitCost()` (internal)
- `UpdateServiceCommitmentFromContractPriceUpdateLine(ContractPriceUpdateLine: Record "Sub. Contr. Price Update Line")` (internal)
- `ServiceCommitmentArchiveExistsForPeriodExists(var ServiceCommitmentArchive: Record "Subscription Line Archive"; RecurringBillingFrom: Date; RecurringBillingTo: Date): Boolean` (internal)
- `UpdateServiceCommitmentFromServiceCommitmentArchive(ServiceCommitmentArchive: Record "Subscription Line Archive")` (internal)
- `SetPerformUpdateForContractPriceUpdate(var PerformUpdate: Boolean; TypeOfPriceUpdate: Enum "Type Of Price Update"; PerformUpdateOn: Date)` (internal)
- `UnpostedDocumentExists(): Boolean` (internal)
- `BillingLineExists(): Boolean` (internal)
- `DisconnectContractLine(EntryNo: Integer)` (internal)
- `DeleteOrDisconnectServiceCommitment(EntryNo: Integer)` (internal)
- `IsUsageDataBillingFound(var UsageDataBilling: Record "Usage Data Billing"; BillingFromDate: Date; BillingToDate: Date): Boolean` (internal)
- `SetUsageDataBillingFilters(var UsageDataBilling: Record "Usage Data Billing"; BillingFromDate: Date; BillingToDate: Date)` (internal)
- `IsUsageBasedBillingValid(): Boolean` (internal)
- `GetUsageDataChargeEndDateCrossingPeriodEnd(BillingFromDate: Date; BillingToDate: Date): Date` (internal)
- `GetSupplierChargeEndDateIfRebillingMetadataExist(FromDate: Date): Date` (internal)
- `GetLastSupplierChargeEndDateIfMetadataExist(): Date` (internal)
- `GetSupplierChargeStartDateIfRebillingMetadataExist(FromDate: Date): Date` (internal)
- `ShowUsageDataBillingMetadata()` (internal)
- `UnitPriceForPeriod(ChargePeriodStart: Date; ChargePeriodEnd: Date): Decimal`
- `UnitPriceAndCostForPeriod(BillingRhythm: DateFormula; ChargePeriodStart: Date; ChargePeriodEnd: Date; var UnitPrice: Decimal; var UnitCost: Decimal; var UnitCostLCY: Decimal; var BillingReferenceDateChanged: Boolean)` (internal)
- `CalculatePeriodCountAndDaysCount(PeriodFormula: DateFormula; StartDate: Date; EndDate: Date; var Periods: Integer; var FollowUpDays: Integer; var FollowUpPeriodDays: Integer)` (internal)
- `GetBillingPeriodRatio(BillingRhythm: DateFormula; BillingBaseRhytm: DateFormula): Decimal` (internal)
- `CalculateNextToDate(PeriodFormula: DateFormula; FromDate: Date): Date` (internal)
- `OpenDeferralsExist(): Boolean` (internal)

Plus 28 local procedures.

## Triggers

OnInsert, OnModify, OnDelete

## Relations

- drill-down page [Page 8014 "Service Commitments List"](../page/8014.md)
- lookup page [Page 8014 "Service Commitments List"](../page/8014.md)
- Shortcut Dimension 1 Code: TableRelation [Table 349 "Dimension Value"](../table/349.md)
- Shortcut Dimension 2 Code: TableRelation [Table 349 "Dimension Value"](../table/349.md)
- Currency Code: TableRelation [Table 4 "Currency"](../table/4.md)
- Dimension Set ID: TableRelation [Table 480 "Dimension Set Entry"](../table/480.md)
- Customer Price Group: TableRelation [Table 6 "Customer Price Group"](../table/6.md)
- Planned Sub. Line exists: CalcFormula [Table 8002 "Planned Subscription Line"](../table/8002.md)
- Supplier Reference Entry No.: TableRelation [Table 8015 "Usage Data Supplier Reference"](../table/8015.md)
- Subscription Contract No.: TableRelation [Table 8052 "Customer Subscription Contract"](../table/8052.md) (conditional)
- Template: TableRelation [Table 8054 "Sub. Package Line Template"](../table/8054.md)
- Subscription Package Code: TableRelation [Table 8055 "Subscription Package"](../table/8055.md)
- Item No.: CalcFormula [Table 8057 "Subscription Header"](../table/8057.md)
- Quantity: CalcFormula [Table 8057 "Subscription Header"](../table/8057.md)
- Source No.: CalcFormula [Table 8057 "Subscription Header"](../table/8057.md)
- Source Type: CalcFormula [Table 8057 "Subscription Header"](../table/8057.md)
- Sub. Header Customer No.: CalcFormula [Table 8057 "Subscription Header"](../table/8057.md)
- Subscription Description: CalcFormula [Table 8057 "Subscription Header"](../table/8057.md)
- Variant Code: CalcFormula [Table 8057 "Subscription Header"](../table/8057.md)
- Subscription Header No.: TableRelation [Table 8057 "Subscription Header"](../table/8057.md)
- Subscription Contract Line No.: TableRelation [Table 8062 "Cust. Sub. Contract Line"](../table/8062.md) (conditional)
- Subscription Contract No.: TableRelation [Table 8063 "Vendor Subscription Contract"](../table/8063.md) (conditional)
- Subscription Contract Line No.: TableRelation [Table 8065 "Vend. Sub. Contract Line"](../table/8065.md) (conditional)

## Referenced by

18 fields in 9 objects relate to this table (TableRelation or CalcFormula).

- [Table 8001 "Sub. Contract Renewal Line"](../table/8001.md): Amount, Billing Rhythm, Currency Code, Partner, Price, Subscription Line Description, Subscription Line End Date, Subscription Line Start Date, Subscription Line Entry No.
- [Table 8070 "Subscription Billing Cue"](../table/8070.md): Sub. L. wo Cust. Sub. Contract, Sub. L. wo Vend. Sub. Contract
- [Table 8016 "Usage Data Supp. Subscription"](../table/8016.md): Subscription Line Entry No.
- [Table 8021 "Usage Data Billing Metadata"](../table/8021.md): Subscription Line Entry No.
- [Table 8022 "Contract Billing Err. Log"](../table/8022.md): Subscription Entry No.
- [Table 8061 "Billing Line"](../table/8061.md): Subscription Line Entry No.
- [Table 8062 "Cust. Sub. Contract Line"](../table/8062.md): Subscription Line Entry No.
- [Table 8065 "Vend. Sub. Contract Line"](../table/8065.md): Subscription Line Entry No.
- [Table 8068 "Sales Subscription Line"](../table/8068.md): Subscription Line Entry No.

## Pages and codeunits on this table

- [Page 8014 "Service Commitments List"](../page/8014.md) (source table)
- [Page 8018 "Service Commitments API"](../page/8018.md) (source table)
- [Page 8064 "Service Commitments"](../page/8064.md) (source table)
- [Page 8069 "Serv. Comm. WO Cust. Contract"](../page/8069.md) (source table)
- [Page 8076 "Serv. Comm. WO Vend. Contract"](../page/8076.md) (source table)
- [Page 8095 "Get Vendor Contract Lines"](../page/8095.md) (source table)

## Recent changes

- 2026-10-07 [#10446 [Bug][Subscription Billing] "Subscription Lines - Overdue" cue counts lines of contracts that already ended](../../changes/bcapps/10446.md) (main, BC30, fix)
- 2026-09-22 [#11679 [29.x][Subscription Billing] 1M 'Align to End of Month' line with end date produces a 1-day prorated stub](../../changes/bcapps/11679.md) (releases/29.x, BC29, fix)
- 2026-09-18 [#11399 [master][Subscription Billing] 1M 'Align to End of Month' line with end date produces a 1-day prorated stub](../../changes/bcapps/11399.md) (main, BC30, fix)
- 2026-09-17 [#9225 [Extensibility][SubscriptionBilling]: Make usage data billing filtering extensible in SetUsageDataBillingFilters](../../changes/bcapps/9225.md) (main, BC30, feature)
- 2026-09-11 [#10970 [Master] -SubBilling BillingLine doesn't consider entries for usage date ranges crossing periods](../../changes/bcapps/10970.md) (main, BC30, fix)
- 2026-09-10 [#11218 [master] - Subscription Contract Price Update applies the lowest sales price across all Unit of Measure codes instead of respecting Unit-Specific Price List entries in Subscription Billing.](../../changes/bcapps/11218.md) (main, BC30, fix)
- 2026-08-29 [#10235 [Bug][SubscriptionBilling] Enforce Subscription Line Start Date change rules on all edit paths](../../changes/bcapps/10235.md) (main, BC30, fix)
- 2026-08-27 [#10675 Temporarily suppress AS0072 (ObsoleteTag 29.0) on 10 Base App elements for v30 prep](../../changes/bcapps/10675.md) (main, BC30, fix)
- 2026-08-27 [#10608 [master]-Bug 647093-[Subscription Billing] Incorrect Invoice Amounts when using explicit values in Subscription Line End Date](../../changes/bcapps/10608.md) (main, BC30, fix)
- 2026-07-30 [#8553 [Bug][SubscriptionBilling]: Performance: Billing document creation does not scale to large datasets (4M+ subscription lines)](../../changes/bcapps/8553.md) (main, BC30, performance)
- 2026-07-14 [#8115 Subscription Billing: respect Default Dimension Priorities on Subscription Lines](../../changes/bcapps/8115.md) (main, BC30, fix)

## Across versions

- Present in: BC29-30
- Changed (declaration) in: BC30

## Deprecations

- field Item No.: Pending 26.0 (#if not CLEANSCHEMA29), "Replaced by field Source No."

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## 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: "table", object_name: "Subscription Line")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
