Report 1198 Date Compress Resource Ledger

App
Base Application
Namespace
Microsoft.Projects.Resources.Ledger
Versions
17-28

Procedures, 4

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Projects/Resources/Journal/DateCompressResourceLedger.Report.al589 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.Projects.Resources.Ledger;

using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Foundation.AuditCodes;
using Microsoft.Foundation.Period;
using System.DataAdministration;
using System.Utilities;

report 1198 "Date Compress Resource Ledger"
{
    Caption = 'Date Compress Resource Ledger';
    ToolTip = 'Save database space by combining related entries in one new entry. You can compress entries from closed fiscal years only.';
    Permissions = TableData "Res. Ledger Entry" = rimd,
                  TableData "Resource Register" = rimd,
                  TableData "Date Compr. Register" = rimd,
                  TableData "Dimension Set ID Filter Line" = rimd;
    ProcessingOnly = true;

    dataset
    {
        dataitem("Res. Ledger Entry"; "Res. Ledger Entry")
        {
            DataItemTableView = sorting("Resource No.", "Posting Date");
            RequestFilterFields = "Entry Type", "Resource No.", "Resource Group No.";

            trigger OnAfterGetRecord()
            begin
                ResLedgEntry2 := "Res. Ledger Entry";
                ResLedgEntry2.SetCurrentKey("Resource No.", "Posting Date");
                ResLedgEntry2.CopyFilters("Res. Ledger Entry");
                ResLedgEntry2.SetRange("Entry Type", ResLedgEntry2."Entry Type");
                ResLedgEntry2.SetRange("Resource No.", ResLedgEntry2."Resource No.");
                ResLedgEntry2.SetRange("Resource Group No.", ResLedgEntry2."Resource Group No.");
                ResLedgEntry2.SetFilter("Posting Date", DateComprMgt.GetDateFilter(ResLedgEntry2."Posting Date", EntrdDateComprReg, true));

                if RetainNo(ResLedgEntry2.FieldNo("Document No.")) then
                    ResLedgEntry2.SetRange("Document No.", ResLedgEntry2."Document No.");
                if RetainNo(ResLedgEntry2.FieldNo("Work Type Code")) then
                    ResLedgEntry2.SetRange("Work Type Code", ResLedgEntry2."Work Type Code");
                if RetainNo(ResLedgEntry2.FieldNo("Job No.")) then
                    ResLedgEntry2.SetRange("Job No.", ResLedgEntry2."Job No.");
                if RetainNo(ResLedgEntry2.FieldNo("Unit of Measure Code")) then
                    ResLedgEntry2.SetRange("Unit of Measure Code", ResLedgEntry2."Unit of Measure Code");
                if RetainNo(ResLedgEntry2.FieldNo("Global Dimension 1 Code")) then
                    ResLedgEntry2.SetRange("Global Dimension 1 Code", ResLedgEntry2."Global Dimension 1 Code");
                if RetainNo(ResLedgEntry2.FieldNo("Global Dimension 2 Code")) then
                    ResLedgEntry2.SetRange("Global Dimension 2 Code", ResLedgEntry2."Global Dimension 2 Code");
                if RetainNo(ResLedgEntry2.FieldNo(Chargeable)) then
                    ResLedgEntry2.SetRange(Chargeable, ResLedgEntry2.Chargeable);
                if RetainNo(ResLedgEntry2.FieldNo("Source Type")) then
                    ResLedgEntry2.SetRange("Source Type", ResLedgEntry2."Source Type");
                if RetainNo(ResLedgEntry2.FieldNo("Source No.")) then
                    ResLedgEntry2.SetRange("Source No.", ResLedgEntry2."Source No.");

                if ResLedgEntry2.Quantity >= 0 then
                    ResLedgEntry2.SetFilter(Quantity, '>=0')
                else
                    ResLedgEntry2.SetFilter(Quantity, '<0');

                InitNewEntry(NewResLedgEntry);

                DimBufMgt.CollectDimEntryNo(
                  TempSelectedDim, ResLedgEntry2."Dimension Set ID", ResLedgEntry2."Entry No.",
                  0, false, DimEntryNo);
                ComprDimEntryNo := DimEntryNo;
                SummarizeEntry(NewResLedgEntry, ResLedgEntry2);
                while ResLedgEntry2.Next() <> 0 do begin
                    DimBufMgt.CollectDimEntryNo(
                      TempSelectedDim, ResLedgEntry2."Dimension Set ID", ResLedgEntry2."Entry No.",
                      ComprDimEntryNo, true, DimEntryNo);
                    if DimEntryNo = ComprDimEntryNo then
                        SummarizeEntry(NewResLedgEntry, ResLedgEntry2);
                end;

                InsertNewEntry(NewResLedgEntry, ComprDimEntryNo);

                ComprCollectedEntries();

                if DateComprReg."No. Records Deleted" >= NoOfDeleted + 10 then begin
                    NoOfDeleted := DateComprReg."No. Records Deleted";
                    InsertRegisters(ResReg, DateComprReg);
                end;
            end;

            trigger OnPostDataItem()
            begin
                if DateComprReg."No. Records Deleted" > NoOfDeleted then
                    InsertRegisters(ResReg, DateComprReg);
                if UseDataArchive then
                    DataArchive.Save();
            end;

            trigger OnPreDataItem()
            var
                GLSetup: Record "General Ledger Setup";
            begin
                if EntrdDateComprReg."Ending Date" = 0D then
                    Error(Text003, EntrdDateComprReg.FieldCaption("Ending Date"));

                Window.Open(Text004);

                SourceCodeSetup.Get();
                SourceCodeSetup.TestField("Compress Res. Ledger");

                SelectedDim.GetSelectedDim(
                  UserId, 3, REPORT::"Date Compress Resource Ledger", '', TempSelectedDim);
                GLSetup.Get();
                Retain[5] :=
                  TempSelectedDim.Get(
                    UserId, 3, REPORT::"Date Compress Resource Ledger", '', GLSetup."Global Dimension 1 Code");
                Retain[6] :=
                  TempSelectedDim.Get(
                    UserId, 3, REPORT::"Date Compress Resource Ledger", '', GLSetup."Global Dimension 2 Code");

                NewResLedgEntry.LockTable();
                ResReg.LockTable();
                DateComprReg.LockTable();

                LastEntryNo := ResLedgEntry2.GetLastEntryNo();
                SetRange("Entry No.", 0, LastEntryNo);
                SetRange("Posting Date", EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date");

                InitRegisters();

                if UseDataArchive then
                    DataArchive.Create(DateComprMgt.GetReportName(Report::"Date Compress Resource Ledger"));
            end;
        }
    }

    requestpage
    {
        SaveValues = true;

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';
                    field(StartingDate; EntrdDateComprReg."Starting Date")
                    {
                        ApplicationArea = Jobs;
                        Caption = 'Starting Date';
                        ToolTip = 'Specifies the date from which the report or batch job processes information.';
                    }
                    field(EndingDate; EntrdDateComprReg."Ending Date")
                    {
                        ApplicationArea = Jobs;
                        Caption = 'Ending Date';
                        ToolTip = 'Specifies the date to which the report or batch job processes information.';

                        trigger OnValidate()
                        var
                            DateCompression: Codeunit "Date Compression";
                        begin
                            DateCompression.VerifyDateCompressionDates(EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date");
                        end;
                    }
#pragma warning disable AA0100
                    field("EntrdDateComprReg.""Period Length"""; EntrdDateComprReg."Period Length")
#pragma warning restore AA0100
                    {
                        ApplicationArea = Jobs;
                        Caption = 'Period Length';
                        OptionCaption = 'Day,Week,Month,Quarter,Year,Period';
                        ToolTip = 'Specifies the period for which data is shown in the report. For example, enter "1M" for one month, "30D" for thirty days, "3Q" for three quarters, or "5Y" for five years.';
                    }
                    field("EntrdResLedgEntry.Description"; EntrdResLedgEntry.Description)
                    {
                        ApplicationArea = Jobs;
                        Caption = 'Posting Description';
                        ToolTip = 'Specifies a text that accompanies the entries that result from the compression. The default description is Date Compressed.';
                    }
                    group("Retain Field Contents")
                    {
                        Caption = 'Retain Field Contents';
                        field("Retain[1]"; Retain[1])
                        {
                            ApplicationArea = Jobs;
                            Caption = 'Document No.';
                            ToolTip = 'Specifies the number of a document that the date compression will apply to.';
                        }
                        field("Retain[2]"; Retain[2])
                        {
                            ApplicationArea = Jobs;
                            Caption = 'Work Type Code';
                            ToolTip = 'Specifies that you want to retain the contents of the Work Type Code field.';
                        }
                        field("Retain[3]"; Retain[3])
                        {
                            ApplicationArea = Jobs;
                            Caption = 'Project No.';
                            ToolTip = 'Specifies the project number.';
                        }
                        field("Retain[4]"; Retain[4])
                        {
                            ApplicationArea = Jobs;
                            Caption = 'Unit of Measure Code';
                            ToolTip = 'Specifies that you want to retain the contents of the Unit of Measure Code field.';
                        }
                        field("Retain[8]"; Retain[8])
                        {
                            ApplicationArea = Jobs;
                            Caption = 'Source Type';
                            ToolTip = 'Specifies that you want to retain the contents of the Source Type field.';
                        }
                        field("Retain[9]"; Retain[9])
                        {
                            ApplicationArea = Jobs;
                            Caption = 'Source No.';
                            ToolTip = 'Specifies that you want to retain the contents of the Source No. field.';
                        }
                        field("Retain[7]"; Retain[7])
                        {
                            ApplicationArea = Jobs;
                            Caption = 'Chargeable';
                            ToolTip = 'Specifies that you want to retain the contents of the Chargeable field when compressing resource ledgers.';
                        }
                    }
                    field(RetainDimensions; RetainDimText)
                    {
                        ApplicationArea = Dimensions;
                        Caption = 'Retain Dimensions';
                        Editable = false;
                        ToolTip = 'Specifies which dimension information you want to retain when the entries are compressed. The more dimension information that you choose to retain, the more detailed the compressed entries are.';

                        trigger OnAssistEdit()
                        begin
                            DimSelectionBuf.SetDimSelectionMultiple(3, REPORT::"Date Compress Resource Ledger", RetainDimText);
                        end;
                    }
                    field(UseDataArchiveCtrl; UseDataArchive)
                    {
                        ApplicationArea = Suite;
                        Caption = 'Archive Deleted Entries';
                        ToolTip = 'Specifies whether the deleted (compressed) entries will be stored in the data archive for later inspection or export.';
                        Visible = DataArchiveProviderExists;
                    }
                }
            }
        }

        actions
        {
        }

        trigger OnQueryClosePage(CloseAction: Action): Boolean
        var
            ConfirmManagement: Codeunit "Confirm Management";
        begin
            if CloseAction = Action::Cancel then
                exit;
            if not ConfirmManagement.GetResponseOrDefault(CompressEntriesQst, true) then
                CurrReport.Break();
        end;

        trigger OnOpenPage()
        var
            DateCompression: Codeunit "Date Compression";
        begin
            if EntrdDateComprReg."Ending Date" = 0D then
                EntrdDateComprReg."Ending Date" := DateCompression.CalcMaxEndDate();
            if EntrdResLedgEntry.Description = '' then
                EntrdResLedgEntry.Description := Text009;

            InitializeParameter();
            RetainDimText := DimSelectionBuf.GetDimSelectionText(3, REPORT::"Date Compress Resource Ledger", '');
        end;

        trigger OnInit()
        begin
            DataArchiveProviderExists := DataArchive.DataArchiveProviderExists();
        end;
    }

    labels
    {
    }

    trigger OnPreReport()
    var
        DateCompression: Codeunit "Date Compression";
    begin
        DimSelectionBuf.CompareDimText(
          3, REPORT::"Date Compress Resource Ledger", '', RetainDimText, Text010);
        ResLedgEntryFilter := CopyStr("Res. Ledger Entry".GetFilters, 1, MaxStrLen(DateComprReg.Filter));

        DateCompression.VerifyDateCompressionDates(EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date");
        LogStartTelemetryMessage();
    end;

    trigger OnPostReport()
    begin
        LogEndTelemetryMessage();
    end;

    var
        SourceCodeSetup: Record "Source Code Setup";
        DateComprReg: Record "Date Compr. Register";
        EntrdDateComprReg: Record "Date Compr. Register";
        ResReg: Record "Resource Register";
        EntrdResLedgEntry: Record "Res. Ledger Entry";
        NewResLedgEntry: Record "Res. Ledger Entry";
        ResLedgEntry2: Record "Res. Ledger Entry";
        SelectedDim: Record "Selected Dimension";
        TempSelectedDim: Record "Selected Dimension" temporary;
        DimSelectionBuf: Record "Dimension Selection Buffer";
        DateComprMgt: Codeunit DateComprMgt;
        DimBufMgt: Codeunit "Dimension Buffer Management";
        DimMgt: Codeunit DimensionManagement;
        DataArchive: Codeunit "Data Archive";
        Window: Dialog;
        ResLedgEntryFilter: Text[250];
        NoOfFields: Integer;
        Retain: array[10] of Boolean;
        FieldNumber: array[10] of Integer;
        FieldNameArray: array[10] of Text[100];
        LastEntryNo: Integer;
        NoOfDeleted: Integer;
        ResRegExists: Boolean;
        i: Integer;
        ComprDimEntryNo: Integer;
        DimEntryNo: Integer;
        RetainDimText: Text[250];
        UseDataArchive: Boolean;
        DataArchiveProviderExists: Boolean;

        CompressEntriesQst: Label 'This batch job deletes entries. We recommend that you create a backup of the database before you run the batch job.\\Do you want to continue?';
#pragma warning disable AA0074
#pragma warning disable AA0470
        Text003: Label '%1 must be specified.';
        Text004: Label 'Date compressing resource ledger entries...\\Resource No.         #1##########\Date                 #2######\\No. of new entries   #3######\No. of entries del.  #4######';
#pragma warning restore AA0470
        Text009: Label 'Date Compressed';
        Text010: Label 'Retain Dimensions';
#pragma warning restore AA0074
        StartDateCompressionTelemetryMsg: Label 'Running date compression report %1 %2.', Locked = true;
        EndDateCompressionTelemetryMsg: Label 'Completed date compression report %1 %2.', Locked = true;

    local procedure InitializeParameter()
    begin
        InsertField("Res. Ledger Entry".FieldNo("Document No."), "Res. Ledger Entry".FieldCaption("Document No."));
        InsertField("Res. Ledger Entry".FieldNo("Work Type Code"), "Res. Ledger Entry".FieldCaption("Work Type Code"));
        InsertField("Res. Ledger Entry".FieldNo("Job No."), "Res. Ledger Entry".FieldCaption("Job No."));
        InsertField("Res. Ledger Entry".FieldNo("Unit of Measure Code"), "Res. Ledger Entry".FieldCaption("Unit of Measure Code"));
        InsertField("Res. Ledger Entry".FieldNo("Global Dimension 1 Code"), "Res. Ledger Entry".FieldCaption("Global Dimension 1 Code"));
        InsertField("Res. Ledger Entry".FieldNo("Global Dimension 2 Code"), "Res. Ledger Entry".FieldCaption("Global Dimension 2 Code"));
        InsertField("Res. Ledger Entry".FieldNo(Chargeable), "Res. Ledger Entry".FieldCaption(Chargeable));
        InsertField("Res. Ledger Entry".FieldNo("Source Type"), "Res. Ledger Entry".FieldCaption("Source No."));
        InsertField("Res. Ledger Entry".FieldNo("Source No."), "Res. Ledger Entry".FieldCaption("Source No."));
        DataArchiveProviderExists := DataArchive.DataArchiveProviderExists();
        UseDataArchive := DataArchiveProviderExists;
    end;

    local procedure InitRegisters()
    var
        NextRegNo: Integer;
    begin
        ResReg.Init();
        ResReg."No." := ResReg.GetLastEntryNo() + 1;
        ResReg."Creation Date" := Today;
        ResReg."Creation Time" := Time;
        ResReg."Source Code" := SourceCodeSetup."Compress Res. Ledger";
        ResReg."User ID" := CopyStr(UserId(), 1, MaxStrLen(ResReg."User ID"));
        ResReg."From Entry No." := LastEntryNo + 1;

        NextRegNo := DateComprReg.GetLastEntryNo() + 1;

        DateComprReg.InitRegister(
          DATABASE::"Res. Ledger Entry", NextRegNo,
          EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date", EntrdDateComprReg."Period Length",
          ResLedgEntryFilter, ResReg."No.", SourceCodeSetup."Compress Res. Ledger");

        for i := 1 to NoOfFields do
            if Retain[i] then
                DateComprReg."Retain Field Contents" :=
                  CopyStr(
                    DateComprReg."Retain Field Contents" + ',' + FieldNameArray[i], 1,
                    MaxStrLen(DateComprReg."Retain Field Contents"));
        DateComprReg."Retain Field Contents" := CopyStr(DateComprReg."Retain Field Contents", 2);

        ResRegExists := false;
        NoOfDeleted := 0;
    end;

    local procedure InsertRegisters(var ResReg: Record "Resource Register"; var DateComprReg: Record "Date Compr. Register")
    var
        CurrLastEntryNo: Integer;
    begin
        ResReg."To Entry No." := NewResLedgEntry."Entry No.";

        if ResRegExists then begin
            ResReg.Modify();
            DateComprReg.Modify();
        end else begin
            ResReg.Insert();
            DateComprReg.Insert();
            ResRegExists := true;
        end;
        Commit();

        NewResLedgEntry.LockTable();
        ResReg.LockTable();
        DateComprReg.LockTable();

        ResLedgEntry2.Reset();
        CurrLastEntryNo := ResLedgEntry2.GetLastEntryNo();
        if LastEntryNo <> CurrLastEntryNo then begin
            LastEntryNo := CurrLastEntryNo;
            InitRegisters();
        end;
    end;

    local procedure InsertField(Number: Integer; Name: Text[100])
    begin
        NoOfFields := NoOfFields + 1;
        FieldNumber[NoOfFields] := Number;
        FieldNameArray[NoOfFields] := Name;
    end;

    local procedure RetainNo(Number: Integer): Boolean
    begin
        exit(Retain[Index(Number)]);
    end;

    local procedure Index(Number: Integer): Integer
    begin
        for i := 1 to NoOfFields do
            if Number = FieldNumber[i] then
                exit(i);
    end;

    local procedure SummarizeEntry(var NewResLedgEntry: Record "Res. Ledger Entry"; ResLedgEntry: Record "Res. Ledger Entry")
    begin
        NewResLedgEntry.Quantity := NewResLedgEntry.Quantity + ResLedgEntry.Quantity;
        NewResLedgEntry."Quantity (Base)" := NewResLedgEntry."Quantity (Base)" + ResLedgEntry."Quantity (Base)";
        NewResLedgEntry."Total Cost" := NewResLedgEntry."Total Cost" + ResLedgEntry."Total Cost";
        NewResLedgEntry."Total Price" := NewResLedgEntry."Total Price" + ResLedgEntry."Total Price";
        ResLedgEntry.Delete();
        DateComprReg."No. Records Deleted" := DateComprReg."No. Records Deleted" + 1;
        Window.Update(4, DateComprReg."No. Records Deleted");
        if UseDataArchive then
            DataArchive.SaveRecord(ResLedgEntry);
    end;

    procedure ComprCollectedEntries()
    var
        ResLedgEntry: Record "Res. Ledger Entry";
        OldDimEntryNo: Integer;
        Found: Boolean;
        ResLedgEntryNo: Integer;
    begin
        OldDimEntryNo := 0;
        if DimBufMgt.FindFirstDimEntryNo(DimEntryNo, ResLedgEntryNo) then begin
            InitNewEntry(NewResLedgEntry);
            repeat
                ResLedgEntry.Get(ResLedgEntryNo);
                SummarizeEntry(NewResLedgEntry, ResLedgEntry);
                OldDimEntryNo := DimEntryNo;
                Found := DimBufMgt.NextDimEntryNo(DimEntryNo, ResLedgEntryNo);
                if (OldDimEntryNo <> DimEntryNo) or not Found then begin
                    InsertNewEntry(NewResLedgEntry, OldDimEntryNo);
                    if Found then
                        InitNewEntry(NewResLedgEntry);
                end;
                OldDimEntryNo := DimEntryNo;
            until not Found;
        end;
        DimBufMgt.DeleteAllDimEntryNo();
    end;

    procedure InitNewEntry(var NewResLedgEntry: Record "Res. Ledger Entry")
    begin
        LastEntryNo := LastEntryNo + 1;

        NewResLedgEntry.Init();
        NewResLedgEntry."Entry No." := LastEntryNo;
        NewResLedgEntry."Entry Type" := ResLedgEntry2."Entry Type";
        NewResLedgEntry."Resource No." := ResLedgEntry2."Resource No.";
        NewResLedgEntry."Resource Group No." := ResLedgEntry2."Resource Group No.";
        NewResLedgEntry."Posting Date" := ResLedgEntry2.GetRangeMin("Posting Date");
        NewResLedgEntry.Description := EntrdResLedgEntry.Description;
        NewResLedgEntry."Source Code" := SourceCodeSetup."Compress Res. Ledger";
        NewResLedgEntry."User ID" := CopyStr(UserId(), 1, MaxStrLen(ResLedgEntry2."User ID"));

        if RetainNo(ResLedgEntry2.FieldNo("Document No.")) then
            NewResLedgEntry."Document No." := ResLedgEntry2."Document No.";
        if RetainNo(ResLedgEntry2.FieldNo("Work Type Code")) then
            NewResLedgEntry."Work Type Code" := ResLedgEntry2."Work Type Code";
        if RetainNo(ResLedgEntry2.FieldNo("Job No.")) then
            NewResLedgEntry."Job No." := ResLedgEntry2."Job No.";
        if RetainNo(ResLedgEntry2.FieldNo("Unit of Measure Code")) then
            NewResLedgEntry."Unit of Measure Code" := ResLedgEntry2."Unit of Measure Code";
        if RetainNo(ResLedgEntry2.FieldNo("Global Dimension 1 Code")) then
            NewResLedgEntry."Global Dimension 1 Code" := ResLedgEntry2."Global Dimension 1 Code";
        if RetainNo(ResLedgEntry2.FieldNo("Global Dimension 2 Code")) then
            NewResLedgEntry."Global Dimension 2 Code" := ResLedgEntry2."Global Dimension 2 Code";
        if RetainNo(ResLedgEntry2.FieldNo(Chargeable)) then
            NewResLedgEntry.Chargeable := ResLedgEntry2.Chargeable;

        Window.Update(1, NewResLedgEntry."Resource No.");
        Window.Update(2, NewResLedgEntry."Posting Date");
        DateComprReg."No. of New Records" := DateComprReg."No. of New Records" + 1;
        Window.Update(3, DateComprReg."No. of New Records");
    end;

    local procedure InsertNewEntry(var NewResLedgEntry: Record "Res. Ledger Entry"; DimEntryNo: Integer)
    var
        TempDimBuf: Record "Dimension Buffer" temporary;
        TempDimSetEntry: Record "Dimension Set Entry" temporary;
    begin
        TempDimBuf.DeleteAll();
        DimBufMgt.GetDimensions(DimEntryNo, TempDimBuf);
        DimMgt.CopyDimBufToDimSetEntry(TempDimBuf, TempDimSetEntry);
        NewResLedgEntry."Dimension Set ID" := DimMgt.GetDimensionSetID(TempDimSetEntry);
        NewResLedgEntry.Insert();
    end;

    procedure InitializeRequest(StartingDate: Date; EndingDate: Date; PeriodLength: Option; Description: Text[100]; RetainDocumentNo: Boolean; RetainWorkTypeCode: Boolean; RetainJobNo: Boolean; RetainUnitOfMeasurecode: Boolean; RetainSourceType: Boolean; RetainSourceNo: Boolean; RetainChargeable: Boolean; RetainDimensionText: Text[250])
    begin
        InitializeRequest(StartingDate, EndingDate, PeriodLength, Description, RetainDocumentNo, RetainWorkTypeCode, RetainJobNo, RetainUnitOfMeasurecode, RetainSourceType, RetainSourceNo, RetainChargeable, RetainDimensionText, true);
    end;

    procedure InitializeRequest(StartingDate: Date; EndingDate: Date; PeriodLength: Option; Description: Text[100]; RetainDocumentNo: Boolean; RetainWorkTypeCode: Boolean; RetainJobNo: Boolean; RetainUnitOfMeasurecode: Boolean; RetainSourceType: Boolean; RetainSourceNo: Boolean; RetainChargeable: Boolean; RetainDimensionText: Text[250]; DoUseDataArchive: Boolean)
    begin
        InitializeParameter();
        EntrdDateComprReg."Starting Date" := StartingDate;
        EntrdDateComprReg."Ending Date" := EndingDate;
        EntrdDateComprReg."Period Length" := PeriodLength;
        EntrdResLedgEntry.Description := Description;
        Retain[1] := RetainDocumentNo;
        Retain[2] := RetainWorkTypeCode;
        Retain[3] := RetainJobNo;
        Retain[4] := RetainUnitOfMeasurecode;
        Retain[8] := RetainSourceType;
        Retain[9] := RetainSourceNo;
        Retain[7] := RetainChargeable;
        RetainDimText := RetainDimensionText;
        DataArchiveProviderExists := DataArchive.DataArchiveProviderExists();
        UseDataArchive := DataArchiveProviderExists and DoUseDataArchive;
    end;

    local procedure LogStartTelemetryMessage()
    var
        TelemetryDimensions: Dictionary of [Text, Text];
    begin
        TelemetryDimensions.Add('ReportId', Format(CurrReport.ObjectId(false), 0, 9));
        TelemetryDimensions.Add('ReportName', CurrReport.ObjectId(true));
        TelemetryDimensions.Add('UseRequestPage', Format(CurrReport.UseRequestPage()));
        TelemetryDimensions.Add('StartDate', Format(EntrdDateComprReg."Starting Date", 0, 9));
        TelemetryDimensions.Add('EndDate', Format(EntrdDateComprReg."Ending Date", 0, 9));
        TelemetryDimensions.Add('PeriodLength', Format(EntrdDateComprReg."Period Length", 0, 9));
        TelemetryDimensions.Add('RetainDocumentNo', Format(Retain[1], 0, 9));
        TelemetryDimensions.Add('RetainWorkTypeCode', Format(Retain[2], 0, 9));
        TelemetryDimensions.Add('RetainJobNo', Format(Retain[3], 0, 9));
        TelemetryDimensions.Add('RetainUnitOfMeasurecode', Format(Retain[4], 0, 9));
        TelemetryDimensions.Add('RetainSourceType', Format(Retain[8], 0, 9));
        TelemetryDimensions.Add('RetainSourceNo', Format(Retain[9], 0, 9));
        TelemetryDimensions.Add('RetainChargeable', Format(Retain[7], 0, 9));
        TelemetryDimensions.Add('RetainDimensions', RetainDimText);
        TelemetryDimensions.Add('UseDataArchive', Format(UseDataArchive));

        Session.LogMessage('0000F4U', StrSubstNo(StartDateCompressionTelemetryMsg, CurrReport.ObjectId(false), CurrReport.ObjectId(true)), Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::All, TelemetryDimensions);
    end;

    local procedure LogEndTelemetryMessage()
    var
        TelemetryDimensions: Dictionary of [Text, Text];
    begin
        TelemetryDimensions.Add('ReportId', Format(CurrReport.ObjectId(false), 0, 9));
        TelemetryDimensions.Add('ReportName', CurrReport.ObjectId(true));
        TelemetryDimensions.Add('RegisterNo', Format(DateComprReg."Register No.", 0, 9));
        TelemetryDimensions.Add('TableID', Format(DateComprReg."Table ID", 0, 9));
        TelemetryDimensions.Add('NoRecordsDeleted', Format(DateComprReg."No. Records Deleted", 0, 9));
        TelemetryDimensions.Add('NoofNewRecords', Format(DateComprReg."No. of New Records", 0, 9));

        Session.LogMessage('0000F4V', StrSubstNo(EndDateCompressionTelemetryMsg, CurrReport.ObjectId(false), CurrReport.ObjectId(true)), Verbosity::Normal, DataClassification::SystemMetadata, TelemetryScope::All, TelemetryDimensions);
    end;

}