---
id: object/codeunit/1720
type: object
title: Codeunit 1720 "Deferral Utilities"
summary: Codeunit 1720 "Deferral Utilities" in Base Application (Microsoft.Finance.Deferral). 24 public procedures, 40 events. Present since at least BC23, still in BC30, changed in BC24-28.
tier: official
language: en
tags:
  - codeunit
  - base application
versions:
  introduced: null
  last_changed: "28"
  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: 31adf36a656559de7d9d8bb36dd47d7ae485eacc4dd496c6c3955ba8fc6ee3d4
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/Deferral/DeferralUtilities.Codeunit.al
    title: src/Layers/W1/BaseApp/Finance/Deferral/DeferralUtilities.Codeunit.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn: []
  objects: []
  features: []
  topics: []
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/9943
object_type: codeunit
object_id: 1720
name: Deferral Utilities
namespace: Microsoft.Finance.Deferral
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids: []
counts:
  fields: 0
  procedures: 83
  events: 40
  subscribers: 0
relations:
  out: 0
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 1
  calls: 5
  called_by: 19
  implements: 0
---

# Codeunit 1720 "Deferral Utilities"

> Codeunit 1720 "Deferral Utilities" in Base Application (Microsoft.Finance.Deferral). 24 public procedures, 40 events. Present since at least BC23, still in BC30, changed in BC24-28.

Base Application · Microsoft.Finance.Deferral · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/Deferral/DeferralUtilities.Codeunit.al) · facts from BC29

## Events published

- `OnAfterCalculateDaysPerPeriod(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised after calculating deferral amounts using days per period method. Enables custom processing or adjustments to deferral calculations.
- `OnAfterCalculateEqualPerPeriod(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised after calculating deferral amounts using equal per period method. Enables custom processing or adjustments to equal period deferral calculations.
- `OnAfterCalculateStraightline(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised after calculating deferral amounts using straight-line method. Enables custom processing or adjustments to straight-line deferral calculations.
- `OnAfterCalculateUserDefined(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised after calculating deferral amounts using user-defined method. Enables custom processing or adjustments to user-defined deferral calculations.
- `OnAfterCreateDeferralSchedule(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template"; CalcMethod: Enum "Deferral Calculation Method")` (integration): Integration event raised after creating the complete deferral schedule. Enables custom processing or validation after schedule generation is complete.
- `OnAfterCreateScheduleFromGL(var GenJournalLine: Record "Gen. Journal Line"; var PostedDeferralHeader: Record "Posted Deferral Header")` (integration): Integration event raised after creating deferral schedule from general journal line posting. Enables custom processing or field updates after G/L deferral schedule creation.
- `OnAfterSetStartDate(DeferralTemplate: Record "Deferral Template"; var StartDate: Date; var AdjustedStartDate: Date)` (integration): Integration event raised after setting the start date for deferral calculations. Enables custom start date logic or adjustments based on deferral template settings.
- `OnBeforeCalculateDaysPerPeriod(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised before calculating deferral amounts using days per period method. Enables custom preprocessing or parameter modification before days-based calculations.
- `OnBeforeCalculateEqualPerPeriod(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised before calculating deferral amounts using equal per period method. Enables custom preprocessing or parameter modification before equal period calculations.
- `OnBeforeCalculateStraightline(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised before calculating deferral amounts using straight-line method. Enables custom preprocessing or parameter modification before straight-line calculations.
- `OnBeforeCalculateUserDefined(DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration): Integration event raised before calculating deferral amounts using user-defined method. Enables custom preprocessing or parameter modification before user-defined calculations.
- `OnBeforeCreateDeferralSchedule(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; AmountToDefer: Decimal; CalcMethod: Enum "Deferral Calculation Method"; var StartDate: Date; var NoOfPeriods: Integer; ApplyDeferralPercentage: Boolean; DeferralDescription: Text[100]; var AdjustStartDate: Boolean; CurrencyCode: Code[10]; var IsHandled: Boolean; var RedistributeDeferralSchedule: Boolean)` (integration): Integration event raised before creating a deferral schedule with comprehensive parameters. Enables custom schedule creation logic or parameter validation before schedule generation.
  - subscribers: [Codeunit 2674 "Alloc. Acc. Handle Doc. Post"](../codeunit/2674.md) OnBeforeCreateDeferralSchedule
- `OnBeforeDeferralCodeOnValidate(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; Amount: Decimal; PostingDate: Date; Description: Text[100]; CurrencyCode: Code[10]; var IsHandled: Boolean)` (integration): Integration event raised before validating deferral code input. Enables custom deferral code validation logic or preprocessing.
- `OnBeforePostedDeferralHeaderInsert(var PostedDeferralHeader: Record "Posted Deferral Header"; GenJournalLine: Record "Gen. Journal Line")` (integration): Integration event raised before inserting posted deferral header record. Enables custom field updates or validation before posted deferral header creation.
- `OnBeforePostedDeferralLineInsert(var PostedDeferralLine: Record "Posted Deferral Line"; GenJournalLine: Record "Gen. Journal Line")` (integration): Integration event raised before inserting posted deferral line record. Enables custom field updates or validation before posted deferral line creation.
- `OnBeforeOpenLineScheduleEdit(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; Amount: Decimal; PostingDate: Date; Description: Text[100]; CurrencyCode: Code[10])` (integration): Integration event raised before opening deferral schedule editor for line editing. Enables custom preprocessing or parameter modification before schedule editing.
- `OnAfterAdjustTotalAmountForDeferrals(DeferralCode: Code[10]; var AmtToDefer: Decimal; var AmtToDeferACY: Decimal; var TotalAmount: Decimal; var TotalAmountACY: Decimal; DiscountAmount: Decimal; DiscountAmountACY: Decimal)` (integration): Integration event raised after adjusting total amounts for deferral calculations. Enables custom processing or validation after deferral amount adjustments.
- `OnBeforeCalcDeferralNoOfPeriods(CalcMethod: Enum "Deferral Calculation Method"; var NoOfPeriods: Integer; StartDate: Date; var IsHandled: Boolean)` (integration): Integration event raised before calculating number of deferral periods. Enables custom period calculation logic based on calculation method and start date.
- `OnBeforeCheckPostingDate(DeferralHeader: Record "Deferral Header"; var DeferralLine: record "Deferral Line"; var IsHandled: Boolean)` (integration): Integration event raised before checking posting date validity for deferral lines. Enables custom posting date validation logic for deferral schedules.
- `OnBeforeGetDeferralDescription(GenJnlBatchName: Code[10]; DocumentNo: Code[20]; Description: Text[100]; var Result: Text[100]; var IsHandled: Boolean)` (integration): Integration event raised before generating deferral description text. Enables custom description logic for deferral schedule entries.
- `OnCalculateEqualPerPeriodOnBeforeDeferralLineInsert(DeferralHeader: Record "Deferral Header"; var DeferralLine: record "Deferral Line")` (integration): Integration event raised before inserting deferral line during equal per period calculation. Enables custom field updates or validation before line insertion.
- `OnCalculateStraightlineOnAfterCalcSecondPeriodDate(DeferralHeader: Record "Deferral Header"; PostDate: Date; var FirstPeriodDate: Date; var SecondPeriodDate: Date)` (integration): Integration event raised after calculating the second period date in straight-line deferral calculations. Enables custom period date adjustments for straight-line deferral schedules.
- `OnCalculateStraightlineOnBeforeDeferralLineInsert(var DeferralLine: Record "Deferral Line"; DeferralHeader: Record "Deferral Header")` (integration): Integration event raised before inserting deferral line during straight-line calculation. Enables custom field updates or validation before line insertion.
- `OnCalculateStraightlineOnBeforeCalcPeriodicDeferralAmount(var DeferralHeader: Record "Deferral Header"; var PeriodicDeferralAmount: Decimal; AmountRoundingPrecision: Decimal; var IsHandled: Boolean)` (integration): Integration event raised before calculating periodic deferral amount in straight-line method. Enables custom amount calculation logic for straight-line deferral periods.
- `OnCalculateStraightlineOnAfterCalcPeriodicDeferralAmount(var DeferralHeader: Record "Deferral Header"; var NoOfLoops: Integer)` (integration): Integration event raised after calculating periodic deferral amount in straight-line method. Enables subscribers to control the number of loops within CalculateStraightline.
- `OnCalculateDaysPerPeriodOnAfterCalcEndDate(var DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template"; var EndDate: Date)` (integration): Integration event raised after calculating end date for days per period deferral method. Enables custom end date adjustments for days-based deferral calculations.
- `OnCalculateDaysPerPeriodOnBeforeDeferralLineInsert(DeferralHeader: Record "Deferral Header"; var DeferralLine: record "Deferral Line")` (integration): Integration event raised before inserting deferral line during days per period calculation. Enables custom field updates or validation before line insertion.
- `OnCalculateUserDefinedOnBeforeDeferralLineInsert(DeferralHeader: Record "Deferral Header"; var DeferralLine: record "Deferral Line")` (integration): Integration event raised before inserting deferral line during user-defined calculation. Enables custom field updates or validation before line insertion.
- `OnSetDeferralRecordsOnBeforeDeferralHeaderModify(var DeferralHeader: Record "Deferral Header")` (integration): Integration event raised before modifying deferral header during record setup. Enables custom field updates or validation before deferral header modification.
- `OnBeforeIsDateNotAllowed(PostingDate: Date; var Result: Boolean; var IsHandled: Boolean)` (integration): Integration event raised before checking if a posting date is allowed for deferral processing. Enables custom date validation logic for deferral schedule processing.
- `OnBeforeUpdateDeferralLineDescription(var DeferralLine: Record "Deferral Line"; DeferralHeader: Record "Deferral Header"; DeferralTemplate: Record "Deferral Template"; PostDate: Date; var IsHandled: Boolean)` (integration): Integration event raised before updating deferral line description during schedule creation. Enables custom description generation logic for deferral line entries.
- `OnBeforeValidateDeferralTemplate(DeferralTemplate: Record "Deferral Template"; var IsHandled: Boolean)` (integration): Integration event raised before validating deferral template settings. Enables custom validation logic for deferral template configuration.
- `OnInitializeDeferralHeaderAndSetPostDateAfterInitDeferralLine(var DeferralLine: Record "Deferral Line")` (integration): Integration event raised after initializing deferral line during deferral header initialization. Enables custom field updates or additional processing after deferral line setup.
- `OnAfterInitializeDeferralHeaderAndSetPostDate(var DeferralLine: Record "Deferral Line"; DeferralHeader: Record "Deferral Header"; PeriodicCount: Integer; var PostDate: Date)` (integration): Integration event raised after initializing deferral header and setting the post date. Enables custom control over the PostDate variable assignment.
- `OnOpenLineScheduleEditOnBeforeDeferralScheduleSetParameters(var DeferralSchedule: Page "Deferral Schedule"; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; DeferralHeader: Record "Deferral Header"; var IsHandled: Boolean)` (integration): Integration event raised before setting parameters for deferral schedule page during line editing. Enables custom parameter setup or validation before opening deferral schedule editor.
- `OnBeforeCheckDeferralConditionForGenJournal(var GenJournalLine: Record "Gen. Journal Line"; var IsHandled: Boolean)` (integration): Integration event raised before checking deferral conditions for general journal lines. Enables custom deferral condition logic for journal line processing.
- `OnBeforeRemoveOrSetDeferralSchedule(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; Amount: Decimal; PostingDate: Date; Description: Text[100]; CurrencyCode: Code[10]; AdjustStartDate: Boolean; var IsHandled: Boolean)` (integration): Integration event raised before removing or setting up deferral schedule for a document line. Enables custom deferral schedule management logic and validation.
- `OnBeforeRoundDeferralAmount(var DeferralHeader: Record "Deferral Header"; CurrencyCode: Code[10]; CurrencyFactor: Decimal; PostingDate: Date; var IsHandled: Boolean)` (integration)
- `OnCreateDeferralScheduleOnCalcMethodElse(CalcMethod: Enum "Deferral Calculation Method"; DeferralHeader: Record "Deferral Header"; var DeferralLine: Record "Deferral Line"; DeferralTemplate: Record "Deferral Template")` (integration)
- `OnBeforeGetPeriodStartingDate(PostingDate: Date; var Result: Date; var PeriodStartingDateHandled: Boolean)` (integration): Integration event raised before determining the period starting date. Enables custom logic for returning the period starting date based on the posting date.

## Procedures

- `CreateRecurringDescription(PostingDate: Date; Description: Text[100]): Text[100]`: Creates a period-specific description by substituting placeholders with actual date values. Supports day, week, month, month text, accounting period name, and year placeholders.
- `CreateDeferralSchedule(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; AmountToDefer: Decimal; CalcMethod: Enum "Deferral Calculation Method"; StartDate: Date; NoOfPeriods: Integer; ApplyDeferralPercentage: Boolean; DeferralDescription: Text[100]; AdjustStartDate: Boolean; CurrencyCode: Code[10])`: Creates a complete deferral schedule based on the specified parameters and calculation method. Generates header and line records with amounts distributed according to the selected calculation method.
- `CalcDeferralNoOfPeriods(CalcMethod: Enum "Deferral Calculation Method"; NoOfPeriods: Integer; StartDate: Date): Integer`: Calculates the actual number of deferral periods based on the calculation method and parameters. For user-defined methods, returns the number of existing deferral lines instead of the parameter value.
- `FilterDeferralLines(var DeferralLine: Record "Deferral Line"; DeferralDocType: Option; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer)`: Sets filters on the deferral line record to retrieve lines for a specific source document. Used throughout the deferral system to isolate deferral lines by their source document parameters.
- `IsDateNotAllowed(PostingDate: Date): Boolean`: Checks if the specified posting date is allowed for deferral posting based on user and general ledger setup.
- `SetDeferralRecords(var DeferralHeader: Record "Deferral Header"; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; CalcMethod: Enum "Deferral Calculation Method"; NoOfPeriods: Integer; AdjustedDeferralAmount: Decimal; AdjustedStartDate: Date; DeferralCode: Code[10]; DeferralDescription: Text[100]; AmountToDefer: Decimal; AdjustStartDate: Boolean; CurrencyCode: Code[10])`: Creates or updates a deferral header record with the specified parameters. Handles both new header creation and updating existing headers with new calculation parameters.
- `RemoveOrSetDeferralSchedule(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; Amount: Decimal; PostingDate: Date; Description: Text[100]; CurrencyCode: Code[10]; AdjustStartDate: Boolean)`: Creates, updates, or removes a deferral schedule based on the provided deferral code and parameters. If no deferral code is provided, removes any existing schedule. If a code is provided, creates or updates the schedule.
- `CreateScheduleFromGL(GenJournalLine: Record "Gen. Journal Line"; FirstEntryNo: Integer)`: Creates posted deferral records from a general journal line's deferral schedule. Transfers the deferral header and lines to posted tables and links them to the posted general ledger entry.
- `DeferralCodeOnValidate(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; Amount: Decimal; PostingDate: Date; Description: Text[100]; CurrencyCode: Code[10])`: Validates and creates/updates a deferral schedule when a deferral code is entered or changed. Removes existing schedule if the code is cleared.
- `DeferralCodeOnDelete(DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer)`: Removes a deferral schedule when a deferral code is deleted or cleared. Deletes the header and all associated deferral lines.
- `OpenLineScheduleEdit(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer; Amount: Decimal; PostingDate: Date; Description: Text[100]; CurrencyCode: Code[10]): Boolean`: Opens the deferral schedule editing page for a specific line. Creates a new schedule if one doesn't exist, or allows editing of an existing schedule.
- `OpenLineScheduleView(DeferralCode: Code[10]; DeferralDocType: Integer; GenJnlTemplateName: Code[10]; GenJnlBatchName: Code[10]; DocumentType: Integer; DocumentNo: Code[20]; LineNo: Integer)`: Opens the deferral schedule view page for posted/archived deferrals in read-only mode.
- `OpenLineScheduleArchive(DeferralCode: Code[10]; DeferralDocType: Integer; DocumentType: Integer; DocumentNo: Code[20]; DocNoOccurence: Integer; VersionNo: Integer; LineNo: Integer)`: Opens the archived deferral schedule view page for document archive scenarios.
- `RoundDeferralAmount(var DeferralHeader: Record "Deferral Header"; CurrencyCode: Code[10]; CurrencyFactor: Decimal; PostingDate: Date; var AmtToDefer: Decimal; var AmtToDeferLCY: Decimal)`: Rounds deferral amounts to appropriate precision based on currency settings. Handles both LCY and foreign currency amounts with proper rounding.
- `InitializeDeferralHeaderAndSetPostDate(var DeferralLine: Record "Deferral Line"; DeferralHeader: Record "Deferral Header"; PeriodicCount: Integer; var PostDate: Date)`: Initializes a deferral line record with header information and sets the appropriate posting date. Handles period-based date calculations using accounting periods.
- `GetDeferralStartDate(DeferralDocType: Integer; RecordDocumentType: Integer; RecordDocumentNo: Code[20]; RecordLineNo: Integer; DeferralCode: Code[10]; PostingDate: Date): Date`: Gets the start date for a deferral from existing schedule or calculates from template settings. Used to maintain consistency when adjusting existing deferrals.
- `AdjustTotalAmountForDeferrals(DeferralCode: Code[10]; var AmtToDefer: Decimal; var AmtToDeferACY: Decimal; var TotalAmount: Decimal; var TotalAmountACY: Decimal; var TotalVATBase: Decimal; var TotalVATBaseACY: Decimal)`: Adjusts total amounts for deferral posting by subtracting deferred amounts from totals. Handles both LCY and ACY amounts with VAT base calculations.
- `AdjustTotalAmountForDeferrals(DeferralCode: Code[10]; var AmtToDefer: Decimal; var AmtToDeferACY: Decimal; var TotalAmount: Decimal; var TotalAmountACY: Decimal; var TotalVATBase: Decimal; var TotalVATBaseACY: Decimal; DiscountAmount: Decimal; DiscountAmountACY: Decimal)`: Adjusts total amounts for deferral posting including discount handling. Extended version with discount amount parameters.
- `AdjustTotalAmountForDeferralsNoBase(DeferralCode: Code[10]; var AmtToDefer: Decimal; var AmtToDeferACY: Decimal; var TotalAmount: Decimal; var TotalAmountACY: Decimal)`: Adjusts total amounts for deferral posting without VAT base calculations. Simplified version for scenarios where VAT base is not required.
- `AdjustTotalAmountForDeferralsNoBase(DeferralCode: Code[10]; var AmtToDefer: Decimal; var AmtToDeferACY: Decimal; var TotalAmount: Decimal; var TotalAmountACY: Decimal; DiscountAmount: Decimal; DiscountAmountACY: Decimal)`: Adjusts total amounts for deferral posting without VAT base calculations, including discount handling. Extended version with discount amount parameters.
- `CheckDeferralConditionForGenJournal(var GenJournalLine: Record "Gen. Journal Line")`: Validates general journal line conditions for deferral usage. Ensures source codes are properly configured for deferral processing.
- `ShowGenJournalTemplate(ErrorInfo: ErrorInfo)`: Opens the General Journal Templates page filtered to the template from the error context. Action method for error handling in deferral validation.
- `ShowSourceCodeSetup(ErrorInfo: ErrorInfo)`: Opens the Source Code Setup page for configuring source codes. Action method for error handling in deferral validation.
- `CreateCopyOfDeferralSchedule(DeferralHeader: Record "Deferral Header"; NewSourceLineNo: Integer)`: Creates a copy of an existing deferral schedule for a new source line. Used when copying document lines to maintain consistent deferral schedules.

Plus 19 local procedures.

## Triggers

OnRun

## Calls

From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an `Object::"Name"` argument. Interface dispatch and calls through events are not counted, so the list is not complete.

- [Codeunit 11 "Gen. Jnl.-Check Line"](../codeunit/11.md) (2 calls: `CheckPostingDate → DeferralPostingDateNotAllowed`, `CheckPostingDate → SetGenJnlBatch`)
- [Codeunit 12 "Gen. Jnl.-Post Line"](../codeunit/12.md) (1 call: `CreateScheduleFromGL → RemoveDeferralSchedule`)
- [Codeunit 360 "Accounting Period Mgt."](../codeunit/360.md) (1 call: `IsAccountingPeriodExist → InitDefaultAccountingPeriod`)
- [Page 1704 "Deferral Schedule View"](../page/1704.md) (1 call: `OpenLineScheduleView → (object)`)
- [Page 1706 "Deferral Schedule Archive"](../page/1706.md) (1 call: `OpenLineScheduleArchive → (object)`)

## Called by

- [Codeunit 12 "Gen. Jnl.-Post Line"](../codeunit/12.md) (6 calls: `CheckDeferralPostingDate → IsDateNotAllowed`, `CreateDeferralScheduleFromGL → CreateScheduleFromGL`, `PostDeferral → FilterDeferralLines`, …)
- [Codeunit 5063 "ArchiveManagement"](../codeunit/5063.md) (4 calls: `RestoreDeferrals → RemoveOrSetDeferralSchedule`, `RestoreDeferrals → SetDeferralRecords`, `RoundPurchaseDeferralsForArchive → RoundDeferralAmount`, …)
- [Codeunit 815 "Sales Post Invoice"](../codeunit/815.md) (4 calls: `CalcDeferralAmounts → FilterDeferralLines`, `CreatePostedDeferralSchedule → FilterDeferralLines`, `PrepareDeferralLine → FilterDeferralLines`, …)
- [Codeunit 816 "Purch. Post Invoice"](../codeunit/816.md) (4 calls: `CalcDeferralAmounts → FilterDeferralLines`, `CreatePostedDeferralSchedule → FilterDeferralLines`, `PrepareDeferralLine → FilterDeferralLines`, …)
- [Table 37 "Sales Line"](../table/37.md) (3 calls: `OnDelete → DeferralCodeOnDelete`, `ShowDeferrals → OpenLineScheduleEdit`, `UpdateDeferralAmounts → RemoveOrSetDeferralSchedule`)
- [Table 39 "Purchase Line"](../table/39.md) (3 calls: `OnDelete → DeferralCodeOnDelete`, `ShowDeferrals → OpenLineScheduleEdit`, `UpdateDeferralAmounts → RemoveOrSetDeferralSchedule`)
- [Table 1701 "Deferral Header"](../table/1701.md) (2 calls: `CalculateSchedule → CreateDeferralSchedule`, `OnDelete → FilterDeferralLines`)
- [Table 81 "Gen. Journal Line"](../table/81.md) (2 calls: `OnDelete → DeferralCodeOnDelete`, `ShowDeferrals → OpenLineScheduleEdit`)
- [Codeunit 2678 "Sales Alloc. Acc. Mgt."](../codeunit/2678.md) (1 call: `CopyDeferralSchedule → CreateCopyOfDeferralSchedule`)
- [Codeunit 2679 "Purchase Alloc. Acc. Mgt."](../codeunit/2679.md) (1 call: `CopyDeferralSchedule → CreateCopyOfDeferralSchedule`)
- [Codeunit 80 "Sales-Post"](../codeunit/80.md) (1 call: `DeleteAfterPosting → RemoveOrSetDeferralSchedule`)
- [Codeunit 90 "Purch.-Post"](../codeunit/90.md) (1 call: `DeleteAfterPosting → RemoveOrSetDeferralSchedule`)
- [Page 1702 "Deferral Schedule"](../page/1702.md) (1 call: `OnQueryClosePage → CalcDeferralNoOfPeriods`)
- [Table 113 "Sales Invoice Line"](../table/113.md) (1 call: `ShowDeferrals → OpenLineScheduleView`)
- [Table 115 "Sales Cr.Memo Line"](../table/115.md) (1 call: `ShowDeferrals → OpenLineScheduleView`)
- [Table 123 "Purch. Inv. Line"](../table/123.md) (1 call: `ShowDeferrals → OpenLineScheduleView`)
- [Table 125 "Purch. Cr. Memo Line"](../table/125.md) (1 call: `ShowDeferrals → OpenLineScheduleView`)
- [Table 5108 "Sales Line Archive"](../table/5108.md) (1 call: `ShowDeferrals → OpenLineScheduleArchive`)
- [Table 5110 "Purchase Line Archive"](../table/5110.md) (1 call: `ShowDeferrals → OpenLineScheduleArchive`)

## Recent changes

- 2026-08-05 [#9943 [Master]-Purchase invoice in USD with deferral shows 0 "Amount LCY" in Deferral Schedule View"](../../changes/bcapps/9943.md) (main, BC30, fix)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24-28

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). The call sections above are our own, per object, from the BC29 call graph. 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: "Deferral Utilities")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
