Table 5611 Depreciation Book, source in 29

Source29

src/Layers/W1/BaseApp/FixedAssets/Depreciation/DepreciationBook.Table.al454 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.FixedAssets.Depreciation;

using Microsoft.Finance.Currency;
using Microsoft.FixedAssets.Insurance;
using Microsoft.FixedAssets.Journal;
using Microsoft.FixedAssets.Posting;
using Microsoft.FixedAssets.Setup;

table 5611 "Depreciation Book"
{
    Caption = 'Depreciation Book';
    DataCaptionFields = "Code", Description;
    DrillDownPageID = "Depreciation Book List";
    LookupPageID = "Depreciation Book List";
    Permissions = TableData "FA Posting Type Setup" = rimd,
                  TableData "FA Depreciation Book" = rm;
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Code"; Code[10])
        {
            Caption = 'Code';
            ToolTip = 'Specifies a code that identifies the depreciation book.';
            NotBlank = true;
        }
        field(2; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies the purpose of the depreciation book.';
        }
        field(3; "G/L Integration - Acq. Cost"; Boolean)
        {
            Caption = 'G/L Integration - Acq. Cost';
            ToolTip = 'Specifies whether acquisition cost entries posted to this depreciation book are posted both to the general ledger and the FA ledger.';
        }
        field(4; "G/L Integration - Depreciation"; Boolean)
        {
            Caption = 'G/L Integration - Depreciation';
            ToolTip = 'Specifies whether depreciation entries posted to this depreciation book are posted both to the general ledger and the FA ledger.';
        }
        field(5; "G/L Integration - Write-Down"; Boolean)
        {
            Caption = 'G/L Integration - Write-Down';
            ToolTip = 'Specifies whether write-down entries posted to this depreciation book should be posted to the general ledger and the FA ledger.';
        }
        field(6; "G/L Integration - Appreciation"; Boolean)
        {
            Caption = 'G/L Integration - Appreciation';
            ToolTip = 'Specifies whether appreciation entries posted to this depreciation book are posted to the general ledger and the FA ledger.';
        }
        field(7; "G/L Integration - Custom 1"; Boolean)
        {
            Caption = 'G/L Integration - Custom 1';
            ToolTip = 'Specifies whether custom 1 entries posted to this depreciation book are posted to the general ledger and the FA ledger.';
        }
        field(8; "G/L Integration - Custom 2"; Boolean)
        {
            Caption = 'G/L Integration - Custom 2';
            ToolTip = 'Specifies whether custom 2 entries posted to this depreciation book are posted to the general ledger and the FA ledger.';
        }
        field(9; "G/L Integration - Disposal"; Boolean)
        {
            Caption = 'G/L Integration - Disposal';
            ToolTip = 'Specifies whether disposal entries posted to this depreciation book are posted to the general ledger and the FA ledger.';
        }
        field(10; "G/L Integration - Maintenance"; Boolean)
        {
            Caption = 'G/L Integration - Maintenance';
            ToolTip = 'Specifies whether maintenance entries that are posted to this depreciation book are posted both to the general ledger and the FA ledger.';
        }
        field(11; "Disposal Calculation Method"; Option)
        {
            Caption = 'Disposal Calculation Method';
            ToolTip = 'Specifies the disposal method for the current depreciation book.';
            OptionCaption = 'Net,Gross';
            OptionMembers = Net,Gross;
        }
        field(12; "Use Custom 1 Depreciation"; Boolean)
        {
            Caption = 'Use Custom 1 Depreciation';

            trigger OnValidate()
            begin
                if "Use Custom 1 Depreciation" then
                    TestField("Fiscal Year 365 Days", false);
            end;
        }
        field(13; "Allow Depr. below Zero"; Boolean)
        {
            Caption = 'Allow Depr. below Zero';
            ToolTip = 'Specifies whether to allow the Calculate Depreciation batch job to continue calculating depreciation even if the book value is zero or below.';
        }
        field(14; "Use FA Exch. Rate in Duplic."; Boolean)
        {
            Caption = 'Use FA Exch. Rate in Duplic.';
            ToolTip = 'Specifies whether to use the FA Exchange Rate field when you duplicate entries from one depreciation book to another.';

            trigger OnValidate()
            begin
                if not "Use FA Exch. Rate in Duplic." then
                    "Default Exchange Rate" := 0;
            end;
        }
        field(15; "Part of Duplication List"; Boolean)
        {
            Caption = 'Part of Duplication List';
            ToolTip = 'Specifies whether to indicate that entries made in another depreciation book should be duplicated to this depreciation book.';
        }
        field(16; "G/L Integration - Bonus Depr."; Boolean)
        {
            Caption = 'G/L Integration - Bonus Depreciation';
            ToolTip = 'Specifies whether bonus depreciation entries that are posted to this depreciation book are posted both to the general ledger and the FA ledger.';
        }
        field(17; "Last Date Modified"; Date)
        {
            Caption = 'Last Date Modified';
            Editable = false;
        }
        field(18; "Allow Indexation"; Boolean)
        {
            Caption = 'Allow Indexation';
            ToolTip = 'Specifies whether to allow indexation of FA ledger entries and maintenance ledger entries posted to this book.';
        }
        field(19; "Use Same FA+G/L Posting Dates"; Boolean)
        {
            Caption = 'Use Same FA+G/L Posting Dates';
            ToolTip = 'Specifies whether to indicate that the Posting Date and the FA Posting Date must be the same on a journal line before posting.';
            InitValue = true;
        }
        field(20; "Default Exchange Rate"; Decimal)
        {
            AutoFormatType = 0;
            Caption = 'Default Exchange Rate';
            ToolTip = 'Specifies the exchange rate to use if the rate in the FA Exchange Rate field is zero.';
            DecimalPlaces = 4 : 4;
            MinValue = 0;

            trigger OnValidate()
            begin
                if "Default Exchange Rate" > 0 then
                    TestField("Use FA Exch. Rate in Duplic.", true);
            end;
        }
        field(23; "Use FA Ledger Check"; Boolean)
        {
            Caption = 'Use FA Ledger Check';
            ToolTip = 'Specifies which checks to perform before posting a journal line.';
            InitValue = true;
        }
        field(24; "Use Rounding in Periodic Depr."; Boolean)
        {
            Caption = 'Use Rounding in Periodic Depr.';
            ToolTip = 'Specifies whether the calculated periodic depreciation amounts should be rounded to whole numbers.';
        }
        field(25; "New Fiscal Year Starting Date"; Date)
        {
            Caption = 'New Fiscal Year Starting Date';
        }
        field(26; "No. of Days in Fiscal Year"; Integer)
        {
            Caption = 'No. of Days in Fiscal Year';
            MaxValue = 1080;
            MinValue = 10;
        }
        field(27; "Allow Changes in Depr. Fields"; Boolean)
        {
            Caption = 'Allow Changes in Depr. Fields';
            ToolTip = 'Specifies whether to allow the depreciation fields to be modified.';
        }
        field(28; "Default Final Rounding Amount"; Decimal)
        {
            AutoFormatType = 1;
            AutoFormatExpression = GetCurrencyCode();
            Caption = 'Default Final Rounding Amount';
            ToolTip = 'Specifies the final rounding amount to use if the Final Rounding Amount field is zero.';
            MinValue = 0;
        }
        field(29; "Default Ending Book Value"; Decimal)
        {
            AutoFormatType = 1;
            AutoFormatExpression = GetCurrencyCode();
            Caption = 'Default Ending Book Value';
            ToolTip = 'Specifies the ending book value to use if the Ending Book Value field is zero.';
            MinValue = 0;
        }
        field(32; "Periodic Depr. Date Calc."; Option)
        {
            Caption = 'Periodic Depr. Date Calc.';
            OptionCaption = 'Last Entry,Last Depr. Entry';
            OptionMembers = "Last Entry","Last Depr. Entry";

            trigger OnValidate()
            begin
                if "Periodic Depr. Date Calc." <> "Periodic Depr. Date Calc."::"Last Entry" then
                    TestField("Fiscal Year 365 Days", false);
            end;
        }
        field(33; "Mark Errors as Corrections"; Boolean)
        {
            Caption = 'Mark Errors as Corrections';
        }
        field(34; "Add-Curr Exch Rate - Acq. Cost"; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add-Curr Exch Rate - Acq. Cost';
            ToolTip = 'Specifies that acquisition transactions in the general ledger can be in both LCY and any additional reporting currency.';
        }
        field(35; "Add.-Curr. Exch. Rate - Depr."; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add.-Curr. Exch. Rate - Depr.';
            ToolTip = 'Specifies depreciation transactions in the general ledger in both LCY and any additional reporting currency.';
        }
        field(36; "Add-Curr Exch Rate -Write-Down"; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add-Curr Exch Rate -Write-Down';
            ToolTip = 'Specifies write-down transactions in the general ledger in both LCY and any additional reporting currency.';
        }
        field(37; "Add-Curr. Exch. Rate - Apprec."; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add-Curr. Exch. Rate - Apprec.';
            ToolTip = 'Specifies appreciation transactions in the general ledger in both LCY and any additional reporting currency.';
        }
        field(38; "Add-Curr. Exch Rate - Custom 1"; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add-Curr. Exch Rate - Custom 1';
            ToolTip = 'Specifies that custom 1 transactions in the general ledger can be in both LCY and any additional reporting currency.';
        }
        field(39; "Add-Curr. Exch Rate - Custom 2"; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add-Curr. Exch Rate - Custom 2';
            ToolTip = 'Specifies custom 2 transactions in the general ledger in both LCY and any additional reporting currency.';
        }
        field(40; "Add.-Curr. Exch. Rate - Disp."; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add.-Curr. Exch. Rate - Disp.';
            ToolTip = 'Specifies disposal transactions in the general ledger in both LCY and any additional reporting currency.';
        }
        field(41; "Add.-Curr. Exch. Rate - Maint."; Boolean)
        {
            AccessByPermission = TableData Currency = R;
            Caption = 'Add.-Curr. Exch. Rate - Maint.';
            ToolTip = 'Specifies maintenance transactions in the general ledger in both LCY and any additional reporting currency.';
        }
        field(42; "Use Default Dimension"; Boolean)
        {
            Caption = 'Use Default Dimension';
        }
        field(43; "Subtract Disc. in Purch. Inv."; Boolean)
        {
            Caption = 'Subtract Disc. in Purch. Inv.';
            ToolTip = 'Specifies that the line and invoice discount are subtracted from the acquisition cost posted for the fixed asset.';
        }
        field(44; "Allow Correction of Disposal"; Boolean)
        {
            Caption = 'Allow Correction of Disposal';
            ToolTip = 'Specifies whether to correct fixed ledger entries of the Disposal type.';
        }
        field(45; "Allow more than 360/365 Days"; Boolean)
        {
            Caption = 'Allow more than 360/365 Days';
            ToolTip = 'Specifies if the fiscal year has more than 360 depreciation days.';
        }
        field(46; "VAT on Net Disposal Entries"; Boolean)
        {
            Caption = 'VAT on Net Disposal Entries';
            ToolTip = 'Specifies whether you sell a fixed asset with the net disposal method.';
        }
        field(47; "Allow Acq. Cost below Zero"; Boolean)
        {
            Caption = 'Allow Acq. Cost below Zero';
        }
        field(48; "Allow Identical Document No."; Boolean)
        {
            Caption = 'Allow Identical Document No.';
            ToolTip = 'Specifies the check box for this field to allow identical document numbers in the depreciation book.';
        }
        field(49; "Fiscal Year 365 Days"; Boolean)
        {
            Caption = 'Fiscal Year 365 Days';
            ToolTip = 'Specifies that when the Calculate Depreciation batch job calculates depreciations, a standardized year of 360 days, where each month has 30 days, is used.';

            trigger OnValidate()
            var
                FADeprBook: Record "FA Depreciation Book";
            begin
                if "Fiscal Year 365 Days" then begin
                    TestField("Use Custom 1 Depreciation", false);
                    TestField("Periodic Depr. Date Calc.", "Periodic Depr. Date Calc."::"Last Entry");
                end;
                FADeprBook.LockTable();
                Modify();
                FADeprBook.SetCurrentKey("Depreciation Book Code", "FA No.");
                FADeprBook.SetRange("Depreciation Book Code", Code);
                if FADeprBook.FindSet(true) then
                    repeat
                        FADeprBook.CalcDeprPeriod();
                        FADeprBook.Modify();
                    until FADeprBook.Next() = 0;
            end;
        }
        field(50; "Use Bonus Depreciation"; Boolean)
        {
            Caption = 'Use Bonus Depreciation';
            ToolTip = 'Specifies if the bonus depreciation should be used in this book.';

            trigger OnValidate()
            var
                FASetup: Record "FA Setup";
            begin
                if Rec."Use Bonus Depreciation" then begin
                    FASetup.Get();
                    FASetup.TestField("Bonus Depreciation %");
                    FASetup.TestField("Bonus Depr. Effective Date");
                end;
                if GuiAllowed() then
                    Message(BonusDepreciationOnboardingMsg)
            end;
        }
        field(10500; "Use Accounting Period"; Boolean)
        {
            Caption = 'Use Accounting Period';
            ToolTip = 'Specifies if you want the periods between start date and ending date to correspond to the accounting periods that you have set up.';

            trigger OnValidate()
            var
                FADeprBook: Record "FA Depreciation Book";
            begin
                if "Use Accounting Period" then begin
                    FADeprBook.SetRange("Depreciation Book Code", Code);
                    FADeprBook.SetFilter("Depreciation Method", '<> %1', FADeprBook."Depreciation Method"::"Straight-Line");
                    if not FADeprBook.IsEmpty() then
                        Error(MustBeStraightLineTxt, FieldCaption("Use Accounting Period"), true);
                end;
            end;
        }
    }

    keys
    {
        key(Key1; "Code")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        InsCoverageLedgEntry: Record "Ins. Coverage Ledger Entry";
        FADeprBook: Record "FA Depreciation Book";
    begin
        FASetup.Get();
        FADeprBook.SetCurrentKey("Depreciation Book Code");
        FADeprBook.SetRange("Depreciation Book Code", Code);
        if not FADeprBook.IsEmpty() then
            Error(Text000);

        if not InsCoverageLedgEntry.IsEmpty() and (FASetup."Insurance Depr. Book" = Code) then
            Error(
              Text001,
              FASetup.TableCaption(), FASetup.FieldCaption("Insurance Depr. Book"), Code);

        FAPostingTypeSetup.SetRange("Depreciation Book Code", Code);
        FAPostingTypeSetup.DeleteAll();

        FAJnlSetup.SetRange("Depreciation Book Code", Code);
        FAJnlSetup.DeleteAll();
    end;

    trigger OnInsert()
    begin
        FAPostingTypeSetup."Depreciation Book Code" := Code;
        FAPostingTypeSetup."FA Posting Type" := FAPostingTypeSetup."FA Posting Type"::Appreciation;
        FAPostingTypeSetup."Part of Book Value" := true;
        FAPostingTypeSetup."Part of Depreciable Basis" := true;
        FAPostingTypeSetup."Include in Depr. Calculation" := true;
        FAPostingTypeSetup."Include in Gain/Loss Calc." := false;
        FAPostingTypeSetup."Depreciation Type" := false;
        FAPostingTypeSetup."Acquisition Type" := true;
        FAPostingTypeSetup.Sign := FAPostingTypeSetup.Sign::Debit;
        FAPostingTypeSetup.Insert();
        FAPostingTypeSetup."FA Posting Type" := FAPostingTypeSetup."FA Posting Type"::"Write-Down";
        FAPostingTypeSetup."Part of Depreciable Basis" := false;
        FAPostingTypeSetup."Include in Gain/Loss Calc." := true;
        FAPostingTypeSetup."Depreciation Type" := true;
        FAPostingTypeSetup."Acquisition Type" := false;
        FAPostingTypeSetup.Sign := FAPostingTypeSetup.Sign::Credit;
        FAPostingTypeSetup.Insert();
        FAPostingTypeSetup."FA Posting Type" := FAPostingTypeSetup."FA Posting Type"::"Custom 1";
        FAPostingTypeSetup.Insert();
        FAPostingTypeSetup."FA Posting Type" := FAPostingTypeSetup."FA Posting Type"::"Custom 2";
        FAPostingTypeSetup.Insert();
    end;

    trigger OnModify()
    begin
        "Last Date Modified" := Today;
    end;

    trigger OnRename()
    begin
        "Last Date Modified" := Today;
    end;

    var
        FASetup: Record "FA Setup";
        FAJnlSetup: Record "FA Journal Setup";
        MustBeStraightLineTxt: Label 'You cannot set %1 to %2 because some Fixed Assets associated with this book\exists where Depreciation Method is other than Straight-Line.', Comment = '%1="Use Accounting Period" Field Caption %2="Use Accounting Period" Field Value';

#pragma warning disable AA0074
        Text000: Label 'The book cannot be deleted because it is in use.';
#pragma warning disable AA0470
        Text001: Label 'The book cannot be deleted because %1 %2 = %3.';
#pragma warning restore AA0470
#pragma warning restore AA0074
        BonusDepreciationOnboardingMsg: Label 'This change will take effect only for the fixed asset depreciation books that are newly created with this depreciation book.';

    protected var
        FAPostingTypeSetup: Record "FA Posting Type Setup";

    procedure IndexGLIntegration(var GLIntegration: array[9] of Boolean)
    begin
        GLIntegration[1] := "G/L Integration - Acq. Cost";
        GLIntegration[2] := "G/L Integration - Depreciation";
        GLIntegration[3] := "G/L Integration - Write-Down";
        GLIntegration[4] := "G/L Integration - Appreciation";
        GLIntegration[5] := "G/L Integration - Custom 1";
        GLIntegration[6] := "G/L Integration - Custom 2";
        GLIntegration[7] := "G/L Integration - Disposal";
        GLIntegration[8] := "G/L Integration - Maintenance";
        GLIntegration[9] := false; // Salvage Value
    end;

    local procedure GetCurrencyCode(): Code[10]
    begin
        exit('');
    end;
}