Codeunit 5640 Duplicate Depr. Book

App
Base Application
Namespace
Microsoft.FixedAssets.Depreciation
Versions
17-28

Procedures, 3Events, 10

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/FixedAssets/Depreciation/DuplicateDeprBook.Codeunit.al500 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.GeneralLedger.Journal;
using Microsoft.FixedAssets.FixedAsset;
using Microsoft.FixedAssets.Insurance;
using Microsoft.FixedAssets.Journal;
using Microsoft.FixedAssets.Setup;

codeunit 5640 "Duplicate Depr. Book"
{

    trigger OnRun()
    begin
    end;

    var
        FA: Record "Fixed Asset";
        FASetup: Record "FA Setup";
        FAJnlSetup: Record "FA Journal Setup";
        GenJnlLine2: Record "Gen. Journal Line";
        FAJnlLine2: Record "FA Journal Line";
        DeprBook: Record "Depreciation Book";
        FAGetJnl: Codeunit "FA Get Journal";
        InsuranceJnlPostLine: Codeunit "Insurance Jnl.-Post Line";
        FAAmount: Decimal;
        DuplicateInGenJnl: Boolean;
        TemplateName: Code[10];
        BatchName: Code[10];
        ExchangeRate: Decimal;
        NextLineNo: Integer;

    procedure DuplicateGenJnlLine(var GenJnlLine: Record "Gen. Journal Line"; FAAmount2: Decimal)
    var
        FADeprBook: Record "FA Depreciation Book";
    begin
        OnBeforeGenJnlLineDuplicate(GenJnlLine, FAAmount2);

        FAAmount := FAAmount2;
        DeprBook.Get(GenJnlLine."Depreciation Book Code");
        if GenJnlLine."Insurance No." <> '' then
            InsertInsurance(true, GenJnlLine, FAJnlLine2);
        if (GenJnlLine."Duplicate in Depreciation Book" = '') and
            (not GenJnlLine."Use Duplication List")
        then
            exit;
        ExchangeRate := GetExchangeRate(GenJnlLine."Account No.", DeprBook);
        if GenJnlLine."Duplicate in Depreciation Book" <> '' then begin
            DeprBook.Get(GenJnlLine."Duplicate in Depreciation Book");
            CreateLine(true, GenJnlLine, FAJnlLine2);
            OnDuplicateGenJnlLineOnAfterCreateLine(GenJnlLine);
            exit;
        end;
        if GenJnlLine."Use Duplication List" then
            if DeprBook.Find('-') then
                repeat
                    if DeprBook."Part of Duplication List" and (DeprBook.Code <> GenJnlLine."Depreciation Book Code") then
                        if FADeprBook.Get(GenJnlLine."Account No.", DeprBook.Code) then
                            CreateLine(true, GenJnlLine, FAJnlLine2);
                until DeprBook.Next() = 0;
    end;

    procedure DuplicateFAJnlLine(var FAJnlLine: Record "FA Journal Line")
    var
        FADeprBook: Record "FA Depreciation Book";
    begin
        OnBeforeDuplicateFAJnlLine(FAJnlLine);
        DeprBook.Get(FAJnlLine."Depreciation Book Code");
        if FAJnlLine."Insurance No." <> '' then
            InsertInsurance(false, GenJnlLine2, FAJnlLine);
        if (FAJnlLine."Duplicate in Depreciation Book" = '') and
            (not FAJnlLine."Use Duplication List")
        then
            exit;
        FA.Get(FAJnlLine."FA No.");
        ExchangeRate := GetExchangeRate(FAJnlLine."FA No.", DeprBook);
        if FAJnlLine."Duplicate in Depreciation Book" <> '' then begin
            DeprBook.Get(FAJnlLine."Duplicate in Depreciation Book");
            CreateLine(false, GenJnlLine2, FAJnlLine);
            exit;
        end;
        if FAJnlLine."Use Duplication List" then
            if DeprBook.Find('-') then
                repeat
                    if DeprBook."Part of Duplication List" and (DeprBook.Code <> FAJnlLine."Depreciation Book Code") then
                        if FADeprBook.Get(FA."No.", DeprBook.Code) then
                            CreateLine(false, GenJnlLine2, FAJnlLine);
                until DeprBook.Next() = 0;
    end;

    local procedure InsertInsurance(GenJnlPosting: Boolean; GenJnlLine: Record "Gen. Journal Line"; FAJnlLine: Record "FA Journal Line")
    var
        InsuranceJnlLine: Record "Insurance Journal Line";
    begin
        FASetup.Get();
        FASetup.TestField("Insurance Depr. Book", DeprBook.Code);
        InsuranceJnlLine.Init();
        InsuranceJnlLine."Line No." := 0;
        if not FASetup."Automatic Insurance Posting" then
            InitInsuranceJnlLine(InsuranceJnlLine);

        if GenJnlPosting then begin
            if FASetup."Automatic Insurance Posting" then begin
                InsuranceJnlLine."Journal Batch Name" := GenJnlLine."Journal Batch Name";
                InsuranceJnlLine."Source Code" := GenJnlLine."Source Code";
                InsuranceJnlLine."Reason Code" := GenJnlLine."Reason Code"
            end;
            InsuranceJnlLine.Validate("Insurance No.", GenJnlLine."Insurance No.");
            InsuranceJnlLine.Validate("FA No.", GenJnlLine."Account No.");
            InsuranceJnlLine."Posting Date" := GenJnlLine."FA Posting Date";
            if InsuranceJnlLine."Posting Date" = 0D then
                InsuranceJnlLine."Posting Date" := GenJnlLine."Posting Date";
            InsuranceJnlLine.Validate(Amount, FAAmount);
            InsuranceJnlLine."Document Type" := GenJnlLine."Document Type";
            InsuranceJnlLine."Document Date" := GenJnlLine."Document Date";
            if InsuranceJnlLine."Document Date" = 0D then
                InsuranceJnlLine."Document Date" := InsuranceJnlLine."Posting Date";
            InsuranceJnlLine."Document No." := GenJnlLine."Document No.";
            InsuranceJnlLine."External Document No." := GenJnlLine."External Document No.";
            if not DeprBook."Use Default Dimension" then begin
                InsuranceJnlLine."Shortcut Dimension 1 Code" := GenJnlLine."Shortcut Dimension 1 Code";
                InsuranceJnlLine."Shortcut Dimension 2 Code" := GenJnlLine."Shortcut Dimension 2 Code";
                InsuranceJnlLine."Dimension Set ID" := GenJnlLine."Dimension Set ID";
            end;
        end;
        if not GenJnlPosting then begin
            if FASetup."Automatic Insurance Posting" then begin
                InsuranceJnlLine."Journal Batch Name" := FAJnlLine."Journal Batch Name";
                InsuranceJnlLine."Source Code" := FAJnlLine."Source Code";
                InsuranceJnlLine."Reason Code" := FAJnlLine."Reason Code"
            end;
            InsuranceJnlLine.Validate("Insurance No.", FAJnlLine."Insurance No.");
            InsuranceJnlLine.Validate("FA No.", FAJnlLine."FA No.");
            InsuranceJnlLine."Posting Date" := FAJnlLine."FA Posting Date";
            InsuranceJnlLine.Validate(Amount, FAJnlLine.Amount);
            InsuranceJnlLine."Document Type" := FAJnlLine."Document Type";
            InsuranceJnlLine."Document Date" := FAJnlLine."Document Date";
            if InsuranceJnlLine."Document Date" = 0D then
                InsuranceJnlLine."Document Date" := InsuranceJnlLine."Posting Date";
            InsuranceJnlLine."Document No." := FAJnlLine."Document No.";
            InsuranceJnlLine."External Document No." := FAJnlLine."External Document No.";
            if not DeprBook."Use Default Dimension" then begin
                InsuranceJnlLine."Shortcut Dimension 1 Code" := FAJnlLine."Shortcut Dimension 1 Code";
                InsuranceJnlLine."Shortcut Dimension 2 Code" := FAJnlLine."Shortcut Dimension 2 Code";
                InsuranceJnlLine."Dimension Set ID" := FAJnlLine."Dimension Set ID";
            end;
        end;
        if FASetup."Automatic Insurance Posting" then
            InsuranceJnlPostLine.RunWithCheck(InsuranceJnlLine)
        else begin
            InsuranceJnlLine."Line No." := NextLineNo;
            if DeprBook."Use Default Dimension" then
                InsuranceJnlLine.CreateDimFromDefaultDim();
            InsuranceJnlLine.Insert(true);
        end;
    end;

    procedure InitInsuranceJnlLine(var InsuranceJnlLine: Record "Insurance Journal Line")
    var
        InsuranceJnlLine2: Record "Insurance Journal Line";
    begin
        FAGetJnl.InsuranceJnlName(DeprBook.Code, TemplateName, BatchName);
        InsuranceJnlLine."Journal Template Name" := TemplateName;
        InsuranceJnlLine."Journal Batch Name" := BatchName;
        InsuranceJnlLine.LockTable();
        FAGetJnl.SetInsuranceJnlRange(InsuranceJnlLine2, TemplateName, BatchName);
        NextLineNo := InsuranceJnlLine2."Line No." + 10000;
        InsuranceJnlLine."Posting No. Series" := FAJnlSetup.GetInsuranceNoSeries(InsuranceJnlLine);
    end;

    local procedure CreateLine(GenJnlPosting: Boolean; var GenJnlLine: Record "Gen. Journal Line"; var FAJnlLine: Record "FA Journal Line")
    var
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeCreateLine(GenJnlPosting, GenJnlLine, FAJnlLine, DuplicateInGenJnl, TemplateName, BatchName, FAGetJnl, DeprBook, IsHandled);
        if IsHandled then
            exit;

        if GenJnlPosting then begin
            DuplicateInGenJnl := true;
            TemplateName := GenJnlLine."Journal Template Name";
            BatchName := GenJnlLine."Journal Batch Name";
            FAGetJnl.JnlName(
                DeprBook.Code, false, Enum::"FA Journal Line FA Posting Type".FromInteger(GenJnlLine."FA Posting Type".AsInteger() - 1),
                DuplicateInGenJnl, TemplateName, BatchName);
        end;
        if not GenJnlPosting then begin
            FA.Get(FAJnlLine."FA No.");
            DuplicateInGenJnl := false;
            TemplateName := FAJnlLine."Journal Template Name";
            BatchName := FAJnlLine."Journal Batch Name";
            FAGetJnl.JnlName(
              DeprBook.Code, FA."Budgeted Asset", FAJnlLine."FA Posting Type",
              DuplicateInGenJnl, TemplateName, BatchName);
        end;
        InsertLine(GenJnlPosting, DuplicateInGenJnl, GenJnlLine, FAJnlLine);
    end;

    local procedure MakeGenJnlLine(var GenJnlLine: Record "Gen. Journal Line"; var FAJnlLine: Record "FA Journal Line")
    begin
        GenJnlLine."Account Type" := GenJnlLine."Account Type"::"Fixed Asset";
        GenJnlLine."Account No." := FAJnlLine."FA No.";
        GenJnlLine."Depreciation Book Code" := FAJnlLine."Depreciation Book Code";
        GenJnlLine."FA Posting Type" := Enum::"Gen. Journal Line FA Posting Type".FromInteger(FAJnlLine."FA Posting Type".AsInteger() + 1);
        GenJnlLine."FA Posting Date" := FAJnlLine."FA Posting Date";
        GenJnlLine."Posting Date" := FAJnlLine."Posting Date";
        if GenJnlLine."Posting Date" = GenJnlLine."FA Posting Date" then
            GenJnlLine."FA Posting Date" := 0D;
        GenJnlLine."Document Type" := FAJnlLine."Document Type";
        GenJnlLine."Document Date" := FAJnlLine."Document Date";
        GenJnlLine."Document No." := FAJnlLine."Document No.";
        GenJnlLine."External Document No." := FAJnlLine."External Document No.";
        GenJnlLine.Description := FAJnlLine.Description;
        GenJnlLine.Validate(Amount, FAJnlLine.Amount);
        GenJnlLine."Salvage Value" := FAJnlLine."Salvage Value";
        GenJnlLine.Quantity := FAJnlLine.Quantity;
        GenJnlLine.Validate(Correction, FAJnlLine.Correction);
        GenJnlLine."No. of Depreciation Days" := FAJnlLine."No. of Depreciation Days";
        GenJnlLine."Depr. until FA Posting Date" := FAJnlLine."Depr. until FA Posting Date";
        GenJnlLine."Depr. Acquisition Cost" := FAJnlLine."Depr. Acquisition Cost";
        GenJnlLine."Posting Group" := FAJnlLine."FA Posting Group";
        GenJnlLine."Maintenance Code" := FAJnlLine."Maintenance Code";
        GenJnlLine."Shortcut Dimension 1 Code" := FAJnlLine."Shortcut Dimension 1 Code";
        GenJnlLine."Shortcut Dimension 2 Code" := FAJnlLine."Shortcut Dimension 2 Code";
        GenJnlLine."Dimension Set ID" := FAJnlLine."Dimension Set ID";
        GenJnlLine."Budgeted FA No." := FAJnlLine."Budgeted FA No.";
        GenJnlLine."FA Reclassification Entry" := FAJnlLine."FA Reclassification Entry";
        GenJnlLine."Index Entry" := FAJnlLine."Index Entry";

        OnAfterMakeGenJnlLine(GenJnlLine, FAJnlLine);
    end;

    local procedure MakeFAJnlLine(var FAJnlLine: Record "FA Journal Line"; var GenJnlLine: Record "Gen. Journal Line")
    begin
        FAJnlLine."Depreciation Book Code" := GenJnlLine."Depreciation Book Code";
        FAJnlLine."FA Posting Type" := Enum::"FA Journal Line FA Posting Type".FromInteger(GenJnlLine."FA Posting Type".AsInteger() - 1);
        FAJnlLine."FA No." := GenJnlLine."Account No.";
        FAJnlLine."FA Posting Date" := GenJnlLine."FA Posting Date";
        FAJnlLine."Posting Date" := GenJnlLine."Posting Date";
        if FAJnlLine."Posting Date" = FAJnlLine."FA Posting Date" then
            FAJnlLine."Posting Date" := 0D;
        FAJnlLine."Document Type" := GenJnlLine."Document Type";
        FAJnlLine."Document Date" := GenJnlLine."Document Date";
        FAJnlLine."Document No." := GenJnlLine."Document No.";
        FAJnlLine."External Document No." := GenJnlLine."External Document No.";
        FAJnlLine.Description := GenJnlLine.Description;
        FAJnlLine.Validate(Amount, FAAmount);
        FAJnlLine."Salvage Value" := GenJnlLine."Salvage Value";
        FAJnlLine.Quantity := GenJnlLine.Quantity;
        FAJnlLine.Validate(Correction, GenJnlLine.Correction);
        FAJnlLine."No. of Depreciation Days" := GenJnlLine."No. of Depreciation Days";
        FAJnlLine."Depr. until FA Posting Date" := GenJnlLine."Depr. until FA Posting Date";
        FAJnlLine."Depr. Acquisition Cost" := GenJnlLine."Depr. Acquisition Cost";
        FAJnlLine."FA Posting Group" := GenJnlLine."Posting Group";
        FAJnlLine."Maintenance Code" := GenJnlLine."Maintenance Code";
        FAJnlLine."Shortcut Dimension 1 Code" := GenJnlLine."Shortcut Dimension 1 Code";
        FAJnlLine."Shortcut Dimension 2 Code" := GenJnlLine."Shortcut Dimension 2 Code";
        FAJnlLine."Dimension Set ID" := GenJnlLine."Dimension Set ID";
        FAJnlLine."Budgeted FA No." := GenJnlLine."Budgeted FA No.";
        FAJnlLine."FA Reclassification Entry" := GenJnlLine."FA Reclassification Entry";
        FAJnlLine."Index Entry" := GenJnlLine."Index Entry";

        OnAfterMakeFAJnlLine(FAJnlLine, GenJnlLine);
    end;

    local procedure AdjustGenJnlLine(var GenJnlLine: Record "Gen. Journal Line")
    var
        GenJnlLine2: Record "Gen. Journal Line";
    begin
        GenJnlLine2 := GenJnlLine;

        GenJnlLine.Init();
        GenJnlLine."Account Type" := GenJnlLine."Account Type"::"Fixed Asset";
        GenJnlLine."Depreciation Book Code" := GenJnlLine2."Depreciation Book Code";
        GenJnlLine."FA Posting Type" := GenJnlLine2."FA Posting Type";
        GenJnlLine."Account No." := GenJnlLine2."Account No.";
        GenJnlLine."FA Posting Date" := GenJnlLine2."FA Posting Date";
        GenJnlLine."Posting Date" := GenJnlLine2."Posting Date";
        if GenJnlLine."Posting Date" = GenJnlLine."FA Posting Date" then
            GenJnlLine."FA Posting Date" := 0D;
        GenJnlLine."Document Type" := GenJnlLine2."Document Type";
        GenJnlLine."Document Date" := GenJnlLine2."Document Date";
        GenJnlLine."Document No." := GenJnlLine2."Document No.";
        GenJnlLine."External Document No." := GenJnlLine2."External Document No.";
        GenJnlLine.Description := GenJnlLine2.Description;
        GenJnlLine.Validate(Amount, FAAmount);
        GenJnlLine."Salvage Value" := GenJnlLine2."Salvage Value";
        GenJnlLine.Quantity := GenJnlLine2.Quantity;
        GenJnlLine.Validate(Correction, GenJnlLine2.Correction);
        GenJnlLine."No. of Depreciation Days" := GenJnlLine2."No. of Depreciation Days";
        GenJnlLine."Depr. until FA Posting Date" := GenJnlLine2."Depr. until FA Posting Date";
        GenJnlLine."Depr. Acquisition Cost" := GenJnlLine2."Depr. Acquisition Cost";
        GenJnlLine."Posting Group" := GenJnlLine2."Posting Group";
        GenJnlLine."Maintenance Code" := GenJnlLine2."Maintenance Code";
        GenJnlLine."Shortcut Dimension 1 Code" := GenJnlLine2."Shortcut Dimension 1 Code";
        GenJnlLine."Shortcut Dimension 2 Code" := GenJnlLine2."Shortcut Dimension 2 Code";
        GenJnlLine."Dimension Set ID" := GenJnlLine2."Dimension Set ID";
        GenJnlLine."Budgeted FA No." := GenJnlLine2."Budgeted FA No.";
        GenJnlLine."FA Reclassification Entry" := GenJnlLine2."FA Reclassification Entry";
        GenJnlLine."Index Entry" := GenJnlLine2."Index Entry";

        OnAfterAdjustGenJnlLine(GenJnlLine, GenJnlLine2);
    end;

    local procedure AdjustFAJnlLine(var FAJnlLine: Record "FA Journal Line")
    var
        FAJnlLine2: Record "FA Journal Line";
    begin
        FAJnlLine2 := FAJnlLine;

        FAJnlLine.Init();
        FAJnlLine."FA No." := FAJnlLine2."FA No.";
        FAJnlLine."Depreciation Book Code" := FAJnlLine2."Depreciation Book Code";
        FAJnlLine."FA Posting Type" := FAJnlLine2."FA Posting Type";
        FAJnlLine."FA Posting Date" := FAJnlLine2."FA Posting Date";
        FAJnlLine."Posting Date" := FAJnlLine2."Posting Date";
        if FAJnlLine."Posting Date" = FAJnlLine."FA Posting Date" then
            FAJnlLine."Posting Date" := 0D;
        FAJnlLine."Document Type" := FAJnlLine2."Document Type";
        FAJnlLine."Document Date" := FAJnlLine2."Document Date";
        FAJnlLine."Document No." := FAJnlLine2."Document No.";
        FAJnlLine."External Document No." := FAJnlLine2."External Document No.";
        FAJnlLine.Description := FAJnlLine2.Description;
        FAJnlLine.Validate(Amount, FAJnlLine2.Amount);
        FAJnlLine."Salvage Value" := FAJnlLine2."Salvage Value";
        FAJnlLine.Quantity := FAJnlLine2.Quantity;
        FAJnlLine.Validate(Correction, FAJnlLine2.Correction);
        FAJnlLine."No. of Depreciation Days" := FAJnlLine2."No. of Depreciation Days";
        FAJnlLine."Depr. until FA Posting Date" := FAJnlLine2."Depr. until FA Posting Date";
        FAJnlLine."Depr. Acquisition Cost" := FAJnlLine2."Depr. Acquisition Cost";
        FAJnlLine."FA Posting Group" := FAJnlLine2."FA Posting Group";
        FAJnlLine."Maintenance Code" := FAJnlLine2."Maintenance Code";
        FAJnlLine."Shortcut Dimension 1 Code" := FAJnlLine2."Shortcut Dimension 1 Code";
        FAJnlLine."Shortcut Dimension 2 Code" := FAJnlLine2."Shortcut Dimension 2 Code";
        FAJnlLine."Dimension Set ID" := FAJnlLine2."Dimension Set ID";
        FAJnlLine."Budgeted FA No." := FAJnlLine2."Budgeted FA No.";
        FAJnlLine."FA Reclassification Entry" := FAJnlLine2."FA Reclassification Entry";
        FAJnlLine."Index Entry" := FAJnlLine2."Index Entry";

        OnAfterAdjustFAJnlLine(FAJnlLine, FAJnlLine2);
    end;

    local procedure CalcExchangeRateAmount(DuplicateInGenJnl: Boolean; FANo: Code[20]; var GenJnlLine: Record "Gen. Journal Line"; var FAJnlLine: Record "FA Journal Line")
    var
        ExchangeRate2: Decimal;
    begin
        if not DeprBook."Use FA Exch. Rate in Duplic." then
            exit;
        ExchangeRate2 := ExchangeRate / GetExchangeRate(FANo, DeprBook);
        if DuplicateInGenJnl then begin
            GenJnlLine.Validate(Amount, Round(GenJnlLine.Amount * ExchangeRate2));
            GenJnlLine.Validate("Salvage Value", Round(GenJnlLine."Salvage Value" * ExchangeRate2));
        end;
        if not DuplicateInGenJnl then begin
            FAJnlLine.Validate(Amount, Round(FAJnlLine.Amount * ExchangeRate2));
            FAJnlLine.Validate("Salvage Value", Round(FAJnlLine."Salvage Value" * ExchangeRate2));
        end;
    end;

    local procedure GetExchangeRate(FANo: Code[20]; var DeprBook: Record "Depreciation Book"): Decimal
    var
        FADeprBook: Record "FA Depreciation Book";
    begin
        if not DeprBook."Use FA Exch. Rate in Duplic." then
            exit(100);
        FADeprBook.Get(FANo, DeprBook.Code);
        if FADeprBook."FA Exchange Rate" > 0 then
            exit(FADeprBook."FA Exchange Rate");
        if DeprBook."Default Exchange Rate" > 0 then
            exit(DeprBook."Default Exchange Rate");
        exit(100);
    end;

    local procedure InsertLine(GenJnlPosting: Boolean; DuplicateInGenJnl: Boolean; GenJnlLine: Record "Gen. Journal Line"; FAJnlLine: Record "FA Journal Line")
    begin
        if GenJnlPosting and DuplicateInGenJnl then begin
            AdjustGenJnlLine(GenJnlLine);
            GenJnlLine."Journal Template Name" := TemplateName;
            GenJnlLine."Journal Batch Name" := BatchName;
            GenJnlLine.LockTable();
            FAGetJnl.SetGenJnlRange(GenJnlLine2, TemplateName, BatchName);
            GenJnlLine.Validate("Depreciation Book Code", DeprBook.Code);
            CalcExchangeRateAmount(DuplicateInGenJnl, GenJnlLine."Account No.", GenJnlLine, FAJnlLine);
            GenJnlLine."Posting No. Series" := FAJnlSetup.GetGenNoSeries(GenJnlLine);
            FAJnlSetup.SetGenJnlTrailCodes(GenJnlLine);
            if DeprBook."Use Default Dimension" then
                GenJnlLine.CreateDimFromDefaultDim(0);
            GenJnlLine."Line No." := GenJnlLine2."Line No." + 10000;
            OnBeforeGenJnlLineInsert(GenJnlLine, FAJnlLine, GenJnlPosting, DuplicateInGenJnl);
            GenJnlLine.Insert(true);
        end;

        if GenJnlPosting and not DuplicateInGenJnl then begin
            MakeFAJnlLine(FAJnlLine, GenJnlLine);
            FAJnlLine."Journal Template Name" := TemplateName;
            FAJnlLine."Journal Batch Name" := BatchName;
            FAJnlLine.LockTable();
            FAGetJnl.SetFAJnlRange(FAJnlLine2, TemplateName, BatchName);
            FAJnlLine.Validate("Depreciation Book Code", DeprBook.Code);
            CalcExchangeRateAmount(DuplicateInGenJnl, FAJnlLine."FA No.", GenJnlLine, FAJnlLine);
            FAJnlLine."Posting No. Series" := FAJnlSetup.GetFANoSeries(FAJnlLine);
            FAJnlSetup.SetFAJnlTrailCodes(FAJnlLine);
            if DeprBook."Use Default Dimension" then
                FAJnlLine.CreateDimFromDefaultDim();
            FAJnlLine."Line No." := FAJnlLine2."Line No." + 10000;
            OnBeforeFAJnlLineInsert(GenJnlLine, FAJnlLine, GenJnlPosting, DuplicateInGenJnl, DeprBook);
            FAJnlLine.Insert(true);
        end;

        if not GenJnlPosting and DuplicateInGenJnl then begin
            MakeGenJnlLine(GenJnlLine, FAJnlLine);
            GenJnlLine."Journal Template Name" := TemplateName;
            GenJnlLine."Journal Batch Name" := BatchName;
            GenJnlLine.LockTable();
            FAGetJnl.SetGenJnlRange(GenJnlLine2, TemplateName, BatchName);
            GenJnlLine.Validate("Depreciation Book Code", DeprBook.Code);
            CalcExchangeRateAmount(DuplicateInGenJnl, GenJnlLine."Account No.", GenJnlLine, FAJnlLine);
            GenJnlLine."Posting No. Series" := FAJnlSetup.GetGenNoSeries(GenJnlLine);
            FAJnlSetup.SetGenJnlTrailCodes(GenJnlLine);
            if DeprBook."Use Default Dimension" then
                GenJnlLine.CreateDimFromDefaultDim(0);
            GenJnlLine."Line No." := GenJnlLine2."Line No." + 10000;
            OnBeforeGenJnlLineInsert(GenJnlLine, FAJnlLine, GenJnlPosting, DuplicateInGenJnl);
            GenJnlLine.Insert(true);
        end;

        if not GenJnlPosting and not DuplicateInGenJnl then begin
            AdjustFAJnlLine(FAJnlLine);
            FAJnlLine."Journal Template Name" := TemplateName;
            FAJnlLine."Journal Batch Name" := BatchName;
            FAJnlLine.LockTable();
            FAGetJnl.SetFAJnlRange(FAJnlLine2, TemplateName, BatchName);
            FAJnlLine.Validate("Depreciation Book Code", DeprBook.Code);
            CalcExchangeRateAmount(DuplicateInGenJnl, FAJnlLine."FA No.", GenJnlLine, FAJnlLine);
            FAJnlLine."Posting No. Series" := FAJnlSetup.GetFANoSeries(FAJnlLine);
            FAJnlSetup.SetFAJnlTrailCodes(FAJnlLine);
            if DeprBook."Use Default Dimension" then
                FAJnlLine.CreateDimFromDefaultDim();
            FAJnlLine."Line No." := FAJnlLine2."Line No." + 10000;
            OnBeforeFAJnlLineInsert(GenJnlLine, FAJnlLine, GenJnlPosting, DuplicateInGenJnl, DeprBook);
            FAJnlLine.Insert(true);
        end;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterAdjustGenJnlLine(var GenJournalLine: Record "Gen. Journal Line"; var GenJournalLine2: Record "Gen. Journal Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterAdjustFAJnlLine(var FAJournalLine: Record "FA Journal Line"; var FAJournalLine2: Record "FA Journal Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterMakeGenJnlLine(var GenJnlLine: Record "Gen. Journal Line"; var FAJnlLine: Record "FA Journal Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterMakeFAJnlLine(var FAJnlLine: Record "FA Journal Line"; var GenJnlLine: Record "Gen. Journal Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCreateLine(GenJnlPosting: Boolean; var GenJournalLine: Record "Gen. Journal Line"; var FAJournalLine: Record "FA Journal Line"; var DuplicateInGenJnl: Boolean; var TemplateName: Code[10]; var BatchName: Code[10]; var FAGetJournal: Codeunit "FA Get Journal"; DepreciationBook: Record "Depreciation Book"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGenJnlLineInsert(var GenJournalLine: Record "Gen. Journal Line"; var FAJournalLine: Record "FA Journal Line"; GenJnlPosting: Boolean; DuplicateInGenJnl: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeFAJnlLineInsert(var GenJournalLine: Record "Gen. Journal Line"; var FAJournalLine: Record "FA Journal Line"; GenJnlPosting: Boolean; DuplicateInGenJnl: Boolean; DepreciationBook: Record "Depreciation Book")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGenJnlLineDuplicate(var GenJournalLine: Record "Gen. Journal Line"; var FAAmount: Decimal)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnDuplicateGenJnlLineOnAfterCreateLine(GenJnlLine: Record "Gen. Journal Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeDuplicateFAJnlLine(var FAJnlLine: Record "FA Journal Line")
    begin
    end;
}