Table 560 VAT Clause
- App
- Base Application
- Namespace
- Microsoft.Finance.VAT.Clause
- Versions
- 17-28
Fields, 5Keys, 1Procedures, 3Events, 8Obsolete, 2
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Finance/VAT/Clause/VATClause.Table.al420 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.VAT.Clause;
using Microsoft.Finance.VAT.Setup;
using Microsoft.Foundation.Company;
using Microsoft.Foundation.ExtendedText;
using Microsoft.Sales.Document;
using Microsoft.Sales.FinanceCharge;
using Microsoft.Sales.History;
using Microsoft.Sales.Reminder;
using System.Reflection;
/// <summary>
/// Stores VAT clause definitions for including explanatory text on VAT-related documents.
/// Supports multilingual translations and document-type-specific variations for compliance with VAT reporting requirements.
/// </summary>
/// <remarks>
/// Primary table for VAT clause management with extended text support and language translation capabilities.
/// Integrates with sales documents, invoices, credit memos, reminders, and finance charge memos for regulatory compliance.
/// Extensibility: Translation management, extended text integration, and custom VAT clause processing events.
/// </remarks>
table 560 "VAT Clause"
{
Caption = 'VAT Clause';
DrillDownPageID = "VAT Clauses";
LookupPageID = "VAT Clauses";
DataClassification = CustomerContent;
fields
{
/// <summary>
/// Unique identifier for the VAT clause used for referencing in VAT posting setup and documents.
/// </summary>
field(1; "Code"; Code[20])
{
Caption = 'Code';
ToolTip = 'Specifies the code for a VAT clause, which is used to provide a VAT description associated with a sales line on a sales invoice, credit memo, or other sales document.';
NotBlank = true;
}
/// <summary>
/// Primary description text of the VAT clause displayed on documents and reports.
/// </summary>
field(2; Description; Text[250])
{
Caption = 'Description';
ToolTip = 'Specifies the descriptive text that is associated with a VAT clause.';
}
/// <summary>
/// Additional description text providing extended information about the VAT clause requirements.
/// </summary>
field(3; "Description 2"; Text[250])
{
Caption = 'Description 2';
ToolTip = 'Specifies an additional description of a VAT clause.';
}
/// <summary>
/// Timestamp indicating when the VAT clause record was last modified for audit and synchronization purposes.
/// </summary>
field(10; "Last Modified DateTime"; DateTime)
{
Caption = 'Last Modified DateTime';
Editable = false;
}
}
keys
{
key(Key1; "Code")
{
Clustered = true;
}
}
fieldgroups
{
}
trigger OnDelete()
var
VATClauseTranslation: Record "VAT Clause Translation";
VATPostingSetup: Record "VAT Posting Setup";
begin
VATClauseTranslation.SetRange("VAT Clause Code", Code);
VATClauseTranslation.DeleteAll();
VATPostingSetup.SetRange("VAT Clause Code", Code);
VATPostingSetup.ModifyAll("VAT Clause Code", '');
end;
trigger OnInsert()
begin
SetLastModifiedDateTime();
end;
trigger OnModify()
begin
SetLastModifiedDateTime();
end;
trigger OnRename()
begin
SetLastModifiedDateTime();
end;
local procedure SetLastModifiedDateTime()
begin
"Last Modified DateTime" := CurrentDateTime;
end;
/// <summary>
/// Translates VAT clause description to the specified language using translation table lookup.
/// Updates the current record's description fields with translated text if available.
/// </summary>
/// <param name="Language">Language code for the desired translation</param>
procedure TranslateDescription(Language: Code[10])
var
VATClauseTranslation: Record "VAT Clause Translation";
begin
if VATClauseTranslation.Get(Code, Language) then
FillDescriptions(VATClauseTranslation.Description, VATClauseTranslation."Description 2");
end;
local procedure TryFindDescriptionByDocumentType(DocumentType: Enum "VAT Clause Document Type"; LanguageCode: Code[10]): Boolean
var
VATClauseByDocType: Record "VAT Clause by Doc. Type";
VATClauseByDocTypeTrans: Record "VAT Clause by Doc. Type Trans.";
begin
if VATClauseByDocTypeTrans.get(Code, DocumentType, LanguageCode) then begin
FillDescriptions(VATClauseByDocTypeTrans.Description, VATClauseByDocTypeTrans."Description 2");
exit(true);
end;
if VATClauseByDocType.get(Code, DocumentType) then begin
FillDescriptions(VATClauseByDocType.Description, VATClauseByDocType."Description 2");
exit(true);
end;
end;
/// <summary>
/// Retrieves the complete description text for the VAT clause based on the related document context.
/// Attempts extended text lookup first, then document-type-specific descriptions, and finally standard translations.
/// </summary>
/// <param name="RecRelatedVariant">Related document record variant for context determination</param>
/// <returns>Complete description text for the VAT clause based on document context and language</returns>
procedure GetDescriptionText(RecRelatedVariant: Variant) Result: Text
var
DocumentType: Enum "VAT Clause Document Type";
LanguageCode: Code[10];
begin
Result := GetDescriptionByExtendedText(RecRelatedVariant);
if Result <> '' then
exit(Result);
if GetDocumentTypeAndLanguageCode(RecRelatedVariant, DocumentType, LanguageCode) then begin
if not TryFindDescriptionByDocumentType(DocumentType, LanguageCode) then
TranslateDescription(LanguageCode);
exit(Description + ' ' + "Description 2");
end;
OnAfterGetDescription(Rec, DocumentType, LanguageCode);
exit(Description + ' ' + "Description 2");
end;
local procedure GetDescriptionByExtendedText(RecRelatedVariant: Variant) Result: Text
var
ExtendedTextHeader: Record "Extended Text Header";
TempExtendedTextLine: Record "Extended Text Line" temporary;
SalesHeader: Record "Sales Header";
SalesInvoiceHeader: Record "Sales Invoice Header";
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
IssuedFinChargeMemoHeader: Record "Issued Fin. Charge Memo Header";
IssuedReminderHeader: Record "Issued Reminder Header";
DataTypeManagement: Codeunit "Data Type Management";
TransferExtendedText: Codeunit "Transfer Extended Text";
RecRef: RecordRef;
LanguageCode: Code[10];
DocDate: Date;
IsHandled: Boolean;
begin
if not DataTypeManagement.GetRecordRef(RecRelatedVariant, RecRef) then
exit;
ExtendedTextHeader.SetRange("Table Name", ExtendedTextHeader."Table Name"::"VAT Clause");
ExtendedTextHeader.SetRange("No.", Code);
IsHandled := false;
OnFilterExtendedTextHeaderFromDoc(RecRelatedVariant, ExtendedTextHeader, IsHandled, LanguageCode, DocDate, RecRef);
if not IsHandled then
case RecRef.Number of
DATABASE::"Sales Header":
begin
RecRef.SetTable(SalesHeader);
case SalesHeader."Document Type" of
SalesHeader."Document Type"::"Blanket Order":
ExtendedTextHeader.SetRange("Sales Blanket Order", true);
SalesHeader."Document Type"::"Credit Memo":
ExtendedTextHeader.SetRange("Sales Credit Memo", true);
SalesHeader."Document Type"::Invoice:
ExtendedTextHeader.SetRange("Sales Invoice", true);
SalesHeader."Document Type"::Order:
ExtendedTextHeader.SetRange("Sales Order", true);
SalesHeader."Document Type"::Quote:
ExtendedTextHeader.SetRange("Sales Quote", true);
SalesHeader."Document Type"::"Return Order":
ExtendedTextHeader.SetRange("Sales Return Order", true);
end;
LanguageCode := SalesHeader."Language Code";
DocDate := SalesHeader."Document Date";
end;
DATABASE::"Sales Invoice Header":
begin
RecRef.SetTable(SalesInvoiceHeader);
ExtendedTextHeader.SetRange("Sales Invoice", true);
LanguageCode := SalesInvoiceHeader."Language Code";
DocDate := SalesInvoiceHeader."Document Date";
end;
DATABASE::"Sales Cr.Memo Header":
begin
RecRef.SetTable(SalesCrMemoHeader);
ExtendedTextHeader.SetRange("Sales Credit Memo", true);
LanguageCode := SalesCrMemoHeader."Language Code";
DocDate := SalesCrMemoHeader."Document Date";
end;
DATABASE::"Issued Fin. Charge Memo Header":
begin
RecRef.SetTable(IssuedFinChargeMemoHeader);
ExtendedTextHeader.SetRange("Finance Charge Memo", true);
LanguageCode := IssuedFinChargeMemoHeader."Language Code";
DocDate := IssuedFinChargeMemoHeader."Document Date";
end;
DATABASE::"Issued Reminder Header":
begin
RecRef.SetTable(IssuedReminderHeader);
ExtendedTextHeader.SetRange(Reminder, true);
LanguageCode := IssuedReminderHeader."Language Code";
DocDate := IssuedReminderHeader."Document Date";
end;
else
exit;
end;
OnGetDescriptionByExtendedTextOnBeforeReadExtTextLines(Rec, RecRef, ExtendedTextHeader, LanguageCode, DocDate, RecRelatedVariant);
if not TransferExtendedText.ReadExtTextLines(ExtendedTextHeader, DocDate, LanguageCode) then
exit;
TransferExtendedText.GetTempExtTextLine(TempExtendedTextLine);
OnGetDescriptionByExtendedTextOnAfterGetTempExtTextLine(Rec, RecRelatedVariant, ExtendedTextHeader, LanguageCode, DocDate, TempExtendedTextLine, Result);
if not TempExtendedTextLine.FindSet() then
exit;
repeat
if Result <> '' then
Result += ' ';
Result += TempExtendedTextLine.Text;
until TempExtendedTextLine.Next() = 0;
end;
local procedure GetDocumentTypeAndLanguageCode(RecRelatedVariant: Variant; var DocumentType: Enum "VAT Clause Document Type"; var LanguageCode: Code[10]) Result: Boolean
var
SalesHeader: Record "Sales Header";
SalesInvoiceHeader: Record "Sales Invoice Header";
SalesCrMemoHeader: Record "Sales Cr.Memo Header";
IssuedFinChargeMemoHeader: Record "Issued Fin. Charge Memo Header";
IssuedReminderHeader: Record "Issued Reminder Header";
DataTypeManagement: Codeunit "Data Type Management";
CompanyInformationMgt: Codeunit "Company Information Mgt.";
RecRef: RecordRef;
IsHandled: Boolean;
begin
if not DataTypeManagement.GetRecordRef(RecRelatedVariant, RecRef) then
exit(false);
case RecRef.Number of
database::"Sales Header":
begin
RecRef.SetTable(SalesHeader);
if SalesHeader."Document Type" in [SalesHeader."Document Type"::"Credit Memo", SalesHeader."Document Type"::"Return Order"] then
DocumentType := DocumentType::"Credit Memo"
else
DocumentType := DocumentType::Invoice;
LanguageCode := SalesHeader."Language Code";
Result := true;
end;
database::"Sales Invoice Header":
begin
RecRef.SetTable(SalesInvoiceHeader);
DocumentType := DocumentType::Invoice;
LanguageCode := SalesInvoiceHeader."Language Code";
Result := true;
end;
database::"Sales Cr.Memo Header":
begin
RecRef.SetTable(SalesCrMemoHeader);
DocumentType := DocumentType::"Credit Memo";
LanguageCode := SalesCrMemoHeader."Language Code";
Result := true;
end;
database::"Issued Fin. Charge Memo Header":
begin
RecRef.SetTable(IssuedFinChargeMemoHeader);
DocumentType := DocumentType::"Finance Charge Memo";
LanguageCode := IssuedFinChargeMemoHeader."Language Code";
Result := true;
end;
database::"Issued Reminder Header":
begin
RecRef.SetTable(IssuedReminderHeader);
DocumentType := DocumentType::Reminder;
LanguageCode := IssuedReminderHeader."Language Code";
Result := true;
end;
else begin
IsHandled := false;
OnGetDocumentTypeAndLanguageCode(Rec, RecRelatedVariant, DocumentType, LanguageCode, IsHandled);
Result := IsHandled;
end;
end;
CompanyInformationMgt.GetLanguageDefault(LanguageCode);
OnAfterGetDocumentTypeAndLanguageCode(Rec, RecRelatedVariant, RecRef, DocumentType, LanguageCode, Result);
end;
local procedure FillDescriptions(NewDescription: Text[250]; NewDescription2: Text[250])
begin
if NewDescription <> '' then
Description := NewDescription;
if NewDescription2 <> '' then
"Description 2" := NewDescription2;
end;
/// <summary>
/// Integration event raised after retrieving VAT clause description for custom processing or modification.
/// Enables customization of VAT clause description based on document type and language context.
/// </summary>
/// <param name="VATClause">VAT clause record with description data</param>
/// <param name="DocumentType">Document type for context-specific processing</param>
/// <param name="LanguageCode">Language code for localization</param>
[IntegrationEvent(false, false)]
local procedure OnAfterGetDescription(var VATClause: Record "VAT Clause"; DocumentType: Enum "VAT Clause Document Type"; LanguageCode: Code[10])
begin
end;
/// <summary>
/// Integration event raised after determining document type and language code from related record context.
/// Enables custom logic for document type and language determination based on record relationships.
/// </summary>
/// <param name="VATClause">VAT clause record being processed</param>
/// <param name="RecRelatedVariant">Related record variant for context</param>
/// <param name="RecRef">Record reference for type identification</param>
/// <param name="DocumentType">Determined document type for VAT clause processing</param>
/// <param name="LanguageCode">Determined language code for translation</param>
/// <param name="Result">Whether document type and language code were successfully determined</param>
[IntegrationEvent(false, false)]
local procedure OnAfterGetDocumentTypeAndLanguageCode(VATClause: Record "VAT Clause"; RecRelatedVariant: Variant; RecRef: RecordRef; var DocumentType: Enum "VAT Clause Document Type"; var LanguageCode: Code[10]; var Result: Boolean)
begin
end;
/// <summary>
/// Integration event raised after retrieving extended text lines for VAT clause description customization.
/// Enables modification of extended text content based on document context and requirements.
/// </summary>
/// <param name="VATClause">VAT clause record being processed</param>
/// <param name="RecRelatedVariant">Related record variant for context</param>
/// <param name="ExtendedTextHeader">Extended text header for filtering</param>
/// <param name="LanguageCode">Language code for text retrieval</param>
/// <param name="DocDate">Document date for extended text filtering</param>
/// <param name="TempExtendedTextLine">Temporary extended text lines for modification</param>
/// <param name="Result">Resulting description text from extended text processing</param>
[IntegrationEvent(false, false)]
local procedure OnGetDescriptionByExtendedTextOnAfterGetTempExtTextLine(VATClause: Record "VAT Clause"; RecRelatedVariant: Variant; var ExtendedTextHeader: Record "Extended Text Header"; LanguageCode: Code[10]; DocDate: Date; var TempExtendedTextLine: Record "Extended Text Line" temporary; var Result: Text)
begin
end;
/// <summary>
/// Integration event raised when determining document type and language code from related record context.
/// Enables custom document type and language code determination for unsupported record types.
/// </summary>
/// <param name="VATClause">VAT clause record being processed</param>
/// <param name="RecRelatedVariant">Related record variant for context analysis</param>
/// <param name="DocumentType">Document type to be determined</param>
/// <param name="LanguageCode">Language code to be determined</param>
/// <param name="IsHandled">Set to true if custom logic handles the determination</param>
[IntegrationEvent(false, false)]
local procedure OnGetDocumentTypeAndLanguageCode(VATClause: Record "VAT Clause"; RecRelatedVariant: Variant; var DocumentType: Enum "VAT Clause Document Type"; var LanguageCode: Code[10]; var IsHandled: Boolean)
begin
end;
/// <summary>
/// Integration event raised when filtering extended text headers based on document context.
/// Enables custom extended text filtering logic for document-specific requirements.
/// </summary>
/// <param name="RecRelatedVariant">Related record variant for filtering context</param>
/// <param name="ExtendedTextHeader">Extended text header record for filtering</param>
/// <param name="IsHandled">Set to true if custom filtering logic is applied</param>
/// <param name="LanguageCode">Language code for extended text filtering</param>
/// <param name="DocDate">Document date for extended text date filtering</param>
/// <param name="RecordRef">Record reference for type identification</param>
[IntegrationEvent(false, false)]
local procedure OnFilterExtendedTextHeaderFromDoc(RecRelatedVariant: Variant; var ExtendedTextHeader: Record "Extended Text Header"; var IsHandled: Boolean; var LanguageCode: Code[10]; var DocDate: Date; RecordRef: RecordRef)
begin
end;
/// <summary>
/// Integration event raised before reading extended text lines for VAT clause description processing.
/// Enables preprocessing of extended text parameters and customization of text retrieval logic.
/// </summary>
/// <param name="VATClause">VAT clause record being processed</param>
/// <param name="RelatedRecordRef">Related record reference for context</param>
/// <param name="ExtendedTextHeader">Extended text header for processing</param>
/// <param name="LanguageCode">Language code for text retrieval</param>
/// <param name="DocDate">Document date for extended text filtering</param>
/// <param name="RecRelatedVariant">Related record variant for additional context</param>
[IntegrationEvent(false, false)]
local procedure OnGetDescriptionByExtendedTextOnBeforeReadExtTextLines(var VATClause: Record "VAT Clause"; var RelatedRecordRef: RecordRef; var ExtendedTextHeader: Record "Extended Text Header"; var LanguageCode: Code[10]; var DocDate: Date; RecRelatedVariant: Variant)
begin
end;
}