Table 1112 Cost Center

App
Base Application
Namespace
Microsoft.CostAccounting.Account
Versions
17-28

Fields, 17Keys, 3Procedures, 2

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/CostAccounting/Account/CostCenter.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.CostAccounting.Account;

using Microsoft.CostAccounting.Budget;
using Microsoft.CostAccounting.Ledger;
using Microsoft.CostAccounting.Setup;
using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Ledger;
using System.Security.AccessControl;
using System.Security.User;

table 1112 "Cost Center"
{
    Caption = 'Cost Center';
    DataClassification = CustomerContent;
    LookupPageID = "Chart of Cost Centers";

    fields
    {
        field(1; "Code"; Code[20])
        {
            Caption = 'Code';
            NotBlank = true;
            //The property 'ValidateTableRelation' can only be set if the property 'TableRelation' is set
            //ValidateTableRelation = false;

            trigger OnLookup()
            var
                CostAccMgt: Codeunit "Cost Account Mgt";
            begin
                CostAccMgt.LookupCostCenterFromDimValue(Code);
            end;
        }
        field(2; Name; Text[50])
        {
            Caption = 'Name';
        }
        field(3; "Cost Subtype"; Enum "Cost Center Subtype")
        {
            Caption = 'Cost Subtype';
        }
        field(4; "Cost Type Filter"; Code[20])
        {
            Caption = 'Cost Type Filter';
            FieldClass = FlowFilter;
            TableRelation = "Cost Type";
        }
        field(5; "Date Filter"; Date)
        {
            Caption = 'Date Filter';
            FieldClass = FlowFilter;
        }
        field(6; "Net Change"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            BlankZero = true;
            CalcFormula = sum("Cost Entry".Amount where("Cost Center Code" = field(Code),
                                                         "Cost Center Code" = field(filter(Totaling)),
                                                         "Cost Type No." = field("Cost Type Filter"),
                                                         "Posting Date" = field("Date Filter")));
            Caption = 'Net Change';
            Editable = false;
            FieldClass = FlowField;
        }
        field(7; "Balance at Date"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            BlankZero = true;
            CalcFormula = sum("Cost Entry".Amount where("Cost Center Code" = field(Code),
                                                         "Cost Center Code" = field(filter(Totaling)),
                                                         "Cost Type No." = field("Cost Type Filter"),
                                                         "Posting Date" = field(upperlimit("Date Filter"))));
            Caption = 'Balance at Date';
            Editable = false;
            FieldClass = FlowField;
        }
        field(8; "Balance to Allocate"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            BlankZero = true;
            CalcFormula = sum("Cost Entry".Amount where("Cost Center Code" = field(Code),
                                                         "Cost Center Code" = field(filter(Totaling)),
                                                         "Cost Type No." = field("Cost Type Filter"),
                                                         "Posting Date" = field("Date Filter"),
                                                         Allocated = const(false)));
            Caption = 'Balance to Allocate';
            Editable = false;
            FieldClass = FlowField;
        }
        field(9; "Responsible Person"; Code[50])
        {
            Caption = 'Responsible Person';
            TableRelation = User."User Name";
            ValidateTableRelation = false;

            trigger OnValidate()
            var
                UserSelection: Codeunit "User Selection";
            begin
                UserSelection.ValidateUserName("Responsible Person");
            end;
        }
        field(10; "Sorting Order"; Code[10])
        {
            Caption = 'Sorting Order';
        }
        field(11; Comment; Text[50])
        {
            Caption = 'Comment';
        }
        field(12; "Line Type"; Option)
        {
            Caption = 'Line Type';
            OptionCaption = 'Cost Center,Heading,Total,Begin-Total,End-Total';
            OptionMembers = "Cost Center",Heading,Total,"Begin-Total","End-Total";

            trigger OnValidate()
            begin
                // Change to other type than cost type. Entries exist?
                if (("Line Type" <> "Line Type"::"Cost Center") and
                    (xRec."Line Type" = xRec."Line Type"::"Cost Center")) or
                   (("Line Type" <> "Line Type"::"Begin-Total") and
                    (xRec."Line Type" = xRec."Line Type"::"Begin-Total"))
                then
                    ConfirmModifyIfEntriesExist(Rec);

                if "Line Type" <> "Line Type"::"Cost Center" then begin
                    Blocked := true;
                    "Cost Subtype" := "Cost Subtype"::" ";
                end else
                    Totaling := '';
            end;
        }
        field(13; Blocked; Boolean)
        {
            Caption = 'Blocked';
        }
        field(14; "New Page"; Boolean)
        {
            Caption = 'New Page';
        }
        field(15; "Blank Line"; Boolean)
        {
            Caption = 'Blank Line';
            MinValue = false;
        }
        field(16; Indentation; Integer)
        {
            Caption = 'Indentation';
            Editable = false;
            MinValue = 0;
        }
        field(17; Totaling; Text[250])
        {
            Caption = 'Totaling';

            trigger OnLookup()
            var
                SelectionFilter: Text;
            begin
                if LookupCostCenterFilter(SelectionFilter) then
                    Validate(Totaling, CopyStr(SelectionFilter, 1, MaxStrLen(Totaling)));
            end;

            trigger OnValidate()
            begin
                if not ("Line Type" in ["Line Type"::Total, "Line Type"::"End-Total"]) then
                    FieldError("Line Type");

                CalcFields("Net Change");
            end;
        }
    }

    keys
    {
        key(Key1; "Code")
        {
            Clustered = true;
        }
        key(Key2; "Cost Subtype")
        {
        }
        key(Key3; "Sorting Order")
        {
        }
    }

    fieldgroups
    {
        fieldgroup(DropDown; "Code", Name)
        {
        }
    }

    trigger OnDelete()
    begin
        SetRecFilter();
        ConfirmDeleteIfEntriesExist(Rec, true);
        SetRange(Code);
        SetCurrentKey("Sorting Order");
    end;

    trigger OnInsert()
    begin
        TestField(Code);
    end;

    var
        ConfirmDeleteQst: Label 'There are general ledger entries, cost entries, or cost budget entries that are posted to the selected cost center. Are you sure that you want to delete the cost center?';
        ConfirmModifyQst: Label 'There are general ledger entries, cost entries, or cost budget entries that are posted to the selected cost center. Are you sure that you want to modify the cost center?';

    local procedure EntriesExist(var CostCenter: Record "Cost Center") EntriesFound: Boolean
    var
        CostAccSetup: Record "Cost Accounting Setup";
        GLEntry: Record "G/L Entry";
        CostEntry: Record "Cost Entry";
        CostBudgetEntry: Record "Cost Budget Entry";
        DimensionMgt: Codeunit DimensionManagement;
        DimFilter: Text;
    begin
        CostAccSetup.Get();
        if CostCenter.FindSet() then
            repeat
                DimensionMgt.GetDimSetIDsForFilter(CostAccSetup."Cost Center Dimension", CostCenter.Code);
                DimFilter := DimensionMgt.GetDimSetFilter();
                if DimFilter <> '' then begin
                    GLEntry.SetFilter("Dimension Set ID", DimFilter);
                    if not GLEntry.IsEmpty() then
                        EntriesFound := true;
                end;

                if not EntriesFound then begin
                    CostBudgetEntry.SetCurrentKey("Budget Name", "Cost Center Code");
                    CostBudgetEntry.SetRange("Cost Center Code", CostCenter.Code);
                    EntriesFound := not CostBudgetEntry.IsEmpty();
                end;

                if not EntriesFound then begin
                    CostEntry.SetCurrentKey("Cost Center Code");
                    CostEntry.SetRange("Cost Center Code", CostCenter.Code);
                    EntriesFound := not CostEntry.IsEmpty();
                end;
            until (CostCenter.Next() = 0) or EntriesFound;
    end;

    procedure ConfirmDeleteIfEntriesExist(var CostCenter: Record "Cost Center"; CalledFromOnInsert: Boolean)
    begin
        if EntriesExist(CostCenter) then
            if not Confirm(ConfirmDeleteQst, true) then
                Error('');
        if not CalledFromOnInsert then
            CostCenter.DeleteAll();
    end;

    local procedure ConfirmModifyIfEntriesExist(var CostCenter: Record "Cost Center")
    var
        CostCenter2: Record "Cost Center";
    begin
        CostCenter2 := CostCenter;
        CostCenter2.SetRecFilter();
        if EntriesExist(CostCenter2) then
            if not Confirm(ConfirmModifyQst, true) then
                Error('');
    end;

    procedure LookupCostCenterFilter(var Text: Text): Boolean
    var
        ChartOfCostCenters: Page "Chart of Cost Centers";
    begin
        ChartOfCostCenters.LookupMode(true);
        if ChartOfCostCenters.RunModal() = ACTION::LookupOK then begin
            Text := ChartOfCostCenters.GetSelectionFilter();
            exit(true);
        end;
        exit(false)
    end;
}