Report 412 Purchase Prepmt. Doc. - Test, source in 29

Source29

src/Layers/W1/BaseApp/Purchases/Reports/PurchasePrepmtDocTest.Report.al1141 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.Purchases.Reports;

using Microsoft.CRM.Campaign;
using Microsoft.CRM.Team;
using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Account;
using Microsoft.Finance.GeneralLedger.Journal;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Finance.ReceivablesPayables;
using Microsoft.Finance.VAT.Calculation;
using Microsoft.Foundation.Address;
using Microsoft.Inventory.Location;
using Microsoft.Projects.Project.Job;
using Microsoft.Purchases.Document;
using Microsoft.Purchases.Payables;
using Microsoft.Purchases.Posting;
using Microsoft.Purchases.Setup;
using Microsoft.Purchases.Vendor;
using Microsoft.Utilities;
using System.Utilities;

report 412 "Purchase Prepmt. Doc. - Test"
{
    Caption = 'Purchase Prepmt. Doc. - Test';
    DefaultRenderingLayout = RDLCLayout;

    dataset
    {
        dataitem("Purchase Header"; "Purchase Header")
        {
            DataItemTableView = where("Document Type" = const(Order));
            RequestFilterFields = "No.";
            RequestFilterHeading = 'Purchase Prepayment Document';
            column(Purchase_Header_Document_Type; "Document Type")
            {
            }
            column(Purchase_Header_No_; "No.")
            {
            }
            dataitem(PageCounter; "Integer")
            {
                DataItemTableView = sorting(Number) where(Number = const(1));
                column(FORMAT_TODAY_0_4_; Format(Today, 0, 4))
                {
                }
                column(COMPANYNAME; COMPANYPROPERTY.DisplayName())
                {
                }
                column(STRSUBSTNO_Text001_PurchHeaderFilter_; StrSubstNo(Text001, PurchHeaderFilter))
                {
                }
                column(PurchHeaderFilter; PurchHeaderFilter)
                {
                }
                column(PrepmtDocText; PrepmtDocText)
                {
                }
                column(ShipToAddr_6_; ShipToAddr[6])
                {
                }
                column(ShipToAddr_7_; ShipToAddr[7])
                {
                }
                column(ShipToAddr_8_; ShipToAddr[8])
                {
                }
                column(ShipToAddr_5_; ShipToAddr[5])
                {
                }
                column(ShipToAddr_4_; ShipToAddr[4])
                {
                }
                column(ShipToAddr_3_; ShipToAddr[3])
                {
                }
                column(ShipToAddr_2_; ShipToAddr[2])
                {
                }
                column(BuyFromAddr_8_; BuyFromAddr[8])
                {
                }
                column(BuyFromAddr_7_; BuyFromAddr[7])
                {
                }
                column(BuyFromAddr_6_; BuyFromAddr[6])
                {
                }
                column(BuyFromAddr_5_; BuyFromAddr[5])
                {
                }
                column(BuyFromAddr_4_; BuyFromAddr[4])
                {
                }
                column(BuyFromAddr_3_; BuyFromAddr[3])
                {
                }
                column(BuyFromAddr_2_; BuyFromAddr[2])
                {
                }
                column(ShipToAddr_1_; ShipToAddr[1])
                {
                }
                column(BuyFromAddr_1_; BuyFromAddr[1])
                {
                }
                column(Purchase_Header___Sell_to_Customer_No__; "Purchase Header"."Sell-to Customer No.")
                {
                }
                column(Purchase_Header___Buy_from_Vendor_No__; "Purchase Header"."Buy-from Vendor No.")
                {
                }
                column(FORMAT__Purchase_Header___Document_Type____________Purchase_Header___No__; Format("Purchase Header"."Document Type") + ' ' + "Purchase Header"."No.")
                {
                }
                column(PayToAddr_5_; PayToAddr[5])
                {
                }
                column(PayToAddr_6_; PayToAddr[6])
                {
                }
                column(PayToAddr_7_; PayToAddr[7])
                {
                }
                column(PayToAddr_8_; PayToAddr[8])
                {
                }
                column(PayToAddr_4_; PayToAddr[4])
                {
                }
                column(PayToAddr_3_; PayToAddr[3])
                {
                }
                column(PayToAddr_2_; PayToAddr[2])
                {
                }
                column(PayToAddr_1_; PayToAddr[1])
                {
                }
                column(Purchase_Header___Pay_to_Vendor_No__; "Purchase Header"."Pay-to Vendor No.")
                {
                }
                column(ShowPgCounter5; not ("Purchase Header"."Pay-to Vendor No." in ['', "Purchase Header"."Buy-from Vendor No."]))
                {
                }
                column(Purchase_Header___Purchaser_Code_; "Purchase Header"."Purchaser Code")
                {
                }
                column(Purchase_Header___Your_Reference_; "Purchase Header"."Your Reference")
                {
                }
                column(Purchase_Header___Prices_Including_VAT_; "Purchase Header"."Prices Including VAT")
                {
                }
                column(Purchase_Header___Vendor_Invoice_No__; "Purchase Header"."Vendor Invoice No.")
                {
                }
                column(Purchase_Header___Shipment_Method_Code_; "Purchase Header"."Shipment Method Code")
                {
                }
                column(Purchase_Header___Payment_Method_Code_; "Purchase Header"."Payment Method Code")
                {
                }
                column(Purchase_Header___Vendor_Shipment_No__; "Purchase Header"."Vendor Shipment No.")
                {
                }
                column(Purchase_Header___Vendor_Order_No__; "Purchase Header"."Vendor Order No.")
                {
                }
                column(Purchase_Header___Prepayment_Due_Date_; Format("Purchase Header"."Prepayment Due Date"))
                {
                }
                column(Purchase_Header___Posting_Date_; Format("Purchase Header"."Posting Date"))
                {
                }
                column(Purchase_Header___Prepmt__Payment_Terms_Code_; "Purchase Header"."Prepmt. Payment Terms Code")
                {
                }
                column(Purchase_Header___Document_Date_; Format("Purchase Header"."Document Date"))
                {
                }
                column(Purchase_Header___Expected_Receipt_Date_; Format("Purchase Header"."Expected Receipt Date"))
                {
                }
                column(Purchase_Header___Vendor_Posting_Group_; "Purchase Header"."Vendor Posting Group")
                {
                }
                column(Purchase_Header___Order_Date_; Format("Purchase Header"."Order Date"))
                {
                }
                column(Purchase_Header___Prepmt__Pmt__Discount_Date_; Format("Purchase Header"."Prepmt. Pmt. Discount Date"))
                {
                }
                column(Purchase_Header___Prepmt__Payment_Discount___; "Purchase Header"."Prepmt. Payment Discount %")
                {
                }
                column(ShowPgCounter7; DocumentType = DocumentType::Invoice)
                {
                }
                column(PricesIncludingVAT1; Format("Purchase Header"."Prices Including VAT"))
                {
                }
                column(Purchase_Header___Vendor_Cr__Memo_No__; "Purchase Header"."Vendor Cr. Memo No.")
                {
                }
                column(Purchase_Header___Prices_Including_VAT__Control78; "Purchase Header"."Prices Including VAT")
                {
                }
                column(Purchase_Header___Posting_Date__Control81; Format("Purchase Header"."Posting Date"))
                {
                }
                column(Purchase_Header___Document_Date__Control83; Format("Purchase Header"."Document Date"))
                {
                }
                column(Purchase_Header___Vendor_Posting_Group__Control87; "Purchase Header"."Vendor Posting Group")
                {
                }
                column(ShowPgCounter8; DocumentType = DocumentType::"Credit Memo")
                {
                }
                column(CurrReport_PAGENOCaption; CurrReport_PAGENOCaptionLbl)
                {
                }
                column(Purchase_Prepyament_Document___TestCaption; Purchase_Prepyament_Document___TestCaptionLbl)
                {
                }
                column(Ship_toCaption; Ship_toCaptionLbl)
                {
                }
                column(Buy_fromCaption; Buy_fromCaptionLbl)
                {
                }
                column(Purchase_Header___Sell_to_Customer_No__Caption; "Purchase Header".FieldCaption("Sell-to Customer No."))
                {
                }
                column(Purchase_Header___Buy_from_Vendor_No__Caption; "Purchase Header".FieldCaption("Buy-from Vendor No."))
                {
                }
                column(Purchase_Header___Pay_to_Vendor_No__Caption; "Purchase Header".FieldCaption("Pay-to Vendor No."))
                {
                }
                column(Pay_toCaption; Pay_toCaptionLbl)
                {
                }
                column(Purchase_Header___Purchaser_Code_Caption; "Purchase Header".FieldCaption("Purchaser Code"))
                {
                }
                column(Purchase_Header___Your_Reference_Caption; "Purchase Header".FieldCaption("Your Reference"))
                {
                }
                column(Purchase_Header___Prices_Including_VAT_Caption; "Purchase Header".FieldCaption("Prices Including VAT"))
                {
                }
                column(Purchase_Header___Vendor_Invoice_No__Caption; "Purchase Header".FieldCaption("Vendor Invoice No."))
                {
                }
                column(Purchase_Header___Vendor_Shipment_No__Caption; "Purchase Header".FieldCaption("Vendor Shipment No."))
                {
                }
                column(Purchase_Header___Vendor_Order_No__Caption; "Purchase Header".FieldCaption("Vendor Order No."))
                {
                }
                column(Purchase_Header___Shipment_Method_Code_Caption; "Purchase Header".FieldCaption("Shipment Method Code"))
                {
                }
                column(Purchase_Header___Payment_Method_Code_Caption; "Purchase Header".FieldCaption("Payment Method Code"))
                {
                }
                column(Purchase_Header___Prepayment_Due_Date_Caption; Purchase_Header___Prepayment_Due_Date_CaptionLbl)
                {
                }
                column(Purchase_Header___Posting_Date_Caption; Purchase_Header___Posting_Date_CaptionLbl)
                {
                }
                column(Purchase_Header___Prepmt__Payment_Terms_Code_Caption; "Purchase Header".FieldCaption("Prepmt. Payment Terms Code"))
                {
                }
                column(Purchase_Header___Document_Date_Caption; Purchase_Header___Document_Date_CaptionLbl)
                {
                }
                column(Purchase_Header___Expected_Receipt_Date_Caption; Purchase_Header___Expected_Receipt_Date_CaptionLbl)
                {
                }
                column(Purchase_Header___Vendor_Posting_Group_Caption; "Purchase Header".FieldCaption("Vendor Posting Group"))
                {
                }
                column(Purchase_Header___Order_Date_Caption; Purchase_Header___Order_Date_CaptionLbl)
                {
                }
                column(Purchase_Header___Prepmt__Pmt__Discount_Date_Caption; Purchase_Header___Prepmt__Pmt__Discount_Date_CaptionLbl)
                {
                }
                column(Purchase_Header___Prepmt__Payment_Discount___Caption; "Purchase Header".FieldCaption("Prepmt. Payment Discount %"))
                {
                }
                column(Purchase_Header___Vendor_Cr__Memo_No__Caption; "Purchase Header".FieldCaption("Vendor Cr. Memo No."))
                {
                }
                column(Purchase_Header___Prices_Including_VAT__Control78Caption; "Purchase Header".FieldCaption("Prices Including VAT"))
                {
                }
                column(Purchase_Header___Posting_Date__Control81Caption; Purchase_Header___Posting_Date__Control81CaptionLbl)
                {
                }
                column(Purchase_Header___Document_Date__Control83Caption; Purchase_Header___Document_Date__Control83CaptionLbl)
                {
                }
                column(Purchase_Header___Vendor_Posting_Group__Control87Caption; "Purchase Header".FieldCaption("Vendor Posting Group"))
                {
                }
                dataitem(HeaderDimLoop; "Integer")
                {
                    DataItemTableView = sorting(Number) where(Number = filter(1 ..));
                    column(DimText; DimText)
                    {
                    }
                    column(HeaderDimLoop_Number; Number)
                    {
                    }
                    column(Header_DimensionsCaption; Header_DimensionsCaptionLbl)
                    {
                    }

                    trigger OnAfterGetRecord()
                    begin
                        if Number = 1 then begin
                            if not DimSetEntry.FindSet() then
                                CurrReport.Break();
                        end else
                            if not Continue then
                                CurrReport.Break();

                        DimText := '';
                        Continue := false;
                        repeat
                            Continue := MergeText(DimSetEntry);
                            if Continue then
                                exit;
                        until DimSetEntry.Next() = 0;
                    end;

                    trigger OnPreDataItem()
                    begin
                        if not ShowDim then
                            CurrReport.Break();
                    end;
                }
                dataitem(HeaderErrorCounter; "Integer")
                {
                    DataItemTableView = sorting(Number);
                    column(ErrorText_Number_; ErrorText[Number])
                    {
                    }
                    column(ErrorText_Number_Caption; ErrorText_Number_CaptionLbl)
                    {
                    }

                    trigger OnPostDataItem()
                    begin
                        ErrorCounter := 0;
                    end;

                    trigger OnPreDataItem()
                    begin
                        SetRange(Number, 1, ErrorCounter);
                    end;
                }
                dataitem(CopyLoop; "Integer")
                {
                    DataItemTableView = sorting(Number) where(Number = const(1));
                    dataitem("Purchase Line"; "Purchase Line")
                    {
                        DataItemLink = "Document Type" = field("Document Type"), "Document No." = field("No.");
                        DataItemLinkReference = "Purchase Header";
                        DataItemTableView = sorting("Document Type", "Document No.", "Line No.");

                        trigger OnPreDataItem()
                        begin
                            CurrReport.Break();
                        end;
                    }
                    dataitem(PurchLineLoop; "Integer")
                    {
                        DataItemTableView = sorting(Number) where(Number = filter(1 ..));
                        column(Purchase_Line___Prepmt__Amt__Inv__; "Purchase Line"."Prepmt. Amt. Inv.")
                        {
                        }
                        column(Purchase_Line___Prepmt__Line_Amount_; "Purchase Line"."Prepmt. Line Amount")
                        {
                        }
                        column(Purchase_Line___Prepayment___; "Purchase Line"."Prepayment %")
                        {
                        }
                        column(Purchase_Line___Line_Amount_; "Purchase Line"."Line Amount")
                        {
                        }
                        column(Purchase_Line__Quantity; "Purchase Line".Quantity)
                        {
                        }
                        column(Purchase_Line__Description; "Purchase Line".Description)
                        {
                        }
                        column(Purchase_Line___No__; "Purchase Line"."No.")
                        {
                        }
                        column(Purchase_Line__Type; Format("Purchase Line".Type))
                        {
                        }
                        column(Purchase_Line___Line_No__; "Purchase Line"."Line No.")
                        {
                        }
                        column(Purchase_Line___Prepmt__Amt__Inv__Caption; "Purchase Line".FieldCaption("Prepmt. Amt. Inv."))
                        {
                        }
                        column(Purchase_Line___Prepmt__Line_Amount_Caption; "Purchase Line".FieldCaption("Prepmt. Line Amount"))
                        {
                        }
                        column(Purchase_Line___Prepayment___Caption; "Purchase Line".FieldCaption("Prepayment %"))
                        {
                        }
                        column(Purchase_Line___Line_Amount_Caption; "Purchase Line".FieldCaption("Line Amount"))
                        {
                        }
                        column(Purchase_Line__QuantityCaption; "Purchase Line".FieldCaption(Quantity))
                        {
                        }
                        column(Purchase_Line__DescriptionCaption; "Purchase Line".FieldCaption(Description))
                        {
                        }
                        column(Purchase_Line___No__Caption; "Purchase Line".FieldCaption("No."))
                        {
                        }
                        column(Purchase_Line__TypeCaption; "Purchase Line".FieldCaption(Type))
                        {
                        }
                        dataitem(LineErrorCounter; "Integer")
                        {
                            DataItemTableView = sorting(Number);
                            column(ErrorText_Number__Control104; ErrorText[Number])
                            {
                            }
                            column(ErrorText_Number__Control104Caption; ErrorText_Number__Control104CaptionLbl)
                            {
                            }

                            trigger OnPostDataItem()
                            begin
                                ErrorCounter := 0;
                            end;

                            trigger OnPreDataItem()
                            begin
                                SetRange(Number, 1, ErrorCounter);
                            end;
                        }

                        trigger OnAfterGetRecord()
                        var
                            GLAcc: Record "G/L Account";
                            CurrentErrorCount: Integer;
                        begin
                            if Number = 1 then begin
                                if not TempPurchLine.Find('-') then
                                    CurrReport.Break();
                            end else
                                if TempPurchLine.Next() = 0 then
                                    CurrReport.Break();
                            "Purchase Line" := TempPurchLine;
                            CurrentErrorCount := ErrorCounter;
                            if ("Purchase Line"."Gen. Bus. Posting Group" <> GenPostingSetup."Gen. Bus. Posting Group") or
                               ("Purchase Line"."Gen. Prod. Posting Group" <> GenPostingSetup."Gen. Prod. Posting Group")
                            then
                                if not GenPostingSetup.Get(
                                     "Purchase Line"."Gen. Bus. Posting Group", "Purchase Line"."Gen. Prod. Posting Group")
                                then
                                    AddError(
                                      StrSubstNo(
                                        Text016,
                                        GenPostingSetup.TableCaption(),
                                        "Purchase Line"."Gen. Bus. Posting Group", "Purchase Line"."Gen. Prod. Posting Group"));

                            if GenPostingSetup."Purch. Prepayments Account" = '' then
                                AddError(StrSubstNo(Text006, GenPostingSetup.FieldCaption("Purch. Prepayments Account")))
                            else
                                if GLAcc.Get(GenPostingSetup."Purch. Prepayments Account") then begin
                                    if GLAcc.Blocked then
                                        AddError(
                                          StrSubstNo(
                                            Text008, GLAcc.FieldCaption(Blocked), false, GLAcc.TableCaption(), "Purchase Line"."No."));
                                end else
                                    AddError(StrSubstNo(Text007, GLAcc.TableCaption(), GenPostingSetup."Purch. Prepayments Account"));

                            if ErrorCounter = CurrentErrorCount then
                                if PurchPostPrepmt.PrepmtAmount("Purchase Line", DocumentType) <> 0 then begin
                                    PurchPostPrepmt.FillInvLineBuffer("Purchase Header", "Purchase Line", TempPrepmtInvLineBuf2);
                                    TempPrepmtInvLineBuf.InsertInvLineBuffer(TempPrepmtInvLineBuf2);
                                end;

                            TempPrepmtInvLineBuf2.Reset();
                            TempPrepmtInvLineBuf2.DeleteAll();
                        end;
                    }

                    trigger OnPreDataItem()
                    var
                        TempPurchLineToDeduct: Record "Purchase Line" temporary;
                    begin
                        TempPurchLine.Reset();
                        TempPurchLine.DeleteAll();

                        Clear(PurchPostPrepmt);
                        TempVATAmountLine.DeleteAll();
                        PurchPostPrepmt.GetPurchLines("Purchase Header", DocumentType, TempPurchLine);
                        if DocumentType = DocumentType::Invoice then begin
                            PurchPostPrepmt.GetPurchLinesToDeduct("Purchase Header", TempPurchLineToDeduct);
                            if not TempPurchLineToDeduct.IsEmpty() then
                                PurchPostPrepmt.CalcVATAmountLines(
                                  "Purchase Header", TempPurchLineToDeduct, TempVATAmountLineDeduct, DocumentType::"Credit Memo");
                        end;
                        PurchPostPrepmt.CalcVATAmountLines("Purchase Header", TempPurchLine, TempVATAmountLine, DocumentType);
                        TempVATAmountLine.DeductVATAmountLine(TempVATAmountLineDeduct);
                        PurchPostPrepmt.UpdateVATOnLines("Purchase Header", TempPurchLine, TempVATAmountLine, DocumentType);
                        VATAmount := TempVATAmountLine.GetTotalVATAmount();
                        VATBaseAmount := TempVATAmountLine.GetTotalVATBase();
                    end;
                }
                dataitem(Blank; "Integer")
                {
                    DataItemTableView = sorting(Number) where(Number = const(1));
                }
                dataitem(PrepmtLoop; "Integer")
                {
                    DataItemTableView = sorting(Number) where(Number = filter(1 ..));
                    column(Prepayment_Inv__Line_Buffer___VAT_Identifier_; "Prepayment Inv. Line Buffer"."VAT Identifier")
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer___VAT___; "Prepayment Inv. Line Buffer"."VAT %")
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer___VAT_Amount_; "Prepayment Inv. Line Buffer"."VAT Amount")
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer__Description; "Prepayment Inv. Line Buffer".Description)
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer__Amount; "Prepayment Inv. Line Buffer".Amount)
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer___G_L_Account_No__; "Prepayment Inv. Line Buffer"."G/L Account No.")
                    {
                    }
                    column(PrepmtLoop_PrepmtLoop_Number; Number)
                    {
                    }
                    column(TotalText; TotalText)
                    {
                    }
                    column(VATAmount___0; VATAmount = 0)
                    {
                    }
                    column(TotalExclVATText; TotalExclVATText)
                    {
                    }
                    column(VATAmountLine_VATAmountText; TempVATAmountLine.VATAmountText())
                    {
                    }
                    column(TotalInclVATText; TotalInclVATText)
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer__Amount_Control160; "Prepayment Inv. Line Buffer".Amount)
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmount; VATAmount)
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(Prepayment_Inv__Line_Buffer__Amount___VATAmount; "Prepayment Inv. Line Buffer".Amount + VATAmount)
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(NOT__Purchase_Header___Prices_Including_VAT__AND__VATAmount____0_; not "Purchase Header"."Prices Including VAT" and (VATAmount <> 0))
                    {
                    }
                    column(SumPrepaymInvLineBufferAmount; SumPrepaymInvLineBufferAmount)
                    {
                    }
                    column(VATBaseAmount___VATAmount; VATBaseAmount + VATAmount)
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(Purchase_Header___Prices_Including_VAT__AND__VATAmount____0_; "Purchase Header"."Prices Including VAT" and (VATAmount <> 0))
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer___VAT_Identifier_Caption; "Prepayment Inv. Line Buffer".FieldCaption("VAT Identifier"))
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer___VAT___Caption; "Prepayment Inv. Line Buffer".FieldCaption("VAT %"))
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer___VAT_Amount_Caption; "Prepayment Inv. Line Buffer".FieldCaption("VAT Amount"))
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer__DescriptionCaption; "Prepayment Inv. Line Buffer".FieldCaption(Description))
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer__AmountCaption; "Prepayment Inv. Line Buffer".FieldCaption(Amount))
                    {
                    }
                    column(Prepayment_Inv__Line_Buffer___G_L_Account_No__Caption; "Prepayment Inv. Line Buffer".FieldCaption("G/L Account No."))
                    {
                    }
                    dataitem("Prepayment Inv. Line Buffer"; "Prepayment Inv. Line Buffer")
                    {
                        DataItemTableView = sorting("G/L Account No.", "Dimension Set ID", "Job No.", "Tax Area Code", "Tax Liable", "Tax Group Code", "Invoice Rounding", Adjustment, "Line No.");

                        trigger OnPreDataItem()
                        begin
                            CurrReport.Break();
                        end;
                    }
                    dataitem(LineDimLoop; "Integer")
                    {
                        DataItemTableView = sorting(Number) where(Number = filter(1 ..));
                        column(DimText_Control118; DimText)
                        {
                        }
                        column(LineDimLoop_Number; Number)
                        {
                        }
                        column(LineDocDim_LineNo; LineDimSetEntry."Dimension Set ID")
                        {
                        }
                        column(Header_DimensionsCaption_Control119; Header_DimensionsCaption_Control119Lbl)
                        {
                        }

                        trigger OnAfterGetRecord()
                        begin
                            if Number = 1 then begin
                                if not LineDimSetEntry.FindSet() then
                                    CurrReport.Break();
                            end else
                                if not Continue then
                                    CurrReport.Break();
                            DimText := '';
                            Continue := false;

                            repeat
                                Continue := MergeText(LineDimSetEntry);
                                if Continue then
                                    exit;
                            until LineDimSetEntry.Next() = 0;
                        end;

                        trigger OnPreDataItem()
                        begin
                            if not ShowDim then
                                CurrReport.Break();
                        end;
                    }
                    dataitem(PrepmtErrorCounter; "Integer")
                    {
                        DataItemTableView = sorting(Number);
                        column(ErrorText_Number__Control121; ErrorText[Number])
                        {
                        }
                        column(ErrorText_Number__Control121Caption; ErrorText_Number__Control121CaptionLbl)
                        {
                        }

                        trigger OnPostDataItem()
                        begin
                            ErrorCounter := 0;
                        end;

                        trigger OnPreDataItem()
                        begin
                            SetRange(Number, 1, ErrorCounter);
                        end;
                    }

                    trigger OnAfterGetRecord()
                    var
                        TableID: array[10] of Integer;
                        No: array[10] of Code[20];
                    begin
                        if Number = 1 then begin
                            if not TempPrepmtInvLineBuf.Find('-') then
                                CurrReport.Break();
                        end else
                            if TempPrepmtInvLineBuf.Next() = 0 then
                                CurrReport.Break();

                        LineDimSetEntry.SetRange("Dimension Set ID", TempPrepmtInvLineBuf."Dimension Set ID");

                        "Prepayment Inv. Line Buffer" := TempPrepmtInvLineBuf;

                        if not DimMgt.CheckDimIDComb(TempPrepmtInvLineBuf."Dimension Set ID") then
                            AddError(DimMgt.GetDimCombErr());
                        TableID[1] := DimMgt.PurchLineTypeToTableID("Purchase Line".Type::"G/L Account");
                        No[1] := "Prepayment Inv. Line Buffer"."G/L Account No.";
                        TableID[2] := Database::Job;
                        No[2] := "Prepayment Inv. Line Buffer"."Job No.";
                        if not DimMgt.CheckDimValuePosting(TableID, No, TempPrepmtInvLineBuf."Dimension Set ID") then
                            AddError(DimMgt.GetDimValuePostingErr());

                        SumPrepaymInvLineBufferAmount := SumPrepaymInvLineBufferAmount + "Prepayment Inv. Line Buffer".Amount;
                    end;

                    trigger OnPostDataItem()
                    begin
                        TempPrepmtInvLineBuf.Reset();
                        TempPrepmtInvLineBuf.DeleteAll();
                    end;

                    trigger OnPreDataItem()
                    begin
                        SumPrepaymInvLineBufferAmount := 0;
                    end;
                }
                dataitem(VATCounter; "Integer")
                {
                    DataItemTableView = sorting(Number);
                    column(VATAmountLine__VAT_Amount_; TempVATAmountLine."VAT Amount")
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__VAT_Base_; TempVATAmountLine."VAT Base")
                    {
                        AutoFormatExpression = "Purchase Line"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__Line_Amount_; TempVATAmountLine."Line Amount")
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__VAT_Amount__Control128; TempVATAmountLine."VAT Amount")
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__VAT_Base__Control129; TempVATAmountLine."VAT Base")
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__Line_Amount__Control130; TempVATAmountLine."Line Amount")
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__VAT___; TempVATAmountLine."VAT %")
                    {
                        DecimalPlaces = 0 : 5;
                    }
                    column(VATAmountLine__VAT_Identifier_; TempVATAmountLine."VAT Identifier")
                    {
                    }
                    column(VATAmountLine__VAT_Amount__Control151; TempVATAmountLine."VAT Amount")
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__VAT_Base__Control152; TempVATAmountLine."VAT Base")
                    {
                        AutoFormatExpression = "Purchase Line"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__Line_Amount__Control153; TempVATAmountLine."Line Amount")
                    {
                        AutoFormatExpression = "Purchase Header"."Currency Code";
                        AutoFormatType = 1;
                    }
                    column(VATAmountLine__VAT_Amount__Control128Caption; VATAmountLine__VAT_Amount__Control128CaptionLbl)
                    {
                    }
                    column(VATAmountLine__VAT_Base__Control129Caption; VATAmountLine__VAT_Base__Control129CaptionLbl)
                    {
                    }
                    column(VATAmountLine__Line_Amount__Control130Caption; VATAmountLine__Line_Amount__Control130CaptionLbl)
                    {
                    }
                    column(VATAmountLine__VAT___Caption; VATAmountLine__VAT___CaptionLbl)
                    {
                    }
                    column(VATAmountLine__VAT_Identifier_Caption; VATAmountLine__VAT_Identifier_CaptionLbl)
                    {
                    }
                    column(VAT_Amount_SpecificationCaption; VAT_Amount_SpecificationCaptionLbl)
                    {
                    }
                    column(ContinuedCaption; ContinuedCaptionLbl)
                    {
                    }
                    column(ContinuedCaption_Control150; ContinuedCaption_Control150Lbl)
                    {
                    }
                    column(TotalCaption; TotalCaptionLbl)
                    {
                    }

                    trigger OnAfterGetRecord()
                    begin
                        TempVATAmountLine.GetLine(Number);
                    end;

                    trigger OnPreDataItem()
                    begin
                        if VATAmount = 0 then
                            CurrReport.Break();
                        SetRange(Number, 1, TempVATAmountLine.Count);
                    end;
                }
            }

            trigger OnAfterGetRecord()
            var
                VendLedgEntry: Record "Vendor Ledger Entry";
                FormatAddr: Codeunit "Format Address";
                VendorMgt: Codeunit "Vendor Mgt.";
                TableID: array[10] of Integer;
                No: array[10] of Code[20];
            begin
                FormatAddr.PurchHeaderPayTo(PayToAddr, "Purchase Header");
                FormatAddr.PurchHeaderBuyFrom(BuyFromAddr, "Purchase Header");
                FormatAddr.PurchHeaderShipTo(ShipToAddr, "Purchase Header");
                if "Currency Code" = '' then begin
                    GLSetup.TestField("LCY Code");
                    TotalText := StrSubstNo(Text002, GLSetup."LCY Code");
                    TotalInclVATText := StrSubstNo(Text003, GLSetup."LCY Code");
                    TotalExclVATText := StrSubstNo(Text004, GLSetup."LCY Code");
                end else begin
                    TotalText := StrSubstNo(Text002, "Currency Code");
                    TotalInclVATText := StrSubstNo(Text003, "Currency Code");
                    TotalExclVATText := StrSubstNo(Text004, "Currency Code");
                end;

                if "Document Type" <> "Document Type"::Order then
                    AddError(StrSubstNo(Text000, FieldCaption("Document Type")));

                if not PurchPostPrepmt.CheckOpenPrepaymentLines("Purchase Header", DocumentType) then
                    AddError(DocumentErrorsMgt.GetNothingToPostErrorMsg());

                if (DocumentType = DocumentType::Invoice) and ("Prepayment Due Date" = 0D) then
                    AddError(StrSubstNo(Text006, FieldCaption("Prepayment Due Date")));

                CheckVend("Buy-from Vendor No.", FieldCaption("Buy-from Vendor No."));
                CheckVend("Pay-to Vendor No.", FieldCaption("Pay-to Vendor No."));

                CheckPostingDate("Purchase Header");

                PurchSetup.Get();

                case DocumentType of
                    DocumentType::Invoice:
                        begin
                            if PurchSetup."Ext. Doc. No. Mandatory" and ("Vendor Invoice No." = '') then
                                AddError(StrSubstNo(Text006, FieldCaption("Vendor Invoice No.")));
                            if ("Prepayment No." = '') and ("Prepayment No. Series" = '') then
                                AddError(StrSubstNo(Text012, FieldCaption("Prepayment No. Series")));
                            if "Vendor Invoice No." <> '' then
                                VendorMgt.SetFilterForExternalDocNo(
                                  VendLedgEntry, VendLedgEntry."Document Type"::Invoice, "Vendor Invoice No.", "Pay-to Vendor No.", "Document Date");
                        end;
                    DocumentType::"Credit Memo":
                        begin
                            if PurchSetup."Ext. Doc. No. Mandatory" and ("Vendor Cr. Memo No." = '') then
                                AddError(StrSubstNo(Text006, FieldCaption("Vendor Cr. Memo No.")));
                            if ("Prepmt. Cr. Memo No." = '') and ("Prepmt. Cr. Memo No. Series" = '') then
                                AddError(StrSubstNo(Text012, FieldCaption("Prepmt. Cr. Memo No.")));
                            if "Vendor Cr. Memo No." <> '' then
                                VendorMgt.SetFilterForExternalDocNo(
                                  VendLedgEntry, VendLedgEntry."Document Type"::"Credit Memo", "Vendor Cr. Memo No.", "Pay-to Vendor No.", "Document Date");
                        end;
                end;

                if VendLedgEntry.HasFilter then begin
                    VendLedgEntry.SetCurrentKey("Vendor No.");
                    VendLedgEntry.SetRange("Vendor No.", "Pay-to Vendor No.");
                    if VendLedgEntry.FindFirst() then
                        AddError(StrSubstNo(Text011, VendLedgEntry."Document Type", VendLedgEntry."External Document No."));
                end;

                DimSetEntry.SetRange("Dimension Set ID", "Dimension Set ID");
                if not DimMgt.CheckDimIDComb("Dimension Set ID") then
                    AddError(DimMgt.GetDimCombErr());

                TableID[1] := Database::Vendor;
                No[1] := "Pay-to Vendor No.";
                TableID[2] := Database::Job;
                // No[2] := "Job No.";
                TableID[3] := Database::"Salesperson/Purchaser";
                No[3] := "Purchaser Code";
                TableID[4] := Database::Campaign;
                No[4] := "Campaign No.";
                TableID[5] := Database::"Responsibility Center";
                No[5] := "Responsibility Center";
                CheckDimValuePosting(TableID, No, "Purchase Header");
            end;
        }
    }

    requestpage
    {

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';
                    field(PrepaymentDocumentType; DocumentType)
                    {
                        ApplicationArea = Prepayments;
                        Caption = 'Prepayment Document Type';
                        OptionCaption = 'Invoice,Credit Memo';
                        ToolTip = 'Specifies the type of prepayment document: invoice or credit memo.';
                    }
                    field(ShowDimensions; ShowDim)
                    {
                        ApplicationArea = Dimensions;
                        Caption = 'Show Dimensions';
                        ToolTip = 'Specifies if you want dimensions information for the journal lines to be included in the report.';
                    }
                }
            }
        }

        actions
        {
        }
    }

    rendering
    {
        layout(RDLCLayout)
        {
            Type = RDLC;
            LayoutFile = './Purchases/Reports/PurchasePrepmtDocTest.rdlc';
            Summary = 'Report layout made in the legacy RDLC format. Use an RDLC editor to modify the layout.';
        }
    }

    labels
    {
    }

    trigger OnPreReport()
    begin
        PurchHeaderFilter := "Purchase Header".GetFilters();

        if DocumentType = DocumentType::Invoice then
            PrepmtDocText := Text014
        else
            PrepmtDocText := Text015;

        GLSetup.Get();
    end;

    var
        GLSetup: Record "General Ledger Setup";
        PurchSetup: Record "Purchases & Payables Setup";
        GenPostingSetup: Record "General Posting Setup";
        TempPurchLine: Record "Purchase Line" temporary;
        TempVATAmountLine: Record "VAT Amount Line" temporary;
        TempVATAmountLineDeduct: Record "VAT Amount Line" temporary;
        TempPrepmtInvLineBuf: Record "Prepayment Inv. Line Buffer" temporary;
        TempPrepmtInvLineBuf2: Record "Prepayment Inv. Line Buffer" temporary;
        DimSetEntry: Record "Dimension Set Entry";
        LineDimSetEntry: Record "Dimension Set Entry";
        GenJnlCheckLine: Codeunit "Gen. Jnl.-Check Line";
        PurchPostPrepmt: Codeunit "Purchase-Post Prepayments";
        DocumentErrorsMgt: Codeunit "Document Errors Mgt.";
        DimMgt: Codeunit DimensionManagement;
        DocumentType: Option Invoice,"Credit Memo",Statistic;
        VATAmount: Decimal;
        VATBaseAmount: Decimal;
        ErrorCounter: Integer;
        ErrorText: array[99] of Text[250];
        PurchHeaderFilter: Text;
        DimText: Text[120];
        PayToAddr: array[8] of Text[100];
        BuyFromAddr: array[8] of Text[100];
        ShipToAddr: array[8] of Text[100];
        PrepmtDocText: Text[50];
        TotalText: Text[50];
        TotalInclVATText: Text[50];
        TotalExclVATText: Text[50];
#pragma warning disable AA0074
#pragma warning disable AA0470
        Text000: Label '%1 must be Order.';
        Text001: Label 'Purchase Document: %1';
        Text002: Label 'Total %1';
        Text003: Label 'Total %1 Incl. VAT';
        Text004: Label 'Total %1 Excl. VAT';
        Text006: Label '%1 must be specified.';
        Text007: Label '%1 %2 does not exist.';
        Text008: Label '%1 must not be %2 for %3 %4.';
        Text009: Label '%1 must not be a closing date.';
        Text010: Label '%1 is not within your allowed range of posting dates.';
        Text011: Label 'Purchase %1 %2 already exists for this vendor.';
        Text012: Label '%1 must be entered.';
#pragma warning restore AA0470
        Text014: Label 'Prepayment Invoice';
        Text015: Label 'Prepayment Credit Memo';
#pragma warning restore AA0074
        ShowDim: Boolean;
        Continue: Boolean;
#pragma warning disable AA0074
#pragma warning disable AA0470
        Text016: Label '%1 %2 %3 does not exist.';
#pragma warning restore AA0470
#pragma warning restore AA0074
        SumPrepaymInvLineBufferAmount: Decimal;
        CurrReport_PAGENOCaptionLbl: Label 'Page';
        Purchase_Prepyament_Document___TestCaptionLbl: Label 'Purchase Prepayment Document - Test';
        Ship_toCaptionLbl: Label 'Ship-to';
        Buy_fromCaptionLbl: Label 'Buy-from';
        Pay_toCaptionLbl: Label 'Pay-to';
        Purchase_Header___Prepayment_Due_Date_CaptionLbl: Label 'Prepayment Due Date';
        Purchase_Header___Posting_Date_CaptionLbl: Label 'Posting Date';
        Purchase_Header___Document_Date_CaptionLbl: Label 'Document Date';
        Purchase_Header___Expected_Receipt_Date_CaptionLbl: Label 'Expected Receipt Date';
        Purchase_Header___Order_Date_CaptionLbl: Label 'Order Date';
        Purchase_Header___Prepmt__Pmt__Discount_Date_CaptionLbl: Label 'Prepmt. Pmt. Discount Date';
        Purchase_Header___Posting_Date__Control81CaptionLbl: Label 'Posting Date';
        Purchase_Header___Document_Date__Control83CaptionLbl: Label 'Document Date';
        Header_DimensionsCaptionLbl: Label 'Header Dimensions';
        ErrorText_Number_CaptionLbl: Label 'Warning!';
        ErrorText_Number__Control104CaptionLbl: Label 'Warning!';
        Header_DimensionsCaption_Control119Lbl: Label 'Header Dimensions';
        ErrorText_Number__Control121CaptionLbl: Label 'Warning!';
        VATAmountLine__VAT_Amount__Control128CaptionLbl: Label 'VAT Amount';
        VATAmountLine__VAT_Base__Control129CaptionLbl: Label 'VAT Base';
        VATAmountLine__Line_Amount__Control130CaptionLbl: Label 'Line Amount';
        VATAmountLine__VAT___CaptionLbl: Label 'VAT %';
        VATAmountLine__VAT_Identifier_CaptionLbl: Label 'VAT Identifier';
        VAT_Amount_SpecificationCaptionLbl: Label 'VAT Amount Specification';
        ContinuedCaptionLbl: Label 'Continued';
        ContinuedCaption_Control150Lbl: Label 'Continued';
        TotalCaptionLbl: Label 'Total';

    local procedure AddError(Text: Text)
    begin
        ErrorCounter := ErrorCounter + 1;
        ErrorText[ErrorCounter] := CopyStr(Text, 1, MaxStrLen(ErrorText[ErrorCounter]));
    end;

    local procedure CheckVend(VendNo: Code[20]; FieldCaption: Text[30])
    var
        Vend: Record Vendor;
    begin
        if VendNo = '' then begin
            AddError(StrSubstNo(Text006, FieldCaption));
            exit;
        end;
        if not Vend.Get(VendNo) then begin
            AddError(StrSubstNo(Text007, Vend.TableCaption(), VendNo));
            exit;
        end;
        if Vend."Privacy Blocked" then
            AddError(Vend.GetPrivacyBlockedGenericErrorText(Vend));

        if Vend.Blocked in [Vend.Blocked::All, Vend.Blocked::Payment] then
            AddError(
              StrSubstNo(Text008, Vend.FieldCaption(Blocked), Vend.Blocked, Vend.TableCaption(), VendNo));
    end;

    local procedure CheckPostingDate(PurchaseHeader: Record "Purchase Header")
    var
        IsHandled: Boolean;
        PostingDateError: Text[250];
    begin
        IsHandled := false;
        OnBeforeCheckPostingDate(PurchaseHeader, PostingDateError, IsHandled);
        if IsHandled then begin
            AddError(PostingDateError);
            exit;
        end;

        case true of
            PurchaseHeader."Posting Date" = 0D:
                AddError(StrSubstNo(Text006, PurchaseHeader.FieldCaption("Posting Date")));
            PurchaseHeader."Posting Date" <> NormalDate(PurchaseHeader."Posting Date"):
                AddError(StrSubstNo(Text009, PurchaseHeader.FieldCaption("Posting Date")));
            GenJnlCheckLine.DateNotAllowed(PurchaseHeader."Posting Date", PurchaseHeader."Journal Templ. Name"):
                AddError(StrSubstNo(Text010, PurchaseHeader.FieldCaption("Posting Date")));
        end;
    end;

    local procedure CheckDimValuePosting(var TableID: array[10] of Integer; var No: array[10] of Code[20]; PurchaseHeader: Record "Purchase Header")
    begin
        OnBeforeCheckDimValuePosting(TableID, No, PurchaseHeader);
        if not DimMgt.CheckDimValuePosting(TableID, No, PurchaseHeader."Dimension Set ID") then
            AddError(DimMgt.GetDimValuePostingErr());
    end;

    local procedure MergeText(DimSetEntry: Record "Dimension Set Entry"): Boolean
    begin
        if (StrLen(DimText) + StrLen(StrSubstNo('%1 - %2', DimSetEntry."Dimension Code", DimSetEntry."Dimension Value Code")) + 2) >
           MaxStrLen(DimText)
        then
            exit(true);

        if DimText = '' then
            DimText := StrSubstNo('%1 - %2', DimSetEntry."Dimension Code", DimSetEntry."Dimension Value Code")
        else
            DimText :=
              StrSubstNo('%1; %2', DimText, StrSubstNo('%1 - %2', DimSetEntry."Dimension Code", DimSetEntry."Dimension Value Code"));
        exit(false);
    end;

    procedure InitializeRequest(NewDocumentType: Option; NewShowDim: Boolean)
    begin
        DocumentType := NewDocumentType;
        ShowDim := NewShowDim;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCheckDimValuePosting(var TableID: array[10] of Integer; var No: array[10] of Code[20]; PurchaseHeader: Record "Purchase Header")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeCheckPostingDate(var PurchaseHeader: Record "Purchase Header"; var PostingDateError: Text[250]; var IsHandled: Boolean)
    begin
    end;
}