Table 1706 Deferral Posting Buffer

App
Base Application
Namespace
Microsoft.Finance.Deferral
Versions
17-28

Fields, 30Keys, 2Procedures, 12Events, 7Obsolete, 3

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Finance/Deferral/DeferralPostingBuffer.Table.al649 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Finance.Deferral;

using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Account;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Finance.SalesTax;
using Microsoft.Finance.VAT.Setup;
using Microsoft.Foundation.Enums;
using Microsoft.Projects.Project.Job;
using Microsoft.Purchases.Document;
using Microsoft.Sales.Document;
using Microsoft.Utilities;

/// <summary>
/// Temporary buffer table that accumulates deferral posting entries before they are written to G/L Entry.
/// Consolidates multiple deferral lines with identical posting parameters into single G/L entries.
/// </summary>
table 1706 "Deferral Posting Buffer"
{
    Caption = 'Deferral Posting Buffer';
    DataClassification = CustomerContent;

    fields
    {
        /// <summary>
        /// Unique sequential identifier for each buffer entry.
        /// </summary>
        field(1; "Entry No."; Integer)
        {
            Caption = 'Entry No.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Source type of the deferred item (G/L Account, Item, Resource, Fixed Asset).
        /// </summary>
        field(2; Type; Option)
        {
            Caption = 'Type';
            DataClassification = SystemMetadata;
            OptionCaption = 'Prepmt. Exch. Rate Difference,G/L Account,Item,Resource,Fixed Asset';
            OptionMembers = "Prepmt. Exch. Rate Difference","G/L Account",Item,Resource,"Fixed Asset";
        }
        /// <summary>
        /// G/L Account number for posting the deferral entry.
        /// Must be a posting account that is not blocked.
        /// </summary>
        field(3; "G/L Account"; Code[20])
        {
            Caption = 'G/L Account';
            DataClassification = SystemMetadata;
            NotBlank = true;
            TableRelation = "G/L Account" where("Account Type" = const(Posting),
                                                 Blocked = const(false));
        }
        /// <summary>
        /// General Business Posting Group for VAT and tax calculations.
        /// </summary>
        field(4; "Gen. Bus. Posting Group"; Code[20])
        {
            Caption = 'Gen. Bus. Posting Group';
            DataClassification = SystemMetadata;
            TableRelation = "Gen. Business Posting Group";
        }
        /// <summary>
        /// General Product Posting Group for VAT and tax calculations.
        /// </summary>
        field(5; "Gen. Prod. Posting Group"; Code[20])
        {
            Caption = 'Gen. Prod. Posting Group';
            DataClassification = SystemMetadata;
            TableRelation = "Gen. Product Posting Group";
        }
        /// <summary>
        /// VAT Business Posting Group for VAT calculation and posting.
        /// </summary>
        field(6; "VAT Bus. Posting Group"; Code[20])
        {
            Caption = 'VAT Bus. Posting Group';
            DataClassification = SystemMetadata;
            TableRelation = "VAT Business Posting Group";
        }
        /// <summary>
        /// VAT Product Posting Group for VAT calculation and posting.
        /// </summary>
        field(7; "VAT Prod. Posting Group"; Code[20])
        {
            Caption = 'VAT Prod. Posting Group';
            DataClassification = SystemMetadata;
            TableRelation = "VAT Product Posting Group";
        }
        /// <summary>
        /// Tax Area Code for sales tax calculations in North American localization.
        /// </summary>
        field(8; "Tax Area Code"; Code[20])
        {
            Caption = 'Tax Area Code';
            DataClassification = SystemMetadata;
            TableRelation = "Tax Area";
        }
        /// <summary>
        /// Tax Group Code for sales tax calculations in North American localization.
        /// </summary>
        field(9; "Tax Group Code"; Code[20])
        {
            Caption = 'Tax Group Code';
            DataClassification = SystemMetadata;
            TableRelation = "Tax Group";
        }
        /// <summary>
        /// Indicates whether the entry is subject to sales tax.
        /// </summary>
        field(10; "Tax Liable"; Boolean)
        {
            Caption = 'Tax Liable';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Indicates whether the entry is subject to use tax.
        /// </summary>
        field(11; "Use Tax"; Boolean)
        {
            Caption = 'Use Tax';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Project number for job-related deferral entries.
        /// </summary>
        field(12; "Job No."; Code[20])
        {
            Caption = 'Project No.';
            DataClassification = SystemMetadata;
            TableRelation = Job;
        }
        /// <summary>
        /// Date when this deferral entry will be posted to the G/L.
        /// </summary>
        field(13; "Posting Date"; Date)
        {
            Caption = 'Posting Date';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Deferral amount in document currency to be posted to G/L.
        /// </summary>
        field(14; Amount; Decimal)
        {
            AutoFormatType = 1;
            AutoFormatExpression = '';
            Caption = 'Amount';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Deferral amount in local currency (LCY) to be posted to G/L.
        /// </summary>
        field(15; "Amount (LCY)"; Decimal)
        {
            Caption = 'Amount (LCY)';
            AutoFormatExpression = '';
            AutoFormatType = 1;
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Indicates whether this entry was created automatically by the system.
        /// </summary>
        field(16; "System-Created Entry"; Boolean)
        {
            Caption = 'System-Created Entry';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Global Dimension 1 code from the source document for reporting and analysis.
        /// </summary>
        field(17; "Global Dimension 1 Code"; Code[20])
        {
            CaptionClass = '1,1,1';
            Caption = 'Global Dimension 1 Code';
            DataClassification = SystemMetadata;
            TableRelation = "Dimension Value".Code where("Global Dimension No." = const(1));
        }
        /// <summary>
        /// Global Dimension 2 code from the source document for reporting and analysis.
        /// </summary>
        field(18; "Global Dimension 2 Code"; Code[20])
        {
            CaptionClass = '1,1,2';
            Caption = 'Global Dimension 2 Code';
            DataClassification = SystemMetadata;
            TableRelation = "Dimension Value".Code where("Global Dimension No." = const(2));
        }
        /// <summary>
        /// Description of the deferral entry for identification and reporting.
        /// </summary>
        field(19; Description; Text[100])
        {
            Caption = 'Description';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// G/L Account used for the temporary deferral balance.
        /// </summary>
        field(20; "Deferral Account"; Code[20])
        {
            Caption = 'Deferral Account';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Period-specific description for the deferral entry.
        /// </summary>
        field(21; "Period Description"; Text[100])
        {
            Caption = 'Period Description';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Type of source document that generated this deferral buffer entry.
        /// </summary>
        field(22; "Deferral Doc. Type"; Enum "Deferral Document Type")
        {
            Caption = 'Deferral Doc. Type';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Document number from the source document.
        /// </summary>
        field(23; "Document No."; Code[20])
        {
            Caption = 'Document No.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Original sales or purchase amount in document currency before deferral.
        /// </summary>
        field(24; "Sales/Purch Amount"; Decimal)
        {
            AutoFormatType = 1;
            AutoFormatExpression = '';
            Caption = 'Sales/Purch Amount';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Original sales or purchase amount in local currency (LCY) before deferral.
        /// </summary>
        field(25; "Sales/Purch Amount (LCY)"; Decimal)
        {
            Caption = 'Sales/Purch Amount (LCY)';
            AutoFormatExpression = '';
            AutoFormatType = 1;
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// General posting type (Purchase or Sale) for proper G/L entry classification.
        /// </summary>
        field(26; "Gen. Posting Type"; Enum "General Posting Type")
        {
            Caption = 'Gen. Posting Type';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Indicates whether this represents a partial deferral of the original amount.
        /// </summary>
        field(27; "Partial Deferral"; Boolean)
        {
            Caption = 'Partial Deferral';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Dimension Set ID containing all dimension values for this deferral entry.
        /// </summary>
        field(480; "Dimension Set ID"; Integer)
        {
            Caption = 'Dimension Set ID';
            DataClassification = SystemMetadata;
            Editable = false;
            TableRelation = "Dimension Set Entry";
        }
        /// <summary>
        /// Deferral template code that generated this buffer entry.
        /// </summary>
        field(1700; "Deferral Code"; Code[10])
        {
            Caption = 'Deferral Code';
            DataClassification = SystemMetadata;
            TableRelation = "Deferral Template"."Deferral Code";
        }
        /// <summary>
        /// Line number from the deferral schedule that generated this buffer entry.
        /// </summary>
        field(1701; "Deferral Line No."; Integer)
        {
            Caption = 'Deferral Line No.';
            DataClassification = SystemMetadata;
        }
    }

    keys
    {
        key(Key1; "Entry No.")
        {
            Clustered = true;
        }
        key(Key2; "Deferral Doc. Type", "Document No.", "Deferral Line No.")
        {
        }
    }

    fieldgroups
    {
    }

    /// <summary>
    /// Prepares the deferral posting buffer for sales line posting.
    /// Initializes buffer fields with sales line dimensions and tax information.
    /// </summary>
    /// <param name="SalesLine">Sales line containing the deferral information</param>
    /// <param name="DocumentNo">Document number for the posting</param>
    procedure PrepareSales(SalesLine: Record "Sales Line"; DocumentNo: Code[20])
    begin
        Clear(Rec);
        Type := SalesLine.Type.AsInteger();
        "System-Created Entry" := true;
        "Global Dimension 1 Code" := SalesLine."Shortcut Dimension 1 Code";
        "Global Dimension 2 Code" := SalesLine."Shortcut Dimension 2 Code";
        "Dimension Set ID" := SalesLine."Dimension Set ID";
        "Job No." := SalesLine."Job No.";

        if SalesLine."VAT Calculation Type" = SalesLine."VAT Calculation Type"::"Sales Tax" then begin
            "Tax Area Code" := SalesLine."Tax Area Code";
            "Tax Group Code" := SalesLine."Tax Group Code";
            "Tax Liable" := SalesLine."Tax Liable";
            "Use Tax" := false;
        end;
        "Deferral Code" := SalesLine."Deferral Code";
        "Deferral Doc. Type" := Enum::"Deferral Document Type"::Sales;
        "Document No." := DocumentNo;

        OnAfterPrepareSales(Rec, SalesLine);
    end;

    /// <summary>
    /// Reverses the signs of all amount fields in the posting buffer.
    /// Used for credit transactions and corrections.
    /// </summary>
    procedure ReverseAmounts()
    begin
        Amount := -Amount;
        "Amount (LCY)" := -"Amount (LCY)";
        "Sales/Purch Amount" := -"Sales/Purch Amount";
        "Sales/Purch Amount (LCY)" := -"Sales/Purch Amount (LCY)";
    end;

    /// <summary>
    /// Prepares the deferral posting buffer for purchase line posting.
    /// Initializes buffer fields with purchase line dimensions and tax information.
    /// </summary>
    /// <param name="PurchLine">Purchase line containing the deferral information</param>
    /// <param name="DocumentNo">Document number for the posting</param>
    procedure PreparePurch(PurchLine: Record "Purchase Line"; DocumentNo: Code[20])
    begin
        Clear(Rec);
        Type := PurchLine.Type.AsInteger();
        "System-Created Entry" := true;
        "Global Dimension 1 Code" := PurchLine."Shortcut Dimension 1 Code";
        "Global Dimension 2 Code" := PurchLine."Shortcut Dimension 2 Code";
        "Dimension Set ID" := PurchLine."Dimension Set ID";
        "Job No." := PurchLine."Job No.";

        if PurchLine."VAT Calculation Type" = PurchLine."VAT Calculation Type"::"Sales Tax" then begin
            "Tax Area Code" := PurchLine."Tax Area Code";
            "Tax Group Code" := PurchLine."Tax Group Code";
            "Tax Liable" := PurchLine."Tax Liable";
            "Use Tax" := false;
        end;
        "Deferral Code" := PurchLine."Deferral Code";
        "Deferral Doc. Type" := Enum::"Deferral Document Type"::Purchase;
        "Document No." := DocumentNo;

        OnAfterPreparePurch(Rec, PurchLine);
    end;

    local procedure PrepareRemainderAmounts(NewAmountLCY: Decimal; NewAmount: Decimal; GLAccount: Code[20]; DeferralAccount: Code[20])
    begin
        "Amount (LCY)" := 0;
        Amount := 0;
        "Sales/Purch Amount (LCY)" := NewAmountLCY;
        "Sales/Purch Amount" := NewAmount;
        "G/L Account" := GLAccount;
        "Deferral Account" := DeferralAccount;
        "Partial Deferral" := true;
    end;

    /// <summary>
    /// Prepares the deferral posting buffer for remainder sales amounts.
    /// Handles partial deferrals where only part of the line amount is deferred.
    /// </summary>
    /// <param name="SalesLine">Sales line containing the deferral information</param>
    /// <param name="NewAmountLCY">LCY amount for the remainder</param>
    /// <param name="NewAmount">Amount for the remainder</param>
    /// <param name="GLAccount">G/L account for posting</param>
    /// <param name="DeferralAccount">Deferral account for posting</param>
    /// <param name="DeferralLineNo">Line number for the deferral</param>
    procedure PrepareRemainderSales(SalesLine: Record "Sales Line"; NewAmountLCY: Decimal; NewAmount: Decimal; GLAccount: Code[20]; DeferralAccount: Code[20]; DeferralLineNo: Integer)
    begin
        PrepareRemainderAmounts(NewAmountLCY, NewAmount, GLAccount, DeferralAccount);
        "Gen. Bus. Posting Group" := SalesLine."Gen. Bus. Posting Group";
        "Gen. Prod. Posting Group" := SalesLine."Gen. Prod. Posting Group";
        "VAT Bus. Posting Group" := SalesLine."VAT Bus. Posting Group";
        "VAT Prod. Posting Group" := SalesLine."VAT Prod. Posting Group";
        "Gen. Posting Type" := "Gen. Posting Type"::Sale;
        "Deferral Line No." := DeferralLineNo;

        OnAfterPrepareRemainderSales(Rec, SalesLine);
    end;

    /// <summary>
    /// Prepares the deferral posting buffer for remainder purchase amounts.
    /// Handles partial deferrals where only part of the line amount is deferred.
    /// </summary>
    /// <param name="PurchaseLine">Purchase line containing the deferral information</param>
    /// <param name="NewAmountLCY">LCY amount for the remainder</param>
    /// <param name="NewAmount">Amount for the remainder</param>
    /// <param name="GLAccount">G/L account for posting</param>
    /// <param name="DeferralAccount">Deferral account for posting</param>
    /// <param name="DeferralLineNo">Line number for the deferral</param>
    procedure PrepareRemainderPurchase(PurchaseLine: Record "Purchase Line"; NewAmountLCY: Decimal; NewAmount: Decimal; GLAccount: Code[20]; DeferralAccount: Code[20]; DeferralLineNo: Integer)
    begin
        PrepareRemainderAmounts(NewAmountLCY, NewAmount, GLAccount, DeferralAccount);
        "Gen. Bus. Posting Group" := PurchaseLine."Gen. Bus. Posting Group";
        "Gen. Prod. Posting Group" := PurchaseLine."Gen. Prod. Posting Group";
        "VAT Bus. Posting Group" := PurchaseLine."VAT Bus. Posting Group";
        "VAT Prod. Posting Group" := PurchaseLine."VAT Prod. Posting Group";
        "Gen. Posting Type" := "Gen. Posting Type"::Purchase;
        "Deferral Line No." := DeferralLineNo;

        OnAfterPrepareRemainderPurchase(Rec, PurchaseLine);
    end;

    /// <summary>
    /// Prepares initial amounts for deferral posting buffer.
    /// Overload method without discount parameters.
    /// </summary>
    /// <param name="AmountLCY">LCY amount</param>
    /// <param name="AmountACY">ACY amount</param>
    /// <param name="RemainAmtToDefer">Remaining amount to defer</param>
    /// <param name="RemainAmtToDeferACY">Remaining ACY amount to defer</param>
    /// <param name="GLAccount">G/L account for posting</param>
    /// <param name="DeferralAccount">Deferral account for posting</param>
    procedure PrepareInitialAmounts(AmountLCY: Decimal; AmountACY: decimal; RemainAmtToDefer: Decimal; RemainAmtToDeferACY: Decimal; GLAccount: Code[20]; DeferralAccount: Code[20])
    begin
        PrepareInitialAmounts(AmountLCY, AmountACY, RemainAmtToDefer, RemainAmtToDeferACY, GLAccount, DeferralAccount, 0, 0);
    end;

    /// <summary>
    /// Prepares initial amounts for deferral posting buffer including discount handling.
    /// Extended version with discount amount parameters.
    /// </summary>
    /// <param name="AmountLCY">LCY amount</param>
    /// <param name="AmountACY">ACY amount</param>
    /// <param name="RemainAmtToDefer">Remaining amount to defer</param>
    /// <param name="RemainAmtToDeferACY">Remaining ACY amount to defer</param>
    /// <param name="GLAccount">G/L account for posting</param>
    /// <param name="DeferralAccount">Deferral account for posting</param>
    /// <param name="DiscountAmount">Discount amount to consider</param>
    /// <param name="DiscountAmountACY">ACY discount amount to consider</param>
    procedure PrepareInitialAmounts(AmountLCY: Decimal; AmountACY: decimal; RemainAmtToDefer: Decimal; RemainAmtToDeferACY: Decimal; GLAccount: Code[20]; DeferralAccount: Code[20]; DiscountAmount: Decimal; DiscountAmountACY: Decimal)
    var
        NewAmountLCY: Decimal;
        NewAmount: Decimal;
    begin
        if (RemainAmtToDefer <> 0) or (RemainAmtToDeferACY <> 0) then begin
            NewAmountLCY := RemainAmtToDefer;
            NewAmount := RemainAmtToDeferACY;
        end else begin
            NewAmountLCY := AmountLCY - DiscountAmount;
            NewAmount := AmountACY - DiscountAmountACY;
        end;
        PrepareRemainderAmounts(NewAmountLCY, NewAmount, DeferralAccount, GLAccount);
        "Amount (LCY)" := NewAmountLCY;
        Amount := NewAmount;
    end;

    /// <summary>
    /// Initializes the posting buffer from a deferral line record.
    /// Copies amounts, dates, and description from the deferral line.
    /// </summary>
    /// <param name="DeferralLine">Deferral line to copy data from</param>
    procedure InitFromDeferralLine(DeferralLine: Record "Deferral Line")
    begin
        "Amount (LCY)" := DeferralLine."Amount (LCY)";
        Amount := DeferralLine.Amount;
        "Sales/Purch Amount (LCY)" := DeferralLine."Amount (LCY)";
        "Sales/Purch Amount" := DeferralLine.Amount;
        "Posting Date" := DeferralLine."Posting Date";
        Description := DeferralLine.Description;
    end;

    /// <summary>
    /// Updates an existing deferral posting buffer record with values from another buffer.
    /// Accumulates amounts if a matching record exists, otherwise creates a new record.
    /// </summary>
    /// <param name="DeferralPostBuffer">Source buffer containing the values to add</param>
    procedure Update(DeferralPostBuffer: Record "Deferral Posting Buffer")
    begin
        SetRange(Type, DeferralPostBuffer.Type);
        SetRange("G/L Account", DeferralPostBuffer."G/L Account");
        SetRange("Gen. Bus. Posting Group", DeferralPostBuffer."Gen. Bus. Posting Group");
        SetRange("Gen. Prod. Posting Group", DeferralPostBuffer."Gen. Prod. Posting Group");
        SetRange("VAT Bus. Posting Group", DeferralPostBuffer."VAT Bus. Posting Group");
        SetRange("VAT Prod. Posting Group", DeferralPostBuffer."VAT Prod. Posting Group");
        SetRange("Tax Area Code", DeferralPostBuffer."Tax Area Code");
        SetRange("Tax Group Code", DeferralPostBuffer."Tax Group Code");
        SetRange("Tax Liable", DeferralPostBuffer."Tax Liable");
        SetRange("Use Tax", DeferralPostBuffer."Use Tax");
        SetRange("Dimension Set ID", DeferralPostBuffer."Dimension Set ID");
        SetRange("Job No.", DeferralPostBuffer."Job No.");
        SetRange("Deferral Code", DeferralPostBuffer."Deferral Code");
        SetRange("Posting Date", DeferralPostBuffer."Posting Date");
        SetRange("Partial Deferral", DeferralPostBuffer."Partial Deferral");
        SetRange("Deferral Line No.", DeferralPostBuffer."Deferral Line No.");
        OnUpdateOnAfterSetFilters(Rec, DeferralPostBuffer);
        if FindFirst() then begin
            Amount += DeferralPostBuffer.Amount;
            "Amount (LCY)" += DeferralPostBuffer."Amount (LCY)";
            "Sales/Purch Amount" += DeferralPostBuffer."Sales/Purch Amount";
            "Sales/Purch Amount (LCY)" += DeferralPostBuffer."Sales/Purch Amount (LCY)";
            if not DeferralPostBuffer."System-Created Entry" then
                "System-Created Entry" := false;
            if IsCombinedDeferralZero() then
                Delete()
            else
                Modify();
        end else begin
            Rec := DeferralPostBuffer;
            "Entry No." := GetLastEntryNo() + 1;
            OnUpdateOnBeforeDeferralPostBufferInsert(Rec, DeferralPostBuffer);
            Insert();
        end;
    end;

    local procedure IsCombinedDeferralZero(): Boolean
    begin
        if (Amount = 0) and ("Amount (LCY)" = 0) and
           ("Sales/Purch Amount" = 0) and ("Sales/Purch Amount (LCY)" = 0)
        then
            exit(true);

        exit(false);
    end;

    /// <summary>
    /// Gets the last entry number used in the deferral posting buffer table.
    /// Used for assigning sequential entry numbers to new buffer records.
    /// </summary>
    /// <returns>The highest entry number currently in use</returns>
    procedure GetLastEntryNo(): Integer;
    var
        FindRecordManagement: Codeunit "Find Record Management";
    begin
        exit(FindRecordManagement.GetLastEntryIntFieldValue(Rec, FieldNo("Entry No.")))
    end;

    /// <summary>
    /// Integration event raised after preparing deferral posting buffer for sales line processing.
    /// Enables custom field updates or additional processing after sales line preparation.
    /// </summary>
    /// <param name="DeferralPostingBuffer">Deferral posting buffer record prepared for sales</param>
    /// <param name="SalesLine">Source sales line record used for preparation</param>
    /// <remarks>
    /// Raised from PrepareSales procedure after standard sales line preparation logic.
    /// </remarks>
    [IntegrationEvent(false, false)]
    local procedure OnAfterPrepareSales(var DeferralPostingBuffer: Record "Deferral Posting Buffer"; SalesLine: Record "Sales Line");
    begin
    end;

    /// <summary>
    /// Integration event raised after preparing deferral posting buffer for purchase line processing.
    /// Enables custom field updates or additional processing after purchase line preparation.
    /// </summary>
    /// <param name="DeferralPostingBuffer">Deferral posting buffer record prepared for purchase</param>
    /// <param name="PurchaseLine">Source purchase line record used for preparation</param>
    /// <remarks>
    /// Raised from PreparePurch procedure after standard purchase line preparation logic.
    /// </remarks>
    [IntegrationEvent(false, false)]
    local procedure OnAfterPreparePurch(var DeferralPostingBuffer: Record "Deferral Posting Buffer"; PurchaseLine: Record "Purchase Line");
    begin
    end;


    /// <summary>
    /// Integration event raised after setting filters on deferral posting buffer during update operation.
    /// Enables custom filter modification or additional processing on filtered records.
    /// </summary>
    /// <param name="DeferralPostingBufferRec">Deferral posting buffer record with filters applied</param>
    /// <param name="DeferralPostBuffer">Source deferral posting buffer for filter context</param>
    /// <remarks>
    /// Raised from Update procedure after applying standard filters for buffer updates.
    /// </remarks>
    [IntegrationEvent(false, false)]
    local procedure OnUpdateOnAfterSetFilters(var DeferralPostingBufferRec: Record "Deferral Posting Buffer"; DeferralPostBuffer: Record "Deferral Posting Buffer")
    begin
    end;

    /// <summary>
    /// Integration event raised before inserting deferral posting buffer record during update operation.
    /// Enables custom field updates or validation before buffer record insertion.
    /// </summary>
    /// <param name="ToDeferralPostingBuffer">Target deferral posting buffer record to be inserted</param>
    /// <param name="FromDeferralPostingBuffer">Source deferral posting buffer record for data copying</param>
    /// <remarks>
    /// Raised from Update procedure before inserting new deferral posting buffer entries.
    /// </remarks>
    [IntegrationEvent(false, false)]
    local procedure OnUpdateOnBeforeDeferralPostBufferInsert(var ToDeferralPostingBuffer: Record "Deferral Posting Buffer"; FromDeferralPostingBuffer: Record "Deferral Posting Buffer")
    begin
    end;

    /// <summary>
    /// Integration event raised after preparing remainder deferral posting buffer for purchase processing.
    /// Enables custom processing of remainder amounts for purchase transactions.
    /// </summary>
    /// <param name="DeferralPostingBuffer">Deferral posting buffer record prepared for purchase remainder</param>
    /// <param name="PurchaseLine">Source purchase line record for remainder calculation</param>
    /// <remarks>
    /// Raised from PrepareRemainderPurchase procedure after calculating purchase remainder amounts.
    /// </remarks>
    [IntegrationEvent(false, false)]
    local procedure OnAfterPrepareRemainderPurchase(var DeferralPostingBuffer: Record "Deferral Posting Buffer"; PurchaseLine: Record "Purchase Line")
    begin
    end;

    /// <summary>
    /// Integration event raised after preparing remainder deferral posting buffer for sales processing.
    /// Enables custom processing of remainder amounts for sales transactions.
    /// </summary>
    /// <param name="DeferralPostingBuffer">Deferral posting buffer record prepared for sales remainder</param>
    /// <param name="SalesLine">Source sales line record for remainder calculation</param>
    /// <remarks>
    /// Raised from PrepareRemainderSales procedure after calculating sales remainder amounts.
    /// </remarks>
    [IntegrationEvent(false, false)]
    local procedure OnAfterPrepareRemainderSales(var DeferralPostingBuffer: Record "Deferral Posting Buffer"; SalesLine: Record "Sales Line")
    begin
    end;
}