Table 1702 Deferral Line, source in 29
Source29
src/Layers/W1/BaseApp/Finance/Deferral/DeferralLine.Table.al212 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.Foundation.Period;
/// <summary>
/// Detail records for deferral schedules that define individual posting dates and amounts.
/// Each line represents one period's worth of deferral recognition entries.
/// </summary>
table 1702 "Deferral Line"
{
Caption = 'Deferral Line';
DataClassification = CustomerContent;
fields
{
/// <summary>
/// Type of source document (Purchase, Sales, or G/L) that initiated this deferral.
/// Links to parent Deferral Header record.
/// </summary>
field(1; "Deferral Doc. Type"; Enum "Deferral Document Type")
{
Caption = 'Deferral Doc. Type';
TableRelation = "Deferral Header"."Deferral Doc. Type";
ToolTip = 'Specifies whether this refers to a document of type Sales, Purchase or G/L.';
}
/// <summary>
/// General Journal Template name for G/L-based deferrals.
/// Links to parent Deferral Header record.
/// </summary>
field(2; "Gen. Jnl. Template Name"; Code[10])
{
Caption = 'Gen. Jnl. Template Name';
TableRelation = "Deferral Header"."Gen. Jnl. Template Name";
ToolTip = 'Specifies the General Journal Template Name for lines with a Deferral Doc. Type of G/L.';
}
/// <summary>
/// General Journal Batch name for G/L-based deferrals.
/// Links to parent Deferral Header record.
/// </summary>
field(3; "Gen. Jnl. Batch Name"; Code[10])
{
Caption = 'Gen. Jnl. Batch Name';
TableRelation = "Deferral Header"."Gen. Jnl. Batch Name";
ToolTip = 'Specifies the General Journal Batch Name for lines with a Deferral Doc. Type of G/L.';
}
/// <summary>
/// Document type ID from the source document.
/// Links to parent Deferral Header record.
/// </summary>
field(4; "Document Type"; Integer)
{
Caption = 'Document Type';
TableRelation = "Deferral Header"."Document Type";
ToolTip = 'Specifies the Document Type for lines with a Deferral Doc. Type of Sales or Purchase.';
}
/// <summary>
/// Document number from the source document.
/// Links to parent Deferral Header record.
/// </summary>
field(5; "Document No."; Code[20])
{
Caption = 'Document No.';
TableRelation = "Deferral Header"."Document No.";
ToolTip = 'Specifies Document No. for lines with a Deferral Doc. Type of Sales or Purchase.';
}
/// <summary>
/// Line number within the source document.
/// Links to parent Deferral Header record.
/// </summary>
field(6; "Line No."; Integer)
{
Caption = 'Line No.';
TableRelation = "Deferral Header"."Line No.";
ToolTip = 'Specifies the line number.';
}
/// <summary>
/// Date when this specific deferral amount will be recognized/posted.
/// Must be within allowed posting date ranges and accounting periods.
/// </summary>
field(7; "Posting Date"; Date)
{
Caption = 'Posting Date';
ToolTip = 'Specifies the posting date.';
trigger OnValidate()
var
AccountingPeriod: Record "Accounting Period";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeValidatePostingDate(Rec, xRec, CurrFieldNo, IsHandled);
if IsHandled then
exit;
if DeferralUtilities.IsDateNotAllowed("Posting Date") then
Error(InvalidPostingDateErr, "Posting Date");
if AccountingPeriod.IsEmpty() then
exit;
AccountingPeriod.SetFilter("Starting Date", '>=%1', "Posting Date");
if AccountingPeriod.IsEmpty() then
Error(DeferSchedOutOfBoundsErr);
end;
}
/// <summary>
/// Description for this deferral line, typically based on the period description template.
/// </summary>
field(8; Description; Text[100])
{
Caption = 'Description';
ToolTip = 'Specifies the description.';
}
/// <summary>
/// Amount to be recognized/posted for this specific period in document currency.
/// Must match the sign of the total deferral amount.
/// </summary>
field(9; Amount; Decimal)
{
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
Caption = 'Amount';
ToolTip = 'Specifies the net amount.';
trigger OnValidate()
begin
if Amount = 0 then
Error(ZeroAmountToDeferErr);
if DeferralHeader.Get("Deferral Doc. Type", "Gen. Jnl. Template Name", "Gen. Jnl. Batch Name", "Document Type", "Document No.", "Line No.") then begin
if DeferralHeader."Amount to Defer" > 0 then
if Amount < 0 then
Error(AmountToDeferPositiveErr);
if DeferralHeader."Amount to Defer" < 0 then
if Amount > 0 then
Error(AmountToDeferNegativeErr);
end;
end;
}
/// <summary>
/// Amount to be recognized/posted converted to local currency (LCY) for reporting.
/// </summary>
field(10; "Amount (LCY)"; Decimal)
{
AutoFormatExpression = '';
AutoFormatType = 1;
Caption = 'Amount (LCY)';
ToolTip = 'Specifies the net amount in your local currency.';
}
/// <summary>
/// Currency code of the source document, used for foreign currency calculations.
/// </summary>
field(11; "Currency Code"; Code[10])
{
Caption = 'Currency Code';
ToolTip = 'Specifies the currency code.';
}
}
keys
{
key(Key1; "Deferral Doc. Type", "Gen. Jnl. Template Name", "Gen. Jnl. Batch Name", "Document Type", "Document No.", "Line No.", "Posting Date")
{
Clustered = true;
}
key(Key2; "Deferral Doc. Type", "Gen. Jnl. Template Name", "Gen. Jnl. Batch Name", "Document Type", "Document No.", "Line No.")
{
SumIndexFields = Amount;
}
}
fieldgroups
{
}
trigger OnInsert()
begin
if "Posting Date" = 0D then
Error(InvalidDeferralLineDateErr);
end;
var
DeferralHeader: Record "Deferral Header";
DeferralUtilities: Codeunit "Deferral Utilities";
InvalidPostingDateErr: Label '%1 is not within the range of posting dates for deferrals for your company. Check the user setup for the allowed deferrals posting dates.', Comment = '%1=The date passed in for the posting date.';
DeferSchedOutOfBoundsErr: Label 'The deferral schedule falls outside the accounting periods that have been set up for the company.';
InvalidDeferralLineDateErr: Label 'The posting date for this deferral schedule line is not valid.';
ZeroAmountToDeferErr: Label 'The deferral amount cannot be 0.';
AmountToDeferPositiveErr: Label 'The deferral amount must be positive.';
AmountToDeferNegativeErr: Label 'The deferral amount must be negative.';
/// <summary>
/// Integration event raised before validating posting date on deferral line.
/// Enables custom posting date validation logic or preprocessing.
/// </summary>
/// <param name="DeferralLine">Deferral line record being validated</param>
/// <param name="xDeferralLine">Previous state of the deferral line record</param>
/// <param name="CallingFieldNo">Field number that triggered the validation</param>
/// <param name="IsHandled">Set to true to skip standard posting date validation</param>
/// <remarks>
/// Raised from posting date validation trigger before standard date validation logic.
/// </remarks>
[IntegrationEvent(false, false)]
local procedure OnBeforeValidatePostingDate(var DeferralLine: Record "Deferral Line"; xDeferralLine: Record "Deferral Line"; CallingFieldNo: Integer; var IsHandled: Boolean);
begin
end;
}