Report 1127 Cost Acctg. Analysis, source in 29

Source29

src/Layers/W1/BaseApp/CostAccounting/Reports/CostAcctgAnalysis.Report.al409 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.CostAccounting.Reports;

using Microsoft.CostAccounting.Account;

report 1127 "Cost Acctg. Analysis"
{
    DefaultLayout = RDLC;
    RDLCLayout = './CostAccounting/Reports/CostAcctgAnalysis.rdlc';
    ApplicationArea = CostAccounting;
    Caption = 'Cost Acctg. Analysis';
    ToolTip = 'View balances per cost type with columns for seven fields for cost centers and cost objects. It is used as the cost distribution sheet in Cost accounting. The structure of the lines is based on the chart of cost types. You define up to seven cost centers and cost objects that appear as columns in the report.';
    UsageCategory = ReportsAndAnalysis;

    dataset
    {
        dataitem("Cost Type"; "Cost Type")
        {
            DataItemTableView = sorting("No.");
            RequestFilterFields = "No.", "Cost Classification", Type, "Date Filter";
            column(CompanyName; COMPANYPROPERTY.DisplayName())
            {
            }
            column(FilterTxt; FilterTxt)
            {
            }
            column(Head7; Head[7])
            {
            }
            column(Head6; Head[6])
            {
            }
            column(Head5; Head[5])
            {
            }
            column(Head4; Head[4])
            {
            }
            column(Head3; Head[3])
            {
            }
            column(Head2; Head[2])
            {
            }
            column(Head1; Head[1])
            {
            }
            column(No_CostType; "No.")
            {
                IncludeCaption = true;
            }
            column(Name_CostType; PadStr('', Indentation * 2) + Name)
            {
            }
            column(Col1; Col[1])
            {
            }
            column(Col2; Col[2])
            {
            }
            column(Col4; Col[4])
            {
            }
            column(Col3; Col[3])
            {
            }
            column(Col7; Col[7])
            {
            }
            column(Col6; Col[6])
            {
            }
            column(Col5; Col[5])
            {
            }
            column(LineType; LineTypeInt)
            {
            }
            column(BlankLine; "Blank Line")
            {
            }
            column(PageGroupNo; PageGroupNo)
            {
            }
            column(CAAnalysisCaption; CAAnalysisCaptionLbl)
            {
            }
            column(CostTypeCaption; CostTypeCaptionLbl)
            {
            }
            column(PageCaption; PageCaptionLbl)
            {
            }

            trigger OnAfterGetRecord()
            begin
                AmtExists := false;

                for i := 1 to 10 do begin
                    SetFilter("Cost Center Filter", '%1', CostCenter[i].Code);
                    SetFilter("Cost Object Filter", '%1', CostObject[i].Code);
                    CalcFields("Net Change");
                    Col[i] := "Net Change";
                    if "Net Change" <> 0 then
                        AmtExists := true;
                end;

                if (Type = Type::"Cost Type") and SuppressWoAmt and (not AmtExists) then
                    CurrReport.Skip();

                if NewPage then begin
                    PageGroupNo := PageGroupNo + 1;
                    NewPage := false;
                end;
                NewPage := "New Page";

                LineTypeInt := Type.AsInteger();
            end;

            trigger OnPreDataItem()
            begin
                for i := 1 to 10 do
                    Head[i] := CostCenter[i].Code + CostObject[i].Code;

                PageGroupNo := 1;
                NewPage := false;
            end;
        }
    }

    requestpage
    {
        AboutTitle = 'About Cost Acctg. Analysis';
        AboutText = 'The **Cost Acctg. Analysis** report compares actual costs to budgeted or expected values to identify variances. Use it for analyzing cost performance by highlighting where actual spending deviates from budgeted figures, helping improve forecasting and financial control.';
        SaveValues = true;

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';
                    group("Column 1")
                    {
                        Caption = 'Column 1';
                        field(CostCenter1; CostCenter[1].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center';
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center to be included in the cost accounting analysis.';

                            trigger OnValidate()
                            begin
                                CostCenterTest(1);
                            end;
                        }
                        field(CostObject1; CostObject[1].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object';
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the cost object relating to the applicable cost center.';

                            trigger OnValidate()
                            begin
                                CostObjectTest(1);
                            end;
                        }
                    }
                    group("Column 2")
                    {
                        Caption = 'Column 2';
                        field(CostCenter2; CostCenter[2].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center';
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center to be included in the cost accounting analysis.';

                            trigger OnValidate()
                            begin
                                CostCenterTest(2);
                            end;
                        }
                        field(CostObject2; CostObject[2].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object';
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the cost object relating to the applicable cost center.';

                            trigger OnValidate()
                            begin
                                CostObjectTest(2);
                            end;
                        }
                    }
                    group("Column 3")
                    {
                        Caption = 'Column 3';
                        field(CostCenter3; CostCenter[3].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center';
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center to be included in the cost accounting analysis.';

                            trigger OnValidate()
                            begin
                                CostCenterTest(3);
                            end;
                        }
                        field(CostObject3; CostObject[3].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object';
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the cost object relating to the applicable cost center.';

                            trigger OnValidate()
                            begin
                                CostObjectTest(3);
                            end;
                        }
                    }
                    group("Column 4")
                    {
                        Caption = 'Column 4';
                        field(CostCenter4; CostCenter[4].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center';
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center to be included in the cost accounting analysis.';

                            trigger OnValidate()
                            begin
                                CostCenterTest(4);
                            end;
                        }
                        field(CostObject4; CostObject[4].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object';
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the cost object relating to the applicable cost center.';

                            trigger OnValidate()
                            begin
                                CostObjectTest(4);
                            end;
                        }
                    }
                    group("Column 5")
                    {
                        Caption = 'Column 5';
                        field(CostCenter5; CostCenter[5].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center';
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center to be included in the cost accounting analysis.';

                            trigger OnValidate()
                            begin
                                CostCenterTest(5);
                            end;
                        }
                        field(CostObject5; CostObject[5].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object';
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the cost object relating to the applicable cost center.';

                            trigger OnValidate()
                            begin
                                CostObjectTest(5);
                            end;
                        }
                    }
                    group("Column 6")
                    {
                        Caption = 'Column 6';
                        field(CostCenter6; CostCenter[6].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center';
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center to be included in the cost accounting analysis.';

                            trigger OnValidate()
                            begin
                                CostCenterTest(6);
                            end;
                        }
                        field(CostObject6; CostObject[6].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object';
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the cost object relating to the applicable cost center.';

                            trigger OnValidate()
                            begin
                                CostObjectTest(6);
                            end;
                        }
                    }
                    group("Column 7")
                    {
                        Caption = 'Column 7';
                        field(CostCenter7; CostCenter[7].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Center';
                            TableRelation = "Cost Center";
                            ToolTip = 'Specifies the cost center to be included in the cost accounting analysis.';

                            trigger OnValidate()
                            begin
                                CostCenterTest(7);
                            end;
                        }
                        field(CostObject7; CostObject[7].Code)
                        {
                            ApplicationArea = CostAccounting;
                            Caption = 'Cost Object';
                            TableRelation = "Cost Object";
                            ToolTip = 'Specifies the cost object relating to the applicable cost center.';

                            trigger OnValidate()
                            begin
                                CostObjectTest(7);
                            end;
                        }
                    }
                    field(SuppressCostTypesWithoutAmount; SuppressWoAmt)
                    {
                        ApplicationArea = CostAccounting;
                        Caption = 'Suppress cost types without amount';
                        ToolTip = 'Specifies that accounts that do not have an amount will not be printed.';
                    }
                }
            }
        }

        actions
        {
        }
    }

    labels
    {
    }

    trigger OnInitReport()
    begin
        for i := 1 to 10 do begin
            CostCenter[i].Init();
            CostObject[i].Init();
        end;
    end;

    trigger OnPreReport()
    begin
        if "Cost Type".GetFilters <> '' then
            FilterTxt := Text000 + ' ' + "Cost Type".GetFilters();
    end;

    var
        CostCenter: array[10] of Record "Cost Center";
        CostObject: array[10] of Record "Cost Object";
        FilterTxt: Text;
        Head: array[10] of Text[50];
        Col: array[10] of Decimal;
        i: Integer;
        AmtExists: Boolean;
        SuppressWoAmt: Boolean;
        PageGroupNo: Integer;
        NewPage: Boolean;
        LineTypeInt: Integer;

#pragma warning disable AA0074
        Text000: Label 'Filter:';
#pragma warning restore AA0074
        CAAnalysisCaptionLbl: Label 'Cost Acctg. Analysis';
        CostTypeCaptionLbl: Label 'Cost Type';
        PageCaptionLbl: Label 'Page';

    local procedure CostCenterTest(Col: Integer)
    begin
        if CostCenter[Col].Code <> '' then
            CostObject[Col].Code := '';
    end;

    local procedure CostObjectTest(Col: Integer)
    begin
        if CostObject[Col].Code <> '' then
            CostCenter[Col].Code := '';
    end;
}