Table 197 Acc. Sched. KPI Buffer

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

Fields, 17Keys, 2Procedures, 2

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Finance/FinancialReports/AccSchedKPIBuffer.Table.al285 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.FinancialReports;

/// <summary>
/// Temporary buffer table for account schedule KPI data aggregation and analysis.
/// Stores calculated financial metrics including actual, budget, and forecast values for KPI reporting.
/// </summary>
/// <remarks>
/// Primary usage: KPI calculation processing, financial data aggregation for dashboards.
/// Integration: Links with Account Schedule system and dimension analysis functionality.
/// Extensibility: Standard table extension patterns for additional KPI metrics and calculation methods.
/// </remarks>
table 197 "Acc. Sched. KPI Buffer"
{
    Caption = 'Acc. Sched. KPI Buffer';
    ReplicateData = false;
    DataClassification = CustomerContent;

    fields
    {
        /// <summary>
        /// Sequential record number for buffer table organization and identification.
        /// </summary>
        field(1; "No."; Integer)
        {
            Caption = 'No.';
            ToolTip = 'Specifies the number of the involved entry or record, according to the specified number series.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Date associated with the KPI calculation period for temporal analysis.
        /// </summary>
        field(2; Date; Date)
        {
            Caption = 'Date';
            ToolTip = 'Specifies the date on which the KPI figures are calculated.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Indicates whether the period is closed for preventing further modifications.
        /// </summary>
        field(3; "Closed Period"; Boolean)
        {
            Caption = 'Closed Period';
            ToolTip = 'Specifies whether the fiscal year is closed.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Account schedule name identifying the source template for KPI calculations.
        /// </summary>
        field(4; "Account Schedule Name"; Code[10])
        {
            Caption = 'Row Definition Name';
            ToolTip = 'Specifies the name of the account schedule that the KPI web service is based on.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// KPI identifier code for tracking specific performance indicators within the system.
        /// </summary>
        field(5; "KPI Code"; Code[10])
        {
            Caption = 'KPI Code';
            ToolTip = 'Specifies a code for the financial report KPI web service.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Descriptive name of the KPI for display and identification purposes.
        /// </summary>
        field(6; "KPI Name"; Text[50])
        {
            Caption = 'KPI Name';
            ToolTip = 'Specifies a name of the account-schedule KPI web service.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Net change amount for actual transactions within the calculation period.
        /// </summary>
        field(7; "Net Change Actual"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Net Change Actual';
            ToolTip = 'Specifies changes in the actual general ledger amount, for closed accounting periods, up until the date in the Date field.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Balance amount for actual transactions as of the calculation date.
        /// </summary>
        field(8; "Balance at Date Actual"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Balance at Date Actual';
            ToolTip = 'Specifies the actual general ledger balance, based on closed accounting periods, on the date in the Date field.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Net change amount from budget entries within the calculation period.
        /// </summary>
        field(9; "Net Change Budget"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Net Change Budget';
            ToolTip = 'Specifies changes in the budgeted general ledger amount, based on the general ledger budget, up until the date in the Date field.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Balance amount from budget entries as of the calculation date.
        /// </summary>
        field(10; "Balance at Date Budget"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Balance at Date Budget';
            ToolTip = 'Specifies the budgeted general ledger balance, based on the general ledger budget, on the date in the Date field.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Net change amount for actual transactions from the corresponding period in the previous year.
        /// </summary>
        field(11; "Net Change Actual Last Year"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Net Change Actual Last Year';
            ToolTip = 'Specifies actual changes in the general ledger amount, based on closed accounting periods, up until the date in the Date field in the previous accounting year.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Balance amount for actual transactions as of the corresponding date in the previous year.
        /// </summary>
        field(12; "Balance at Date Act. Last Year"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Balance at Date Act. Last Year';
            ToolTip = 'Specifies the actual general ledger balance, based on closed accounting periods, on the date in the Date field in the previous accounting year.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Net change amount from budget entries for the corresponding period in the previous year.
        /// </summary>
        field(13; "Net Change Budget Last Year"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Net Change Budget Last Year';
            ToolTip = 'Specifies budgeted changes in the general ledger amount, based on the general ledger budget, up until the date in the Date field in the previous year.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Balance amount from budget entries as of the corresponding date in the previous year.
        /// </summary>
        field(14; "Balance at Date Bud. Last Year"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Balance at Date Bud. Last Year';
            ToolTip = 'Specifies the budgeted general ledger balance, based on the general ledger budget, on the date in the Date field in the previous accounting year.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Net change amount from forecast entries within the calculation period.
        /// </summary>
        field(15; "Net Change Forecast"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Net Change Forecast';
            ToolTip = 'Specifies forecasted changes in the general ledger amount, based on open accounting periods, up until the date in the Date field.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Balance amount from forecast entries as of the calculation date.
        /// </summary>
        field(16; "Balance at Date Forecast"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Balance at Date Forecast';
            ToolTip = 'Specifies the forecasted general ledger balance, based on open accounting periods, on the date in the Date field.';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Dimension set identifier for linking KPI data with dimension analysis.
        /// </summary>
        field(17; "Dimension Set ID"; Integer)
        {
            Caption = 'Dimension Set ID';
            ToolTip = 'Specifies a reference to a combination of dimension values. The actual values are stored in the Dimension Set Entry table.';
            DataClassification = SystemMetadata;
        }
    }

    keys
    {
        key(Key1; "No.")
        {
            Clustered = true;
        }
        key(Key2; "Account Schedule Name", "KPI Code", "Dimension Set ID")
        {
        }
    }

    fieldgroups
    {
    }

    /// <summary>
    /// Adds a calculated value to the appropriate KPI field based on column layout configuration.
    /// Determines whether to update actual, budget, forecast, or comparative values.
    /// </summary>
    /// <param name="ColumnLayout">Column layout record defining calculation parameters and data source</param>
    /// <param name="Value">Decimal value to add to the appropriate KPI metric field</param>
    procedure AddColumnValue(ColumnLayout: Record "Column Layout"; Value: Decimal)
    var
        PreviousFiscalYearFormula: DateFormula;
    begin
        Evaluate(PreviousFiscalYearFormula, '<-1Y>');
        if ColumnLayout."Column Type" = ColumnLayout."Column Type"::"Net Change" then
            if ColumnLayout."Ledger Entry Type" = ColumnLayout."Ledger Entry Type"::Entries then
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    "Net Change Actual Last Year" += Value
                else
                    "Net Change Actual" += Value
            else
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    "Net Change Budget Last Year" += Value
                else
                    "Net Change Budget" += Value
        else
            if ColumnLayout."Ledger Entry Type" = ColumnLayout."Ledger Entry Type"::Entries then
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    "Balance at Date Act. Last Year" += Value
                else
                    "Balance at Date Actual" += Value
            else
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    "Balance at Date Bud. Last Year" += Value
                else
                    "Balance at Date Budget" += Value;
    end;

    /// <summary>
    /// Retrieves the appropriate KPI value based on column layout configuration and calculation parameters.
    /// Returns actual, budget, forecast, or comparative values depending on column type and date formula.
    /// </summary>
    /// <param name="ColumnLayout">Column layout record defining which value type to retrieve</param>
    /// <returns>Decimal value from the appropriate KPI field matching the column layout criteria</returns>
    procedure GetColumnValue(ColumnLayout: Record "Column Layout") Result: Decimal
    var
        PreviousFiscalYearFormula: DateFormula;
    begin
        Evaluate(PreviousFiscalYearFormula, '<-1Y>');
        if ColumnLayout."Column Type" = ColumnLayout."Column Type"::"Net Change" then
            if ColumnLayout."Ledger Entry Type" = ColumnLayout."Ledger Entry Type"::Entries then
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    Result := "Net Change Actual Last Year"
                else
                    Result := "Net Change Actual"
            else
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    Result := "Net Change Budget Last Year"
                else
                    Result := "Net Change Budget"
        else
            if ColumnLayout."Ledger Entry Type" = ColumnLayout."Ledger Entry Type"::Entries then
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    Result := "Balance at Date Act. Last Year"
                else
                    Result := "Balance at Date Actual"
            else
                if Format(ColumnLayout."Comparison Date Formula") = Format(PreviousFiscalYearFormula) then
                    Result := "Balance at Date Bud. Last Year"
                else
                    Result := "Balance at Date Budget";
        exit(Result)
    end;
}