Report 1495 Delete Check Ledger Entries, source in 29
Source29
src/Layers/W1/BaseApp/Bank/Check/DeleteCheckLedgerEntries.Report.al224 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.Bank.Check;
using Microsoft.Finance.GeneralLedger.Ledger;
using Microsoft.Foundation.AuditCodes;
using Microsoft.Foundation.Period;
using System.Utilities;
/// <summary>
/// Removes non-printed check ledger entries from the database to manage storage space.
/// Maintains audit trail through date compression register while safely cleaning historical data.
/// </summary>
/// <remarks>
/// Data source: Check Ledger Entry with filtering for non-printed entries only.
/// Creates date compression register entries for audit trail compliance.
/// Excludes printed checks to preserve complete payment history.
/// </remarks>
report 1495 "Delete Check Ledger Entries"
{
Caption = 'Delete Check Ledger Entries';
Permissions = TableData "Check Ledger Entry" = rimd,
TableData "G/L Register" = rimd,
TableData "Date Compr. Register" = rimd;
ProcessingOnly = true;
dataset
{
dataitem("Check Ledger Entry"; "Check Ledger Entry")
{
DataItemTableView = sorting("Bank Account No.", "Check Date") where("Entry Status" = filter(<> Printed));
RequestFilterFields = "Bank Account No.", "Bank Payment Type";
trigger OnAfterGetRecord()
begin
CheckLedgEntry2 := "Check Ledger Entry";
CheckLedgEntry2.SetCurrentKey("Bank Account No.", "Check Date");
CheckLedgEntry2.CopyFilters("Check Ledger Entry");
Window.Update(1, CheckLedgEntry2."Bank Account No.");
repeat
CheckLedgEntry2.Delete();
DateComprReg."No. Records Deleted" := DateComprReg."No. Records Deleted" + 1;
Window.Update(4, DateComprReg."No. Records Deleted");
until CheckLedgEntry2.Next() = 0;
if DateComprReg."No. Records Deleted" >= NoOfDeleted + 10 then begin
NoOfDeleted := DateComprReg."No. Records Deleted";
InsertRegisters(DateComprReg);
end;
end;
trigger OnPostDataItem()
begin
if DateComprReg."No. Records Deleted" > NoOfDeleted then
InsertRegisters(DateComprReg);
end;
trigger OnPreDataItem()
begin
if EntrdDateComprReg."Ending Date" = 0D then
Error(MustBeSpecifiedErr, EntrdDateComprReg.FieldCaption("Ending Date"));
Window.Open(DateCompressingEntriesMsg);
SourceCodeSetup.Get();
SourceCodeSetup.TestField("Compress Check Ledger");
CheckLedgEntry2.LockTable();
if CheckLedgEntry3.FindLast() then;
DateComprReg.LockTable();
SetRange("Check Date", EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date");
DateComprMgt.GetDateFilter(EntrdDateComprReg."Ending Date", EntrdDateComprReg, true);
InitRegister();
end;
}
}
requestpage
{
SaveValues = true;
layout
{
area(content)
{
group(Options)
{
Caption = 'Options';
#pragma warning disable AA0100
field("EntrdDateComprReg.""Starting Date"""; EntrdDateComprReg."Starting Date")
#pragma warning restore AA0100
{
ApplicationArea = Basic, Suite;
Caption = 'Starting Date';
ToolTip = 'Specifies the first date of the period from which the check ledger entries are suggested. The batch job includes all entries from this date to the ending date.';
}
#pragma warning disable AA0100
field("EntrdDateComprReg.""Ending Date"""; EntrdDateComprReg."Ending Date")
#pragma warning restore AA0100
{
ApplicationArea = Basic, Suite;
Caption = 'Ending Date';
ToolTip = 'Specifies the last date of the period from which the check ledger entries are suggested. The batch job includes all entries from the starting date to this date.';
trigger OnValidate()
var
DateCompression: Codeunit "Date Compression";
begin
DateCompression.VerifyDateCompressionDates(EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date");
end;
}
}
}
}
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();
end;
}
labels
{
}
trigger OnPreReport()
var
DateCompression: Codeunit "Date Compression";
begin
CheckLedgEntryFilter := CopyStr("Check Ledger Entry".GetFilters, 1, MaxStrLen(DateComprReg.Filter));
DateCompression.VerifyDateCompressionDates(EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date");
end;
var
SourceCodeSetup: Record "Source Code Setup";
DateComprReg: Record "Date Compr. Register";
EntrdDateComprReg: Record "Date Compr. Register";
CheckLedgEntry2: Record "Check Ledger Entry";
CheckLedgEntry3: Record "Check Ledger Entry";
DateComprMgt: Codeunit DateComprMgt;
Window: Dialog;
CheckLedgEntryFilter: Text[250];
NoOfDeleted: Integer;
RegExists: 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 AA0470
MustBeSpecifiedErr: Label '%1 must be specified.';
DateCompressingEntriesMsg: Label 'Date compressing check ledger entries...\\Bank Account No. #1##########\No. of entries deleted #4######';
#pragma warning restore AA0470
AllRecordsDeletedLbl: Label 'All records deleted';
local procedure InitRegister()
var
NextRegNo: Integer;
begin
if DateComprReg.FindLast() then
NextRegNo := DateComprReg."No." + 1;
DateComprReg.InitRegister(
DATABASE::"Check Ledger Entry", NextRegNo,
EntrdDateComprReg."Starting Date", EntrdDateComprReg."Ending Date", EntrdDateComprReg."Period Length",
CheckLedgEntryFilter, 0, SourceCodeSetup."Compress Check Ledger");
DateComprReg."Retain Field Contents" := AllRecordsDeletedLbl;
RegExists := false;
NoOfDeleted := 0;
end;
local procedure InsertRegisters(DateComprReg: Record "Date Compr. Register")
begin
if RegExists then
DateComprReg.Modify()
else begin
DateComprReg.Insert();
RegExists := true;
end;
Commit();
CheckLedgEntry2.LockTable();
if CheckLedgEntry3.FindLast() then;
DateComprReg.LockTable();
InitRegister();
end;
/// <summary>
/// Initializes the date range parameters for check ledger entry deletion.
/// </summary>
/// <param name="StartingDate">Starting date for deletion range</param>
/// <param name="EndingDate">Ending date for deletion range</param>
procedure InitializeRequest(StartingDate: Date; EndingDate: Date)
begin
EntrdDateComprReg."Starting Date" := StartingDate;
EntrdDateComprReg."Ending Date" := EndingDate;
end;
}