Table 276 Bank Account Statement Line
- App
- Base Application
- Namespace
- Microsoft.Bank.Statement
- Versions
- 17-28
Fields, 14Keys, 1Procedures, 3Events, 3
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Bank/Statement/BankAccountStatementLine.Table.al278 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.Statement;
using Microsoft.Bank.BankAccount;
using Microsoft.Bank.Check;
using Microsoft.Bank.Ledger;
using Microsoft.Bank.Reconciliation;
/// <summary>
/// Stores individual transaction lines from imported bank statements.
/// Contains detailed transaction data used for bank reconciliation and application to ledger entries.
/// </summary>
/// <remarks>
/// Links to Bank Account Statement for header information and provides detailed transaction data.
/// Supports application to Bank Account Ledger Entries and Check Ledger Entries through Type field.
/// Integrates with bank reconciliation matching algorithms for automated transaction processing.
/// </remarks>
table 276 "Bank Account Statement Line"
{
Caption = 'Bank Account Statement Line';
DataClassification = CustomerContent;
fields
{
/// <summary>
/// Specifies the number of the bank account that this statement line belongs to.
/// </summary>
field(1; "Bank Account No."; Code[20])
{
Caption = 'Bank Account No.';
TableRelation = "Bank Account";
}
/// <summary>
/// Specifies the statement number that this line belongs to.
/// </summary>
field(2; "Statement No."; Code[20])
{
Caption = 'Statement No.';
TableRelation = "Bank Account Statement"."Statement No." where("Bank Account No." = field("Bank Account No."));
}
/// <summary>
/// Specifies the line number of this statement line within the bank statement.
/// </summary>
field(3; "Statement Line No."; Integer)
{
Caption = 'Statement Line No.';
}
/// <summary>
/// Specifies the document number for this statement line transaction.
/// </summary>
field(4; "Document No."; Code[20])
{
Caption = 'Document No.';
ToolTip = 'Specifies the document number of this line.';
}
/// <summary>
/// Specifies the date when the transaction occurred.
/// </summary>
field(5; "Transaction Date"; Date)
{
Caption = 'Transaction Date';
ToolTip = 'Specifies the posting date of the bank account or check ledger entry that the transaction on this line has been applied to.';
}
/// <summary>
/// Specifies the description of the transaction as it appears on the bank statement.
/// </summary>
field(6; Description; Text[100])
{
Caption = 'Description';
ToolTip = 'Specifies a description for the transaction on this line.';
}
/// <summary>
/// Specifies the amount of the transaction as it appears on the bank statement.
/// </summary>
field(7; "Statement Amount"; Decimal)
{
AutoFormatExpression = GetCurrencyCode();
AutoFormatType = 1;
Caption = 'Statement Amount';
ToolTip = 'Specifies the amount of the transaction on the bank''s statement on this line.';
}
/// <summary>
/// Specifies the difference between the statement amount and the applied amount.
/// </summary>
field(8; Difference; Decimal)
{
AutoFormatExpression = GetCurrencyCode();
AutoFormatType = 1;
Caption = 'Difference';
ToolTip = 'Specifies the difference between the amount in the Statement Amount field and Applied Amount field on this line.';
}
/// <summary>
/// Specifies the total amount applied to this statement line from bank account ledger entries.
/// </summary>
field(9; "Applied Amount"; Decimal)
{
AutoFormatExpression = GetCurrencyCode();
AutoFormatType = 1;
Caption = 'Applied Amount';
ToolTip = 'Specifies the amount on the bank account or check ledger entry that the transaction on this line has been applied to.';
Editable = false;
}
/// <summary>
/// Specifies the type of entry that is applied to this statement line.
/// </summary>
field(10; Type; Enum "Bank Acc. Statement Line Type")
{
Caption = 'Type';
ToolTip = 'Specifies the type of ledger entry, or a difference that has been reconciled with the transaction on the bank''s statement on this line.';
}
/// <summary>
/// Specifies the number of entries that have been applied to this statement line.
/// </summary>
field(11; "Applied Entries"; Integer)
{
Caption = 'Applied Entries';
ToolTip = 'Specifies whether the transaction on this line has been applied to one or more ledger entries.';
Editable = false;
}
/// <summary>
/// Specifies the value date of the transaction as it appears on the bank statement.
/// </summary>
field(12; "Value Date"; Date)
{
Caption = 'Value Date';
ToolTip = 'Specifies the value date of the transaction on this line.';
}
/// <summary>
/// Specifies the check number if the transaction is a check payment.
/// </summary>
field(14; "Check No."; Code[20])
{
AccessByPermission = TableData "Check Ledger Entry" = R;
Caption = 'Check No.';
ToolTip = 'Specifies the check number for the transaction on this line.';
}
/// <summary>
/// Specifies the unique transaction identifier from the bank statement.
/// </summary>
field(70; "Transaction ID"; Text[50])
{
Caption = 'Transaction ID';
}
}
keys
{
key(Key1; "Bank Account No.", "Statement No.", "Statement Line No.")
{
Clustered = true;
}
}
fieldgroups
{
}
trigger OnRename()
begin
Error(CannotRenameErr, TableCaption);
end;
var
BankAccLedgEntry: Record "Bank Account Ledger Entry";
CheckLedgEntry: Record "Check Ledger Entry";
#pragma warning disable AA0470
CannotRenameErr: Label 'You cannot rename a %1.';
#pragma warning restore AA0470
/// <summary>
/// Displays the entries that have been applied to this statement line.
/// Shows either bank account ledger entries or check ledger entries based on the Type field.
/// </summary>
procedure DisplayApplication()
var
BankAccRecMatchBuffer: Record "Bank Acc. Rec. Match Buffer";
begin
case Type of
Type::"Bank Account Ledger Entry":
begin
BankAccLedgEntry.Reset();
BankAccLedgEntry.SetCurrentKey("Bank Account No.", Open);
BankAccLedgEntry.SetRange("Bank Account No.", "Bank Account No.");
BankAccLedgEntry.SetRange(Open, false);
BankAccLedgEntry.SetRange("Statement Status", BankAccLedgEntry."Statement Status"::Closed);
BankAccLedgEntry.SetRange("Statement No.", "Statement No.");
BankAccRecMatchBuffer.SetRange("Bank Account No.", "Bank Account No.");
BankAccRecMatchBuffer.SetRange("Statement No.", "Statement No.");
BankAccRecMatchBuffer.SetRange("Statement Line No.", "Statement Line No.");
if BankAccRecMatchBuffer.FindFirst() then
BankAccLedgEntry.SetRange("Entry No.", BankAccRecMatchBuffer."Ledger Entry No.")
else
BankAccLedgEntry.SetRange("Statement Line No.", "Statement Line No.");
OnDisplayApplicationOnAfterBankAccLedgEntrySetFilters(Rec, BankAccLedgEntry);
PAGE.Run(0, BankAccLedgEntry);
end;
Type::"Check Ledger Entry":
begin
CheckLedgEntry.Reset();
CheckLedgEntry.SetCurrentKey("Bank Account No.", Open);
CheckLedgEntry.SetRange("Bank Account No.", "Bank Account No.");
CheckLedgEntry.SetRange(Open, false);
CheckLedgEntry.SetRange("Statement Status", CheckLedgEntry."Statement Status"::Closed);
CheckLedgEntry.SetRange("Statement No.", "Statement No.");
CheckLedgEntry.SetRange("Statement Line No.", "Statement Line No.");
OnDisplayApplicationOnAfterCheckLedgEntrySetFilters(Rec, CheckLedgEntry);
PAGE.Run(0, CheckLedgEntry);
end;
end;
OnAfterDisplayApplication(Rec);
end;
/// <summary>
/// Gets the currency code for the bank account.
/// </summary>
/// <returns>The currency code of the bank account, or an empty string if not found.</returns>
procedure GetCurrencyCode(): Code[10]
var
BankAcc: Record "Bank Account";
begin
if "Bank Account No." = BankAcc."No." then
exit(BankAcc."Currency Code");
if BankAcc.Get("Bank Account No.") then
exit(BankAcc."Currency Code");
exit('');
end;
/// <summary>
/// Filters the match buffer to show many-to-one matches for this statement line.
/// </summary>
/// <param name="BankAccRecMatchBuffer">The bank account reconciliation match buffer to filter.</param>
procedure FilterManyToOneMatches(var BankAccRecMatchBuffer: Record "Bank Acc. Rec. Match Buffer")
begin
BankAccRecMatchBuffer.SetRange("Statement No.", Rec."Statement No.");
BankAccRecMatchBuffer.SetRange("Bank Account No.", Rec."Bank Account No.");
BankAccRecMatchBuffer.SetRange("Statement Line No.", Rec."Statement Line No.");
end;
/// <summary>
/// Integration event raised after displaying applied entries for a bank account statement line.
/// </summary>
/// <param name="BankAccountStatementLine">The bank account statement line for which applications are displayed.</param>
[IntegrationEvent(false, false)]
local procedure OnAfterDisplayApplication(var BankAccountStatementLine: Record "Bank Account Statement Line")
begin
end;
/// <summary>
/// Integration event raised after setting filters on bank account ledger entries during application display.
/// </summary>
/// <param name="BankAccountStatementLine">The bank account statement line being processed.</param>
/// <param name="BankAccLedgEntry">The bank account ledger entry record with applied filters.</param>
[IntegrationEvent(false, false)]
local procedure OnDisplayApplicationOnAfterBankAccLedgEntrySetFilters(var BankAccountStatementLine: Record "Bank Account Statement Line"; var BankAccLedgEntry: Record "Bank Account Ledger Entry")
begin
end;
/// <summary>
/// Integration event raised after setting filters on check ledger entries during application display.
/// </summary>
/// <param name="BankAccountStatementLine">The bank account statement line being processed.</param>
/// <param name="CheckLedgEntry">The check ledger entry record with applied filters.</param>
[IntegrationEvent(false, false)]
local procedure OnDisplayApplicationOnAfterCheckLedgEntrySetFilters(var BankAccountStatementLine: Record "Bank Account Statement Line"; var CheckLedgEntry: Record "Check Ledger Entry")
begin
end;
}