Page 255 Cash Receipt Journal
- App
- Base Application
- Namespace
- Microsoft.Finance.GeneralLedger.Journal
- Versions
- 17-28
- Source table
- 81
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Finance/GeneralLedger/Journal/CashReceiptJournal.Page.al1557 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.Finance.GeneralLedger.Journal;
using Microsoft.EServices.EDocument;
using Microsoft.Finance.AllocationAccount;
using Microsoft.Finance.Currency;
using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Posting;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Finance.ReceivablesPayables;
using Microsoft.Foundation.Reporting;
using Microsoft.Sales.Setup;
using Microsoft.Utilities;
using System.Automation;
using System.Environment;
using System.Environment.Configuration;
using System.Integration;
using System.Privacy;
using System.Threading;
/// <summary>
/// Provides cash receipt journal functionality for recording customer payments and cash transactions.
/// Supports payment application, dimension management, and approval workflows with comprehensive validation.
/// </summary>
/// <remarks>
/// Primary data source: Gen. Journal Line table. Integrates with customer ledger entries, bank accounts, and general ledger posting.
/// Key workflows: Payment entry, customer payment application, dimension assignment, approval processing.
/// Extensibility: Multiple integration events for custom validation and processing logic throughout the payment workflow.
/// </remarks>
page 255 "Cash Receipt Journal"
{
AdditionalSearchTerms = 'customer payment';
ApplicationArea = Basic, Suite;
AutoSplitKey = true;
Caption = 'Cash Receipt Journals';
DataCaptionExpression = Rec.DataCaption();
DelayedInsert = true;
PageType = Worksheet;
AboutTitle = 'About Cash Receipt Journals';
AboutText = 'Record and post incoming payments by entering cash receipt transactions, applying payments to customer, vendor, bank, or general ledger accounts, and ensuring accurate allocation and reconciliation of funds.';
SaveValues = true;
SourceTable = "Gen. Journal Line";
UsageCategory = Tasks;
layout
{
area(content)
{
group(Control2)
{
ShowCaption = false;
field(CurrentJnlBatchName; CurrentJnlBatchName)
{
ApplicationArea = Basic, Suite;
Caption = 'Batch Name';
Lookup = true;
ToolTip = 'Specifies the name of the journal batch, a personalized journal layout, that the journal is based on.';
trigger OnLookup(var Text: Text): Boolean
begin
CurrPage.SaveRecord();
GenJnlManagement.LookupName(CurrentJnlBatchName, Rec);
SetControlAppearanceFromBatch();
CurrPage.Update(false);
end;
trigger OnValidate()
begin
GenJnlManagement.CheckName(CurrentJnlBatchName, Rec);
CurrentJnlBatchNameOnAfterVali();
end;
}
field(GenJnlBatchApprovalStatus; GenJnlBatchApprovalStatus)
{
ApplicationArea = Basic, Suite;
Caption = 'Approval Status';
Editable = false;
Visible = EnabledGenJnlBatchWorkflowsExist;
ToolTip = 'Specifies the approval status for general journal batch.';
}
}
repeater(Control1)
{
ShowCaption = false;
field("Posting Date"; Rec."Posting Date")
{
ApplicationArea = Basic, Suite;
}
field("Document Date"; Rec."Document Date")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Document Type"; Rec."Document Type")
{
ApplicationArea = Basic, Suite;
}
field("Document No."; Rec."Document No.")
{
ApplicationArea = Basic, Suite;
ShowMandatory = true;
}
field("Incoming Document Entry No."; Rec."Incoming Document Entry No.")
{
ApplicationArea = Basic, Suite;
Visible = false;
trigger OnAssistEdit()
begin
if Rec."Incoming Document Entry No." > 0 then
HyperLink(Rec.GetIncomingDocumentURL());
end;
}
field("External Document No."; Rec."External Document No.")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Account Type"; Rec."Account Type")
{
ApplicationArea = Basic, Suite;
trigger OnValidate()
begin
GenJnlManagement.GetAccounts(Rec, AccName, BalAccName);
EnableApplyEntriesAction();
CurrPage.SaveRecord();
end;
}
field("Account No."; Rec."Account No.")
{
ApplicationArea = Basic, Suite;
trigger OnValidate()
begin
GenJnlManagement.GetAccounts(Rec, AccName, BalAccName);
Rec.ShowShortcutDimCode(ShortcutDimCode);
CurrPage.SaveRecord();
end;
}
field(GenJnlLineApprovalStatus; GenJnlLineApprovalStatus)
{
ApplicationArea = Basic, Suite;
Caption = 'Approval Status';
Editable = false;
Visible = EnabledGenJnlLineWorkflowsExist;
ToolTip = 'Specifies the approval status for general journal line.';
}
field(Description; Rec.Description)
{
ApplicationArea = Basic, Suite;
}
field("Salespers./Purch. Code"; Rec."Salespers./Purch. Code")
{
ApplicationArea = Suite;
Visible = false;
}
field("Campaign No."; Rec."Campaign No.")
{
ApplicationArea = RelationshipMgmt;
Visible = false;
}
field("Currency Code"; Rec."Currency Code")
{
ApplicationArea = Suite;
AssistEdit = true;
Visible = false;
trigger OnAssistEdit()
begin
ChangeExchangeRate.SetParameter(Rec."Currency Code", Rec."Currency Factor", Rec."Posting Date");
if ChangeExchangeRate.RunModal() = ACTION::OK then
Rec.Validate("Currency Factor", ChangeExchangeRate.GetParameter());
Clear(ChangeExchangeRate);
end;
}
field("Gen. Posting Type"; Rec."Gen. Posting Type")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Gen. Bus. Posting Group"; Rec."Gen. Bus. Posting Group")
{
ApplicationArea = Suite;
Visible = false;
}
field("Gen. Prod. Posting Group"; Rec."Gen. Prod. Posting Group")
{
ApplicationArea = Suite;
Visible = false;
}
field("VAT Bus. Posting Group"; Rec."VAT Bus. Posting Group")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("VAT Prod. Posting Group"; Rec."VAT Prod. Posting Group")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Posting Group"; Rec."Posting Group")
{
ApplicationArea = Basic, Suite;
Editable = IsPostingGroupEditable;
Visible = IsPostingGroupEditable;
}
field(Amount; Rec.Amount)
{
ApplicationArea = Basic, Suite;
Visible = AmountVisible;
}
field("Amount (LCY)"; Rec."Amount (LCY)")
{
ApplicationArea = Basic, Suite;
ToolTip = 'Specifies the total amount in local currency (including VAT) that the journal line consists of.';
Visible = AmountVisible;
}
field("Debit Amount"; Rec."Debit Amount")
{
ApplicationArea = Basic, Suite;
Visible = DebitCreditVisible;
}
field("Credit Amount"; Rec."Credit Amount")
{
ApplicationArea = Basic, Suite;
Visible = DebitCreditVisible;
}
field("VAT Amount"; Rec."VAT Amount")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("VAT Difference"; Rec."VAT Difference")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Bal. VAT Amount"; Rec."Bal. VAT Amount")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Bal. VAT Difference"; Rec."Bal. VAT Difference")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Bal. Account Type"; Rec."Bal. Account Type")
{
ApplicationArea = Basic, Suite;
}
field("Bal. Account No."; Rec."Bal. Account No.")
{
ApplicationArea = Basic, Suite;
trigger OnValidate()
begin
GenJnlManagement.GetAccounts(Rec, AccName, BalAccName);
Rec.ShowShortcutDimCode(ShortcutDimCode);
end;
}
field("Bal. Gen. Posting Type"; Rec."Bal. Gen. Posting Type")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Bal. Gen. Bus. Posting Group"; Rec."Bal. Gen. Bus. Posting Group")
{
ApplicationArea = Suite;
Visible = false;
}
field("Bal. Gen. Prod. Posting Group"; Rec."Bal. Gen. Prod. Posting Group")
{
ApplicationArea = Suite;
Visible = false;
}
field("Bal. VAT Bus. Posting Group"; Rec."Bal. VAT Bus. Posting Group")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Bal. VAT Prod. Posting Group"; Rec."Bal. VAT Prod. Posting Group")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Allocation Account No."; Rec."Selected Alloc. Account No.")
{
ApplicationArea = All;
Caption = 'Allocation Account No.';
Visible = UseAllocationAccountNumber;
trigger OnValidate()
var
GenJournalAllocAccMgt: Codeunit "Gen. Journal Alloc. Acc. Mgt.";
begin
GenJournalAllocAccMgt.VerifySelectedAllocationAccountNo(Rec);
end;
}
field("Applied (Yes/No)"; Rec.IsApplied())
{
ApplicationArea = Basic, Suite;
Caption = 'Applied (Yes/No)';
ToolTip = 'Specifies if the payment has been applied.';
}
field("Applies-to Doc. Type"; Rec."Applies-to Doc. Type")
{
ApplicationArea = Basic, Suite;
}
field("Applies-to Doc. No."; Rec."Applies-to Doc. No.")
{
ApplicationArea = Basic, Suite;
}
field("Applies-to ID"; Rec."Applies-to ID")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Payment Method Code"; Rec."Payment Method Code")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Reason Code"; Rec."Reason Code")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field(Correction; Rec.Correction)
{
ApplicationArea = Basic, Suite;
}
field(Comments; Rec.Comment)
{
ApplicationArea = Comments;
Visible = false;
}
field("Direct Debit Mandate ID"; Rec."Direct Debit Mandate ID")
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field("Job Queue Status"; Rec."Job Queue Status")
{
ApplicationArea = All;
Importance = Additional;
Visible = JobQueuesUsed;
trigger OnDrillDown()
var
JobQueueEntry: Record "Job Queue Entry";
begin
if Rec."Job Queue Status" = Rec."Job Queue Status"::" " then
exit;
JobQueueEntry.ShowStatusMsg(Rec."Job Queue Entry ID");
end;
}
field("Shortcut Dimension 1 Code"; Rec."Shortcut Dimension 1 Code")
{
ApplicationArea = Dimensions;
Visible = DimVisible1;
}
field("Shortcut Dimension 2 Code"; Rec."Shortcut Dimension 2 Code")
{
ApplicationArea = Dimensions;
Visible = DimVisible2;
}
field(ShortcutDimCode3; ShortcutDimCode[3])
{
ApplicationArea = Dimensions;
CaptionClass = '1,2,3';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(3),
"Dimension Value Type" = const(Standard),
Blocked = const(false));
Visible = DimVisible3;
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(3, ShortcutDimCode[3]);
OnAfterValidateShortcutDimCode(Rec, ShortcutDimCode, 3);
end;
}
field(ShortcutDimCode4; ShortcutDimCode[4])
{
ApplicationArea = Dimensions;
CaptionClass = '1,2,4';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(4),
"Dimension Value Type" = const(Standard),
Blocked = const(false));
Visible = DimVisible4;
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(4, ShortcutDimCode[4]);
OnAfterValidateShortcutDimCode(Rec, ShortcutDimCode, 4);
end;
}
field(ShortcutDimCode5; ShortcutDimCode[5])
{
ApplicationArea = Dimensions;
CaptionClass = '1,2,5';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(5),
"Dimension Value Type" = const(Standard),
Blocked = const(false));
Visible = DimVisible5;
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(5, ShortcutDimCode[5]);
OnAfterValidateShortcutDimCode(Rec, ShortcutDimCode, 5);
end;
}
field(ShortcutDimCode6; ShortcutDimCode[6])
{
ApplicationArea = Dimensions;
CaptionClass = '1,2,6';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(6),
"Dimension Value Type" = const(Standard),
Blocked = const(false));
Visible = DimVisible6;
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(6, ShortcutDimCode[6]);
OnAfterValidateShortcutDimCode(Rec, ShortcutDimCode, 6);
end;
}
field(ShortcutDimCode7; ShortcutDimCode[7])
{
ApplicationArea = Dimensions;
CaptionClass = '1,2,7';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(7),
"Dimension Value Type" = const(Standard),
Blocked = const(false));
Visible = DimVisible7;
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(7, ShortcutDimCode[7]);
OnAfterValidateShortcutDimCode(Rec, ShortcutDimCode, 7);
end;
}
field(ShortcutDimCode8; ShortcutDimCode[8])
{
ApplicationArea = Dimensions;
CaptionClass = '1,2,8';
TableRelation = "Dimension Value".Code where("Global Dimension No." = const(8),
"Dimension Value Type" = const(Standard),
Blocked = const(false));
Visible = DimVisible8;
trigger OnValidate()
begin
Rec.ValidateShortcutDimCode(8, ShortcutDimCode[8]);
OnAfterValidateShortcutDimCode(Rec, ShortcutDimCode, 8);
end;
}
}
group(Control24)
{
ShowCaption = false;
fixed(Control1903561801)
{
ShowCaption = false;
group("Number of Lines")
{
Caption = 'Number of Lines';
field(NumberOfJournalRecords; NumberOfRecords)
{
ApplicationArea = All;
AutoFormatType = 1;
ShowCaption = false;
Editable = false;
ToolTip = 'Specifies the number of lines in the current journal batch.';
}
}
group("Account Name")
{
Caption = 'Account Name';
Visible = false;
field(AccName; AccName)
{
ApplicationArea = Basic, Suite;
Editable = false;
ShowCaption = false;
ToolTip = 'Specifies the name of the account.';
}
}
group("Bal. Account Name")
{
Caption = 'Bal. Account Name';
Visible = false;
field(BalAccName; BalAccName)
{
ApplicationArea = Basic, Suite;
Caption = 'Bal. Account Name';
Editable = false;
ToolTip = 'Specifies the name of the balancing account that has been entered on the journal line.';
}
}
group(Control1900545401)
{
Caption = 'Balance';
field(Balance; Balance)
{
ApplicationArea = All;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Balance';
Editable = false;
ToolTip = 'Specifies the balance that has accumulated in the cash receipt journal on the line where the cursor is.';
Visible = BalanceVisible;
}
}
group("Total Balance")
{
Caption = 'Total Balance';
field(TotalBalance; TotalBalance)
{
ApplicationArea = All;
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Total Balance';
Editable = false;
ToolTip = 'Specifies the total balance in the cash receipt journal.';
Visible = TotalBalanceVisible;
}
}
}
}
}
area(factboxes)
{
part(JournalErrorsFactBox; "Journal Errors FactBox")
{
ApplicationArea = Basic, Suite;
Visible = BackgroundErrorCheck;
SubPageLink = "Journal Template Name" = field("Journal Template Name"),
"Journal Batch Name" = field("Journal Batch Name"),
"Line No." = field("Line No.");
}
part(JournalLineDetails; "Journal Line Details FactBox")
{
ApplicationArea = Basic, Suite;
SubPageLink = "Journal Template Name" = field("Journal Template Name"),
"Journal Batch Name" = field("Journal Batch Name"),
"Line No." = field("Line No.");
}
part(IncomingDocAttachFactBox; "Incoming Doc. Attach. FactBox")
{
ApplicationArea = Basic, Suite;
ShowFilter = false;
}
part(Control1900919607; "Dimension Set Entries FactBox")
{
ApplicationArea = Basic, Suite;
SubPageLink = "Dimension Set ID" = field("Dimension Set ID");
Visible = false;
}
part(WorkflowStatusBatch; "Workflow Status FactBox")
{
ApplicationArea = Suite;
Caption = 'Batch Workflows';
Editable = false;
Enabled = false;
ShowFilter = false;
Visible = ShowWorkflowStatusOnBatch;
}
part(WorkflowStatusLine; "Workflow Status FactBox")
{
ApplicationArea = Suite;
Caption = 'Line Workflows';
Editable = false;
Enabled = false;
ShowFilter = false;
Visible = ShowWorkflowStatusOnLine;
}
systempart(Control1900383207; Links)
{
ApplicationArea = RecordLinks;
Visible = false;
}
systempart(Control1905767507; Notes)
{
ApplicationArea = Notes;
Visible = false;
}
}
}
actions
{
area(navigation)
{
group("&Line")
{
Caption = '&Line';
Image = Line;
action(Dimensions)
{
AccessByPermission = TableData Dimension = R;
ApplicationArea = Dimensions;
Caption = 'Dimensions';
Image = Dimensions;
ShortCutKey = 'Alt+D';
ToolTip = 'View or edit dimensions, such as area, project, or department, that you can assign to sales and purchase documents to distribute costs and analyze transaction history.';
trigger OnAction()
begin
Rec.ShowDimensions();
CurrPage.SaveRecord();
end;
}
action(IncomingDoc)
{
AccessByPermission = TableData "Incoming Document" = R;
ApplicationArea = Basic, Suite;
Caption = 'Incoming Document';
Image = Document;
Scope = Repeater;
ToolTip = 'View or create an incoming document record that is linked to the entry or document.';
trigger OnAction()
var
IncomingDocument: Record "Incoming Document";
begin
Rec.Validate("Incoming Document Entry No.", IncomingDocument.SelectIncomingDocument(Rec."Incoming Document Entry No.", Rec.RecordId()));
end;
}
}
group("A&ccount")
{
Caption = 'A&ccount';
Image = ChartOfAccounts;
action(Card)
{
ApplicationArea = Basic, Suite;
Caption = 'Card';
Image = EditLines;
RunObject = Codeunit "Gen. Jnl.-Show Card";
ShortCutKey = 'Shift+F7';
ToolTip = 'View or change detailed information about the record on the document or journal line.';
}
action("Ledger E&ntries")
{
ApplicationArea = Basic, Suite;
Caption = 'Ledger E&ntries';
Image = GLRegisters;
RunObject = Codeunit "Gen. Jnl.-Show Entries";
ShortCutKey = 'Ctrl+F7';
ToolTip = 'View the history of transactions that have been posted for the selected record.';
}
}
action(Approvals)
{
AccessByPermission = TableData "Approval Entry" = R;
ApplicationArea = Suite;
Caption = 'Approvals';
Image = Approvals;
ToolTip = 'View a list of the records that are waiting to be approved. For example, you can see who requested the record to be approved, when it was sent, and when it is due to be approved.';
trigger OnAction()
var
GenJournalLine: Record "Gen. Journal Line";
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
GetCurrentlySelectedLines(GenJournalLine);
ApprovalsMgmt.ShowJournalApprovalEntries(GenJournalLine);
end;
}
group(Errors)
{
Image = ErrorLog;
Visible = BackgroundErrorCheck;
action(ShowLinesWithErrors)
{
ApplicationArea = Basic, Suite;
Caption = 'Show Lines with Issues';
Image = Error;
Visible = BackgroundErrorCheck;
Enabled = not ShowAllLinesEnabled;
ToolTip = 'View a list of journal lines that have issues before you post the journal.';
trigger OnAction()
begin
Rec.SwitchLinesWithErrorsFilter(ShowAllLinesEnabled);
end;
}
action(ShowAllLines)
{
ApplicationArea = Basic, Suite;
Caption = 'Show All Lines';
Image = ExpandAll;
Visible = BackgroundErrorCheck;
Enabled = ShowAllLinesEnabled;
ToolTip = 'View all journal lines, including lines with and without issues.';
trigger OnAction()
begin
Rec.SwitchLinesWithErrorsFilter(ShowAllLinesEnabled);
end;
}
}
}
area(processing)
{
group("F&unctions")
{
Caption = 'F&unctions';
Image = "Action";
action("Renumber Document Numbers")
{
ApplicationArea = Basic, Suite;
Caption = 'Renumber Document Numbers';
Image = EditLines;
ToolTip = 'Resort the numbers in the Document No. column to avoid posting errors because the document numbers are not in sequence. Entry applications and line groupings are preserved.';
trigger OnAction()
begin
Rec.RenumberDocumentNo();
end;
}
action("Apply Entries")
{
ApplicationArea = Basic, Suite;
Caption = 'Apply Entries';
Ellipsis = true;
Enabled = ApplyEntriesActionEnabled;
Image = ApplyEntries;
RunObject = Codeunit "Gen. Jnl.-Apply";
ShortCutKey = 'Shift+F11';
ToolTip = 'Apply the payment amount on a journal line to a sales or purchase document that was already posted for a customer or vendor. This updates the amount on the posted document, and the document can either be partially paid, or closed as paid or refunded.';
}
action("Insert Conv. LCY Rndg. Lines")
{
ApplicationArea = Basic, Suite;
Caption = 'Insert Conv. LCY Rndg. Lines';
Image = InsertCurrency;
RunObject = Codeunit "Adjust Gen. Journal Balance";
ToolTip = 'Insert a rounding correction line in the journal. This rounding correction line will balance in LCY when amounts in the foreign currency also balance. You can then post the journal.';
}
}
group("P&osting")
{
Caption = 'P&osting';
Image = Post;
action(Reconcile)
{
ApplicationArea = Basic, Suite;
Caption = 'Reconcile';
Image = Reconcile;
ShortCutKey = 'Ctrl+F11';
ToolTip = 'View the balances on bank accounts that are marked for reconciliation, usually liquid accounts.';
trigger OnAction()
var
GLReconciliation: Page Reconciliation;
begin
GLReconciliation.SetGenJnlLine(Rec);
GLReconciliation.Run();
end;
}
action("Test Report")
{
ApplicationArea = Basic, Suite;
Caption = 'Test Report';
Ellipsis = true;
Image = TestReport;
ToolTip = 'View a test report so that you can find and correct any errors before you perform the actual posting of the journal or document.';
trigger OnAction()
var
TestReportPrint: Codeunit "Test Report-Print";
begin
TestReportPrint.PrintGenJnlLine(Rec);
end;
}
action(Post)
{
ApplicationArea = Basic, Suite;
Caption = 'P&ost';
Image = PostOrder;
ShortCutKey = 'F9';
ToolTip = 'Finalize the document or journal by posting the amounts and quantities to the related accounts in your company books.';
trigger OnAction()
begin
Rec.SendToPosting(Codeunit::"Gen. Jnl.-Post");
CurrentJnlBatchName := Rec.GetRangeMax("Journal Batch Name");
SetJobQueueVisibility();
CurrPage.Update(false);
end;
}
action(Preview)
{
ApplicationArea = Basic, Suite;
Caption = 'Preview Posting';
Image = ViewPostedOrder;
ShortCutKey = 'Ctrl+Alt+F9';
ToolTip = 'Review the different types of entries that will be created when you post the document or journal.';
trigger OnAction()
var
GenJnlPost: Codeunit "Gen. Jnl.-Post";
begin
GenJnlPost.Preview(Rec);
end;
}
action("Post and &Print")
{
ApplicationArea = Basic, Suite;
Caption = 'Post and &Print';
Image = PostPrint;
ShortCutKey = 'Shift+F9';
ToolTip = 'Finalize and prepare to print the document or journal. The values and quantities are posted to the related accounts. A report request window where you can specify what to include on the print-out.';
trigger OnAction()
begin
Rec.SendToPosting(Codeunit::"Gen. Jnl.-Post+Print");
CurrentJnlBatchName := Rec.GetRangeMax("Journal Batch Name");
SetJobQueueVisibility();
CurrPage.Update(false);
end;
}
action("Remove From Job Queue")
{
ApplicationArea = Basic, Suite;
Caption = 'Remove From Job Queue';
Image = RemoveLine;
ToolTip = 'Remove the scheduled processing of this record from the job queue.';
Visible = JobQueueVisible;
trigger OnAction()
begin
Rec.CancelBackgroundPosting();
SetJobQueueVisibility();
CurrPage.Update(false);
end;
}
action(RedistributeAccAllocations)
{
ApplicationArea = All;
Caption = 'Redistribute Account Allocations';
Image = EditList;
#pragma warning disable AA0219
ToolTip = 'Use this action to redistribute the account allocations for this line.';
#pragma warning restore AA0219
trigger OnAction()
var
AllocAccManualOverride: Page "Redistribute Acc. Allocations";
begin
if (Rec."Account Type" <> Rec."Account Type"::"Allocation Account") and (Rec."Bal. Account Type" <> Rec."Bal. Account Type"::"Allocation Account") and (Rec."Selected Alloc. Account No." = '') then
Error(ActionOnlyAllowedForAllocationAccountsErr);
AllocAccManualOverride.SetParentSystemId(Rec.SystemId);
AllocAccManualOverride.SetParentTableId(Database::"Gen. Journal Line");
AllocAccManualOverride.RunModal();
end;
}
action(ReplaceAllocationAccountWithLines)
{
ApplicationArea = All;
Caption = 'Generate lines from Allocation Account Line';
Image = CreateLinesFromJob;
#pragma warning disable AA0219
ToolTip = 'Use this action to replace the Allocation Account line with the actual lines that would be generated from the line itself.';
#pragma warning restore AA0219
trigger OnAction()
var
BackupRec: Record "Gen. Journal Line";
GenJournalAllocAccMgt: Codeunit "Gen. Journal Alloc. Acc. Mgt.";
begin
if (Rec."Account Type" <> Rec."Account Type"::"Allocation Account") and (Rec."Bal. Account Type" <> Rec."Bal. Account Type"::"Allocation Account") and (Rec."Selected Alloc. Account No." = '') then
Error(ActionOnlyAllowedForAllocationAccountsErr);
BackupRec.Copy(Rec);
BackupRec.SetRecFilter();
GenJournalAllocAccMgt.CreateLines(BackupRec);
Rec.Delete();
CurrPage.Update(false);
end;
}
}
group("Request Approval")
{
Caption = 'Request Approval';
group(SendApprovalRequest)
{
Caption = 'Send Approval Request';
Image = SendApprovalRequest;
action(SendApprovalRequestJournalBatch)
{
ApplicationArea = Basic, Suite;
Caption = 'Journal Batch';
Enabled = not OpenApprovalEntriesOnBatchOrAnyJnlLineExist and CanRequestFlowApprovalForBatchAndAllLines;
Image = SendApprovalRequest;
ToolTip = 'Send all journal lines for approval, also those that you may not see because of filters.';
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.TrySendJournalBatchApprovalRequest(Rec);
SetControlAppearanceFromBatch();
SetControlAppearance();
end;
}
action(SendApprovalRequestJournalLine)
{
ApplicationArea = Basic, Suite;
Caption = 'Selected Journal Lines';
Enabled = not OpenApprovalEntriesOnBatchOrCurrJnlLineExist and CanRequestFlowApprovalForBatchAndCurrentLine;
Image = SendApprovalRequest;
ToolTip = 'Send selected journal lines for approval.';
trigger OnAction()
var
GenJournalLine: Record "Gen. Journal Line";
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
GetCurrentlySelectedLines(GenJournalLine);
ApprovalsMgmt.TrySendJournalLineApprovalRequests(GenJournalLine);
end;
}
}
group(CancelApprovalRequest)
{
Caption = 'Cancel Approval Request';
Image = Cancel;
action(CancelApprovalRequestJournalBatch)
{
ApplicationArea = Basic, Suite;
Caption = 'Journal Batch';
Enabled = CanCancelApprovalForJnlBatch or CanCancelFlowApprovalForBatch;
Image = CancelApprovalRequest;
ToolTip = 'Cancel sending all journal lines for approval, also those that you may not see because of filters.';
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.TryCancelJournalBatchApprovalRequest(Rec);
SetControlAppearanceFromBatch();
SetControlAppearance();
end;
}
action(CancelApprovalRequestJournalLine)
{
ApplicationArea = Basic, Suite;
Caption = 'Selected Journal Lines';
Enabled = CanCancelApprovalForJnlLine or CanCancelFlowApprovalForLine;
Image = CancelApprovalRequest;
ToolTip = 'Cancel sending selected journal lines for approval.';
trigger OnAction()
var
GenJournalLine: Record "Gen. Journal Line";
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
GetCurrentlySelectedLines(GenJournalLine);
ApprovalsMgmt.TryCancelJournalLineApprovalRequests(GenJournalLine);
end;
}
}
group(Flow)
{
Caption = 'Power Automate';
Image = Flow;
customaction(CreateApprovalFlowFromTemplate)
{
ApplicationArea = Basic, Suite;
Caption = 'Create approval flow';
ToolTip = 'Create a new flow in Power Automate from a list of relevant flow templates.';
Visible = IsSaaS and IsPowerAutomatePrivacyNoticeApproved;
CustomActionType = FlowTemplateGallery;
FlowTemplateCategoryName = 'd365bc_approval_generalJournal';
}
}
}
group(Approval)
{
Caption = 'Approval';
action(Approve)
{
ApplicationArea = All;
Caption = 'Approve';
Image = Approve;
ToolTip = 'Approve the requested changes.';
Visible = OpenApprovalEntriesExistForCurrUser;
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.ApproveGenJournalLineRequest(Rec);
end;
}
action(Reject)
{
ApplicationArea = All;
Caption = 'Reject';
Image = Reject;
ToolTip = 'Reject the approval request.';
Visible = OpenApprovalEntriesExistForCurrUser;
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.RejectGenJournalLineRequest(Rec);
end;
}
action(Delegate)
{
ApplicationArea = All;
Caption = 'Delegate';
Image = Delegate;
ToolTip = 'Delegate the approval to a substitute approver.';
Visible = OpenApprovalEntriesExistForCurrUser;
trigger OnAction()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
ApprovalsMgmt.DelegateGenJournalLineRequest(Rec);
end;
}
action(Comment)
{
ApplicationArea = All;
Caption = 'Comments';
Image = ViewComments;
ToolTip = 'View or add comments for the record.';
Visible = OpenApprovalEntriesExistForCurrUser or ApprovalEntriesExistSentByCurrentUser;
trigger OnAction()
var
GenJournalBatch: Record "Gen. Journal Batch";
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
if OpenApprovalEntriesOnJnlLineExist then
ApprovalsMgmt.GetApprovalComment(Rec)
else
if OpenApprovalEntriesOnJnlBatchExist then
if GenJournalBatch.Get(Rec."Journal Template Name", Rec."Journal Batch Name") then
ApprovalsMgmt.GetApprovalComment(GenJournalBatch);
end;
}
}
group("Page")
{
Caption = 'Page';
action(EditInExcel)
{
ApplicationArea = Basic, Suite;
Caption = 'Edit in Excel';
Image = Excel;
ToolTip = 'Send the data in the journal to an Excel file for analysis or editing.';
Visible = IsSaaSExcelAddinEnabled;
AccessByPermission = System "Allow Action Export To Excel" = X;
trigger OnAction()
var
ODataUtility: Codeunit ODataUtility;
begin
ODataUtility.EditJournalWorksheetInExcel(CurrPage.Caption, CurrPage.ObjectId(false), Rec."Journal Batch Name", Rec."Journal Template Name");
end;
}
}
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process', Comment = 'Generated from the PromotedActionCategories property index 1.';
group(Category_Category6)
{
Caption = 'Post/Print', Comment = 'Generated from the PromotedActionCategories property index 5.';
ShowAs = SplitButton;
actionref(Post_Promoted; Post)
{
}
actionref(Preview_Promoted; Preview)
{
}
actionref("Post and &Print_Promoted"; "Post and &Print")
{
}
actionref("Test Report_Promoted"; "Test Report")
{
}
}
actionref("Renumber Document Numbers_Promoted"; "Renumber Document Numbers")
{
}
actionref(Reconcile_Promoted; Reconcile)
{
}
actionref("Apply Entries_Promoted"; "Apply Entries")
{
}
}
group(Category_Category4)
{
Caption = 'Approve', Comment = 'Generated from the PromotedActionCategories property index 3.';
actionref(Approve_Promoted; Approve)
{
}
actionref(Reject_Promoted; Reject)
{
}
actionref(Comment_Promoted; Comment)
{
}
actionref(Delegate_Promoted; Delegate)
{
}
}
group("Category_Request Approval")
{
Caption = 'Request Approval';
group("Category_Send Approval Request")
{
Caption = 'Send Approval Request';
actionref(SendApprovalRequestJournalBatch_Promoted; SendApprovalRequestJournalBatch)
{
}
actionref(SendApprovalRequestJournalLine_Promoted; SendApprovalRequestJournalLine)
{
}
}
group("Category_Cancel Approval Request")
{
Caption = 'Cancel Approval Request';
actionref(CancelApprovalRequestJournalBatch_Promoted; CancelApprovalRequestJournalBatch)
{
}
actionref(CancelApprovalRequestJournalLine_Promoted; CancelApprovalRequestJournalLine)
{
}
}
}
group(Category_Category7)
{
Caption = 'Line', Comment = 'Generated from the PromotedActionCategories property index 6.';
actionref(Dimensions_Promoted; Dimensions)
{
}
actionref(Approvals_Promoted; Approvals)
{
}
actionref(IncomingDoc_Promoted; IncomingDoc)
{
}
}
group(Category_Category8)
{
Caption = 'Account', Comment = 'Generated from the PromotedActionCategories property index 7.';
}
group(Category_Category5)
{
Caption = 'Page', Comment = 'Generated from the PromotedActionCategories property index 4.';
actionref(EditInExcel_Promoted; EditInExcel)
{
}
actionref(ShowLinesWithErrors_Promoted; ShowLinesWithErrors)
{
}
actionref(ShowAllLines_Promoted; ShowAllLines)
{
}
}
group(Category_Report)
{
Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
}
}
}
trigger OnAfterGetCurrRecord()
var
GenJournalBatch: Record "Gen. Journal Batch";
begin
GenJnlManagement.GetAccounts(Rec, AccName, BalAccName);
UpdateBalance();
EnableApplyEntriesAction();
SetControlAppearance();
SetApprovalStateForBatch();
CurrPage.IncomingDocAttachFactBox.PAGE.LoadDataFromRecord(Rec);
if GenJournalBatch.Get(Rec."Journal Template Name", Rec."Journal Batch Name") then
ShowWorkflowStatusOnBatch := CurrPage.WorkflowStatusBatch.PAGE.SetFilterOnWorkflowRecord(GenJournalBatch.RecordId);
ShowWorkflowStatusOnLine := CurrPage.WorkflowStatusLine.PAGE.SetFilterOnWorkflowRecord(Rec.RecordId());
SetJobQueueVisibility();
ApprovalMgmt.GetGenJnlBatchApprovalStatus(Rec, GenJnlBatchApprovalStatus, EnabledGenJnlBatchWorkflowsExist);
end;
trigger OnAfterGetRecord()
begin
Rec.ShowShortcutDimCode(ShortcutDimCode);
GenJnlManagement.GetAccounts(Rec, AccName, BalAccName);
CurrPage.IncomingDocAttachFactBox.PAGE.SetCurrentRecordID(Rec.RecordId());
ApprovalMgmt.GetGenJnlLineApprovalStatus(Rec, GenJnlLineApprovalStatus, EnabledGenJnlLineWorkflowsExist);
end;
trigger OnInit()
begin
TotalBalanceVisible := true;
BalanceVisible := true;
AmountVisible := true;
GeneralLedgerSetup.GetRecordOnce();
SalesReceivablesSetup.GetRecordOnce();
SetJobQueueVisibility();
IsPowerAutomatePrivacyNoticeApproved := PrivacyNotice.GetPrivacyNoticeApprovalState(FlowServiceManagement.GetPowerAutomatePrivacyNoticeId()) = "Privacy Notice Approval State"::Agreed;
end;
trigger OnInsertRecord(BelowxRec: Boolean): Boolean
begin
CurrPage.IncomingDocAttachFactBox.PAGE.SetCurrentRecordID(Rec.RecordId);
end;
trigger OnNewRecord(BelowxRec: Boolean)
begin
UpdateBalance();
EnableApplyEntriesAction();
Rec.SetUpNewLine(xRec, Balance, BelowxRec);
Clear(ShortcutDimCode);
Clear(GenJnlLineApprovalStatus);
end;
trigger OnOpenPage()
var
AllocationAccountMgt: Codeunit "Allocation Account Mgt.";
ServerSetting: Codeunit "Server Setting";
EnvironmentInformation: Codeunit "Environment Information";
JnlSelected: Boolean;
IsHandled: Boolean;
begin
IsSaaSExcelAddinEnabled := ServerSetting.GetIsSaasExcelAddinEnabled();
IsSaaS := EnvironmentInformation.IsSaaS();
UseAllocationAccountNumber := AllocationAccountMgt.UseAllocationAccountNoField();
if ClientTypeManagement.GetCurrentClientType() = CLIENTTYPE::ODataV4 then
exit;
BalAccName := '';
SetControlVisibility();
SetDimensionsVisibility();
if Rec.IsOpenedFromBatch() then begin
CurrentJnlBatchName := Rec."Journal Batch Name";
GenJnlManagement.OpenJnl(CurrentJnlBatchName, Rec);
SetControlAppearanceFromBatch();
exit;
end;
IsHandled := false;
OnOnOpenPageOnBeforeTemplateSelection(Rec, JnlSelected, CurrentJnlBatchName, IsHandled);
if IsHandled then
exit;
GenJnlManagement.TemplateSelection(PAGE::"Cash Receipt Journal", "Gen. Journal Template Type"::"Cash Receipts", false, Rec, JnlSelected);
if not JnlSelected then
Error('');
GenJnlManagement.OpenJnl(CurrentJnlBatchName, Rec);
SetControlAppearanceFromBatch();
end;
trigger OnModifyRecord(): Boolean
begin
ApprovalMgmt.CleanGenJournalApprovalStatus(Rec, GenJnlBatchApprovalStatus, GenJnlLineApprovalStatus);
end;
var
GeneralLedgerSetup: Record "General Ledger Setup";
SalesReceivablesSetup: Record "Sales & Receivables Setup";
ClientTypeManagement: Codeunit "Client Type Management";
JournalErrorsMgt: Codeunit "Journal Errors Mgt.";
BackgroundErrorHandlingMgt: Codeunit "Background Error Handling Mgt.";
PrivacyNotice: Codeunit "Privacy Notice";
FlowServiceManagement: Codeunit "Flow Service Management";
ApprovalMgmt: Codeunit "Approvals Mgmt.";
ChangeExchangeRate: Page "Change Exchange Rate";
GenJnlBatchApprovalStatus: Text[20];
GenJnlLineApprovalStatus: Text[20];
TotalBalance: Decimal;
NumberOfRecords: Integer;
ShowBalance: Boolean;
ShowTotalBalance: Boolean;
BalanceVisible: Boolean;
TotalBalanceVisible: Boolean;
IsPostingGroupEditable: Boolean;
IsPowerAutomatePrivacyNoticeApproved: Boolean;
OpenApprovalEntriesExistForCurrUser: Boolean;
OpenApprovalEntriesExistForCurrUserBatch: Boolean;
OpenApprovalEntriesOnJnlBatchExist: Boolean;
OpenApprovalEntriesOnJnlLineExist: Boolean;
OpenApprovalEntriesOnBatchOrCurrJnlLineExist: Boolean;
OpenApprovalEntriesOnBatchOrAnyJnlLineExist: Boolean;
ShowWorkflowStatusOnBatch: Boolean;
ShowWorkflowStatusOnLine: Boolean;
CanCancelApprovalForJnlBatch: Boolean;
CanCancelApprovalForJnlLine: Boolean;
IsSaaSExcelAddinEnabled: Boolean;
CanRequestFlowApprovalForBatch: Boolean;
CanRequestFlowApprovalForBatchAndAllLines: Boolean;
CanRequestFlowApprovalForBatchAndCurrentLine: Boolean;
CanCancelFlowApprovalForBatch: Boolean;
CanCancelFlowApprovalForLine: Boolean;
AmountVisible: Boolean;
DebitCreditVisible: Boolean;
IsSaaS: Boolean;
JobQueuesUsed: Boolean;
JobQueueVisible: Boolean;
BackgroundErrorCheck: Boolean;
ShowAllLinesEnabled: Boolean;
EnabledGenJnlLineWorkflowsExist: Boolean;
EnabledGenJnlBatchWorkflowsExist: Boolean;
ApprovalEntriesExistSentByCurrentUser: Boolean;
UseAllocationAccountNumber: Boolean;
ActionOnlyAllowedForAllocationAccountsErr: Label 'This action is only available for lines that have Allocation Account set as Account Type or Balancing Account Type.';
protected var
GenJnlManagement: Codeunit GenJnlManagement;
AccName: Text[100];
BalAccName: Text[100];
CurrentJnlBatchName: Code[10];
Balance: Decimal;
ApplyEntriesActionEnabled: Boolean;
ShortcutDimCode: array[8] of Code[20];
DimVisible1: Boolean;
DimVisible2: Boolean;
DimVisible3: Boolean;
DimVisible4: Boolean;
DimVisible5: Boolean;
DimVisible6: Boolean;
DimVisible7: Boolean;
DimVisible8: Boolean;
local procedure UpdateBalance()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeUpdateBalance(Rec, xRec, Balance, TotalBalance, ShowBalance, ShowTotalBalance, IsHandled);
if not IsHandled then
GenJnlManagement.CalcBalance(
Rec, xRec, Balance, TotalBalance, ShowBalance, ShowTotalBalance);
BalanceVisible := ShowBalance;
TotalBalanceVisible := ShowTotalBalance;
if ShowTotalBalance then
NumberOfRecords := Rec.Count();
OnAfterUpdateBalance(Rec, xRec, Balance, TotalBalance);
end;
local procedure EnableApplyEntriesAction()
begin
ApplyEntriesActionEnabled :=
(Rec."Account Type" in [Rec."Account Type"::Customer, Rec."Account Type"::Vendor]) or
(Rec."Bal. Account Type" in [Rec."Bal. Account Type"::Customer, Rec."Bal. Account Type"::Vendor]);
end;
local procedure CurrentJnlBatchNameOnAfterVali()
begin
CurrPage.SaveRecord();
GenJnlManagement.SetName(CurrentJnlBatchName, Rec);
SetControlAppearanceFromBatch();
CurrPage.Update(false);
end;
local procedure GetCurrentlySelectedLines(var GenJournalLine: Record "Gen. Journal Line"): Boolean
begin
CurrPage.SetSelectionFilter(GenJournalLine);
exit(GenJournalLine.FindSet());
end;
/// <summary>
/// Configures control visibility and validation settings based on the current journal batch configuration.
/// Updates approval workflow states and background error checking capabilities.
/// </summary>
protected procedure SetControlAppearanceFromBatch()
begin
SetApprovalStateForBatch();
BackgroundErrorCheck := BackgroundErrorHandlingMgt.BackgroundValidationFeatureEnabled();
ShowAllLinesEnabled := true;
Rec.SwitchLinesWithErrorsFilter(ShowAllLinesEnabled);
JournalErrorsMgt.SetFullBatchCheck(true);
end;
local procedure SetApprovalStateForBatch()
var
GenJournalBatch: Record "Gen. Journal Batch";
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
WorkflowWebhookManagement: Codeunit "Workflow Webhook Management";
WorkflowManagement: Codeunit "Workflow Management";
WorkflowEventHandling: Codeunit "Workflow Event Handling";
CanRequestFlowApprovalForAllLines: Boolean;
begin
if ClientTypeManagement.GetCurrentClientType() = CLIENTTYPE::ODataV4 then
exit;
if not GenJournalBatch.Get(Rec.GetRangeMax("Journal Template Name"), CurrentJnlBatchName) then
exit;
CheckOpenApprovalEntries(GenJournalBatch.RecordId);
CanCancelApprovalForJnlBatch := ApprovalsMgmt.CanCancelApprovalForRecord(GenJournalBatch.RecordId);
WorkflowWebhookManagement.GetCanRequestAndCanCancelJournalBatch(
GenJournalBatch, CanRequestFlowApprovalForBatch, CanCancelFlowApprovalForBatch, CanRequestFlowApprovalForAllLines);
CanRequestFlowApprovalForBatchAndAllLines := CanRequestFlowApprovalForBatch and CanRequestFlowApprovalForAllLines;
ApprovalEntriesExistSentByCurrentUser := ApprovalsMgmt.HasApprovalEntriesSentByCurrentUser(GenJournalBatch.RecordId) or ApprovalsMgmt.HasApprovalEntriesSentByCurrentUser(Rec.RecordId);
EnabledGenJnlLineWorkflowsExist := WorkflowManagement.EnabledWorkflowExist(DATABASE::"Gen. Journal Line", WorkflowEventHandling.RunWorkflowOnSendGeneralJournalLineForApprovalCode());
EnabledGenJnlBatchWorkflowsExist := WorkflowManagement.EnabledWorkflowExist(DATABASE::"Gen. Journal Batch", WorkflowEventHandling.RunWorkflowOnSendGeneralJournalBatchForApprovalCode());
end;
local procedure CheckOpenApprovalEntries(BatchRecordId: RecordID)
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
begin
OpenApprovalEntriesExistForCurrUserBatch := ApprovalsMgmt.HasOpenApprovalEntriesForCurrentUser(BatchRecordId);
OpenApprovalEntriesOnJnlBatchExist := ApprovalsMgmt.HasOpenApprovalEntries(BatchRecordId);
OpenApprovalEntriesOnBatchOrAnyJnlLineExist :=
OpenApprovalEntriesOnJnlBatchExist or
ApprovalsMgmt.HasAnyOpenJournalLineApprovalEntries(Rec."Journal Template Name", Rec."Journal Batch Name");
end;
local procedure SetControlAppearance()
var
ApprovalsMgmt: Codeunit "Approvals Mgmt.";
WorkflowWebhookManagement: Codeunit "Workflow Webhook Management";
CanRequestFlowApprovalForLine: Boolean;
begin
OpenApprovalEntriesExistForCurrUser :=
OpenApprovalEntriesExistForCurrUserBatch or ApprovalsMgmt.HasOpenApprovalEntriesForCurrentUser(Rec.RecordId);
OpenApprovalEntriesOnJnlLineExist := ApprovalsMgmt.HasOpenApprovalEntries(Rec.RecordId());
OpenApprovalEntriesOnBatchOrCurrJnlLineExist := OpenApprovalEntriesOnJnlBatchExist or OpenApprovalEntriesOnJnlLineExist;
CanCancelApprovalForJnlLine := ApprovalsMgmt.CanCancelApprovalForRecord(Rec.RecordId());
WorkflowWebhookManagement.GetCanRequestAndCanCancel(Rec.RecordId(), CanRequestFlowApprovalForLine, CanCancelFlowApprovalForLine);
CanRequestFlowApprovalForBatchAndCurrentLine := CanRequestFlowApprovalForBatch and CanRequestFlowApprovalForLine;
end;
local procedure SetControlVisibility()
begin
AmountVisible := not (GeneralLedgerSetup."Show Amounts" = GeneralLedgerSetup."Show Amounts"::"Debit/Credit Only");
DebitCreditVisible := not (GeneralLedgerSetup."Show Amounts" = GeneralLedgerSetup."Show Amounts"::"Amount Only");
SalesReceivablesSetup.GetRecordOnce();
IsPostingGroupEditable := SalesReceivablesSetup."Allow Multiple Posting Groups";
end;
local procedure SetDimensionsVisibility()
var
DimensionManagement: Codeunit DimensionManagement;
begin
DimVisible1 := false;
DimVisible2 := false;
DimVisible3 := false;
DimVisible4 := false;
DimVisible5 := false;
DimVisible6 := false;
DimVisible7 := false;
DimVisible8 := false;
DimensionManagement.UseShortcutDims(
DimVisible1, DimVisible2, DimVisible3, DimVisible4, DimVisible5, DimVisible6, DimVisible7, DimVisible8);
Clear(DimensionManagement);
end;
local procedure SetJobQueueVisibility()
begin
JobQueueVisible := Rec."Job Queue Status" = Rec."Job Queue Status"::"Scheduled for Posting";
JobQueuesUsed := GeneralLedgerSetup.JobQueueActive();
end;
/// <summary>
/// Integration event raised after validating shortcut dimension codes on journal lines.
/// Enables custom processing of dimension validation results.
/// </summary>
/// <param name="GenJournalLine">Journal line with validated dimension code</param>
/// <param name="ShortcutDimCode">Array of shortcut dimension codes being validated</param>
/// <param name="DimIndex">Index of the dimension code being processed</param>
[IntegrationEvent(false, false)]
local procedure OnAfterValidateShortcutDimCode(var GenJournalLine: Record "Gen. Journal Line"; var ShortcutDimCode: array[8] of Code[20]; DimIndex: Integer)
begin
end;
/// <summary>
/// Integration event raised after balance calculation update on cash receipt journal lines.
/// Enables custom balance processing and validation logic.
/// </summary>
/// <param name="GenJnlLine">Current journal line after balance update</param>
/// <param name="xGenJnlLine">Previous version of journal line for comparison</param>
/// <param name="Balance">Current calculated balance amount</param>
/// <param name="TotalBalance">Total balance across all journal lines</param>
[IntegrationEvent(true, false)]
local procedure OnAfterUpdateBalance(var GenJnlLine: Record "Gen. Journal Line"; var xGenJnlLine: Record "Gen. Journal Line"; var Balance: Decimal; var TotalBalance: Decimal)
begin
end;
/// <summary>
/// Integration event raised during page opening before journal template selection processing.
/// Enables custom template selection logic and batch initialization.
/// </summary>
/// <param name="GenJournalLine">Journal line context for template selection</param>
/// <param name="JnlSelected">Indicates whether journal template has been selected</param>
/// <param name="CurrentJnlBatchName">Current journal batch name being processed</param>
/// <param name="IsHandled">Set to true to skip standard template selection logic</param>
[IntegrationEvent(false, false)]
local procedure OnOnOpenPageOnBeforeTemplateSelection(var GenJournalLine: Record "Gen. Journal Line"; var JnlSelected: Boolean; CurrentJnlBatchName: Code[10]; var IsHandled: Boolean)
begin
end;
/// <summary>
/// Integration event raised before balance calculation update on cash receipt journal lines.
/// Enables custom balance calculation override and validation logic.
/// </summary>
/// <param name="GenJournalLine">Current journal line for balance calculation</param>
/// <param name="xGenJournalLine">Previous version of journal line for comparison</param>
/// <param name="Balance">Balance amount for modification</param>
/// <param name="TotalBalance">Total balance for modification</param>
/// <param name="ShowBalance">Controls balance display visibility</param>
/// <param name="ShowTotalBalance">Controls total balance display visibility</param>
/// <param name="IsHandled">Set to true to skip standard balance calculation</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeUpdateBalance(var GenJournalLine: Record "Gen. Journal Line"; var xGenJournalLine: Record "Gen. Journal Line"; var Balance: Decimal; var TotalBalance: Decimal; var ShowBalance: Boolean; var ShowTotalBalance: Boolean; var IsHandled: Boolean)
begin
end;
}