---
id: object/table/290
type: object
title: Table 290 "VAT Amount Line"
summary: Table 290 "VAT Amount Line" in Base Application (Microsoft.Finance.VAT.Calculation). 27 fields, 25 public procedures, 29 events. Present since at least BC23, still in BC30, changed in BC24-29.
tier: official
language: en
tags:
  - table
  - base application
versions:
  introduced: null
  last_changed: "29"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: d6360d2deb23eeb5e8e19155720c1045d90b6c4a7b76412100ace8747937ebf5
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/VAT/Calculation/VATAmountLine.Table.al
    title: src/Layers/W1/BaseApp/Finance/VAT/Calculation/VATAmountLine.Table.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
links:
  learn:
    - https://learn.microsoft.com/dynamics365/business-central/finance-how-report-vat
    - https://learn.microsoft.com/dynamics365/business-central/finance-how-use-non-deductible-vat
  objects: []
  features: []
  topics:
    - topic/business-central/business-functionality/finance/closing-years-and-periods
    - topic/business-central/business-functionality/finance/working-with-value-added-tax-vat
  localizations:
    - localization/au
    - localization/be
    - localization/ca
    - localization/es
    - localization/gb
    - localization/it
    - localization/mx
    - localization/nz
    - localization/ru
    - localization/us
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/10381
object_type: table
object_id: 290
name: VAT Amount Line
namespace: Microsoft.Finance.VAT.Calculation
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
source_major: "29"
obsolete: null
countries:
  - au
  - be
  - ca
  - es
  - gb
  - it
  - mx
  - nz
  - ru
  - us
ms_search_form_ids: []
counts:
  fields: 27
  procedures: 59
  events: 29
  subscribers: 0
relations:
  out: 2
  referenced_by: 0
  pages: 2
  extended_by: 1
  event_subscribers: 0
  calls: 2
  called_by: 0
  implements: 0
---

# Table 290 "VAT Amount Line"

> Table 290 "VAT Amount Line" in Base Application (Microsoft.Finance.VAT.Calculation). 27 fields, 25 public procedures, 29 events. Present since at least BC23, still in BC30, changed in BC24-29.

Base Application · Microsoft.Finance.VAT.Calculation · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/Finance/VAT/Calculation/VATAmountLine.Table.al) · facts from BC29

Learn documents this table through its pages: [Page 9401 "VAT Amount Lines"](../page/9401.md) (2 Learn pages).

## Properties

| Property | Value |
|---|---|
| Caption | VAT Amount Line |
| TableType | Temporary |
| DataClassification | CustomerContent |

## Fields

Explanation: the field's ToolTip in the code; without one, the ToolTip of a page control bound to the field (marked via the page); without that, its Caption (marked caption) when that differs from the name.

| No. | Name | Type | Explanation | Notes |
|---|---|---|---|---|
| 1 | VAT % | Decimal | Specifies the VAT % that was used on the sales or purchase lines with this VAT Identifier. | not editable |
| 2 | VAT Base | Decimal | Specifies the total net amount (amount excluding VAT) for sales or purchase lines with a specific VAT Identifier. | not editable |
| 3 | VAT Amount | Decimal | Specifies the amount of VAT that is included in the total amount. |  |
| 4 | Amount Including VAT | Decimal | Specifies the net amount, including VAT, for this line. | not editable |
| 5 | VAT Identifier | Code[20] | Specifies the VAT Identifier value. | not editable |
| 6 | Line Amount | Decimal | Specifies the total amount for sales or purchase lines with a specific VAT identifier. | not editable |
| 7 | Inv. Disc. Base Amount | Decimal | Specifies the invoice discount base amount. | not editable |
| 8 | Invoice Discount Amount | Decimal | Specifies the invoice discount amount for a specific VAT identifier. |  |
| 9 | VAT Calculation Type | Enum "Tax Calculation Type" | Specifies how VAT will be calculated for purchases or sales of items with this particular combination of VAT business posting group and VAT product posting group. | enum [Enum 254 "Tax Calculation Type"](../enum/254.md); not editable |
| 10 | Tax Group Code | Code[20] | — | TableRelation [Table 321 "Tax Group"](../table/321.md) (Tax Group); not editable |
| 11 | Quantity | Decimal | — | not editable |
| 12 | Modified | Boolean | — |  |
| 13 | Use Tax | Boolean | — |  |
| 14 | Calculated VAT Amount | Decimal | Specifies the calculated VAT amount and is only used for reference when the user changes the VAT Amount manually. | not editable |
| 15 | VAT Difference | Decimal | Specifies the difference between the calculated VAT amount and a VAT amount that you have entered manually. | not editable |
| 16 | Positive | Boolean | — |  |
| 17 | Includes Prepayment | Boolean | — |  |
| 18 | VAT Clause Code | Code[20] | — | TableRelation [Table 560 "VAT Clause"](../table/560.md) (VAT Clause) |
| 19 | Tax Category | Code[10] | — |  |
| 20 | Pmt. Discount Amount | Decimal | — | not editable |
| 6200 | Non-Deductible VAT % | Decimal | — | not editable |
| 6201 | Non-Deductible VAT Base | Decimal | Specifies the amount of the transaction for which VAT is not applied due to the type of goods or services purchased. | not editable |
| 6202 | Non-Deductible VAT Amount | Decimal | Specifies the amount of VAT that is not deducted due to the type of goods or services purchased. |  |
| 6203 | Calc. Non-Ded. VAT Amount | Decimal | Specifies the calculated Non-Deductible VAT amount and is only used for reference when the user changes the Non-Deductible VAT Amount manually. | not editable |
| 6204 | Deductible VAT Base | Decimal | Specifies the amount of the transaction for which VAT is applied due to the type of goods or services purchased. | not editable |
| 6205 | Deductible VAT Amount | Decimal | Specifies the amount of VAT that is deducted due to the type of goods or services purchased. | not editable |
| 6206 | Non-Deductible VAT Diff. | Decimal | Non-Deductible VAT Difference <small>caption</small> | not editable |

## Keys

- Key1: VAT Identifier, VAT Calculation Type, Tax Group Code, Use Tax, Positive (clustered)

## Events published

- `OnAfterCalcLineAmount(var VATAmountLine: Record "VAT Amount Line"; var LineAmount: Decimal)` (integration)
- `OnAfterCheckVATDifference(VATAmountLine: Record "VAT Amount Line"; NewCurrencyCode: Code[10]; NewAllowVATDifference: Boolean)` (integration)
- `OnAfterCopyFromPurchInvLine(var VATAmountLine: Record "VAT Amount Line"; PurchInvLine: Record "Purch. Inv. Line")` (integration)
- `OnAfterCopyFromPurchCrMemoLine(var VATAmountLine: Record "VAT Amount Line"; PurchCrMemoLine: Record "Purch. Cr. Memo Line")` (integration)
- `OnAfterCopyFromSalesInvLine(var VATAmountLine: Record "VAT Amount Line"; SalesInvoiceLine: Record "Sales Invoice Line")` (integration)
- `OnAfterCopyFromSalesCrMemoLine(var VATAmountLine: Record "VAT Amount Line"; SalesCrMemoLine: Record "Sales Cr.Memo Line")` (integration)
- `OnAfterSalesTaxCalculateCalculateTax(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; TaxAreaCode: Code[20]; TaxLiable: Boolean; PostingDate: Date; CurrencyFactor: Decimal)` (integration)
- `OnAfterSalesTaxCalculateReverseCalculateTax(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; TaxAreaCode: Code[20]; TaxLiable: Boolean; PostingDate: Date; CurrencyFactor: Decimal)` (integration)
- `OnAfterVATAmountText(VATPercentage: Decimal; FullCount: Integer; var Result: Text[30])` (integration)
- `OnBeforeGetTotalVATAmount(var VATAmountLine: Record "VAT Amount Line"; var VATAmount: Decimal; var IsHandled: Boolean)` (integration)
- `OnInsertLineOnAfterValidatePositive(var VATAmountLine: Record "VAT Amount Line")` (integration)
- `OnInsertLineOnBeforeInsert(var VATAmountLine: Record "VAT Amount Line"; var FromVATAmountLine: Record "VAT Amount Line")` (integration)
- `OnInsertLineOnBeforeModify(var VATAmountLine: Record "VAT Amount Line"; FromVATAmountLine: Record "VAT Amount Line")` (integration)
- `OnInsertLine(var VATAmountLine: Record "VAT Amount Line"; var IsHandled: Boolean; var Result: Boolean; var SkipZeroVatAmounts: Boolean)` (integration)
- `OnUpdateLinesOnAfterCalcVATAmount(var VATAmountLine: Record "VAT Amount Line"; PrevVATAmountLine: Record "VAT Amount Line"; var Currency: Record Currency; VATBaseDiscountPerc: Decimal; PricesIncludingVAT: Boolean)` (integration)
- `OnUpdateLinesOnAfterCalcAmountIncludingVATNormalVAT(var VATAmountLine: Record "VAT Amount Line"; PrevVATAmountLine: Record "VAT Amount Line"; var Currency: Record Currency; VATBaseDiscountPerc: Decimal; PricesIncludingVAT: Boolean)` (integration)
- `OnUpdateLinesOnBeforeCalcSalesTaxVatBase(var VATAmountLine: Record "VAT Amount Line")` (integration)
- `OnUpdateLinesOnAfterCalcVATBase(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; PricesIncludingVAT: Boolean)` (integration)
- `OnUpdateLinesOnAfterCalcVATBaseSalesTax(var VATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; PricesIncludingVAT: Boolean)` (integration)
- `OnAfterCalcVATFields(var VATAmountLine: Record "VAT Amount Line"; NewPricesIncludingVAT: Boolean; NewVATBaseDiscPct: Decimal; Currency: Record Currency)` (integration)
- `OnBeforeCalcVATFields(var VATAmountLine: Record "VAT Amount Line"; var NewVATBaseDiscPct: Decimal)` (integration)
- `OnDeductVATAmountLineOnBeforeModify(var VATAmountLine: Record "VAT Amount Line"; VATAmountLineDeduct: Record "VAT Amount Line")` (integration)
- `OnBeforeGetVATBaseDiscountPerc(var VATAmountLine: Record "VAT Amount Line"; VATBaseDiscountPerc: Decimal; var NewVATBaseDiscountPerc: decimal; var IsHandled: Boolean)` (integration)
- `OnUpdateLinesOnAfterInitPrevVATAmountLine(var PrevVATAmountLine: Record "VAT Amount Line"; Currency: Record Currency; PricesIncludingVAT: Boolean; var VATBaseDiscountPerc: Decimal; var VATAmountLine: Record "VAT Amount Line")` (integration)
- `OnApplyNonDeductibleVATOnBeforeModify(var VATAmountLine: Record "VAT Amount Line"; NonDeductibleVAT: Decimal)` (integration)
- `OnCopyFromPurchInvLineOnAfterSetLineAmount(var VATAmountLine: Record "VAT Amount Line"; var PurchInvLine: Record "Purch. Inv. Line")` (integration)
- `OnCopyFromPurchCrMemoLineOnAfterSetLineAmount(var VATAmountLine: Record "VAT Amount Line"; var PurchCrMemoLine: Record "Purch. Cr. Memo Line")` (integration)
- `OnBeforeUpdateLines(var VATAmountLine: Record "VAT Amount Line"; var TotalVATAmount: Decimal; Currency: Record Currency; CurrencyFactor: Decimal; PricesIncludingVAT: Boolean; VATBaseDiscountPercHeader: Decimal; TaxAreaCode: Code[20]; TaxLiable: Boolean; PostingDate: Date; var IsHandled: Boolean)` (integration)
- `OnUpdateLinesOnAfterCalcPreVATAmountline(var VATAmountLine: Record "VAT Amount Line"; var PreVATAmountLine: Record "VAT Amount Line"; var Currency: Record Currency; VATBaseDiscountPerc: Decimal)` (integration)

## Procedures

- `CheckVATDifference(NewCurrencyCode: Code[10]; NewAllowVATDifference: Boolean)`: Validates VAT difference against maximum allowed VAT difference limits.
- `InsertLine(): Boolean`: Inserts or updates VAT amount line with calculated amounts, combining with existing line if found.
- `GetLine(Number: Integer)`: Retrieves VAT amount line by sequential number from the recordset.
- `VATAmountText(): Text[30]`: Generates descriptive text for VAT amount display based on VAT percentage.
- `GetTotalLineAmount(SubtractVAT: Boolean; CurrencyCode: Code[10]): Decimal`: Calculates total line amount across all VAT amount lines with optional VAT subtraction.
- `GetTotalVATAmount(): Decimal`: Calculates total VAT amount across all VAT amount lines in the recordset.
- `GetTotalInvDiscAmount(): Decimal`: Calculates total invoice discount amount across all VAT amount lines.
- `GetTotalInvDiscBaseAmount(SubtractVAT: Boolean; CurrencyCode: Code[10]): Decimal`: Calculates total invoice discount base amount with optional VAT subtraction.
- `GetTotalVATBase(): Decimal`: Calculates total VAT base amount across all VAT amount lines.
- `GetTotalAmountInclVAT(): Decimal`: Calculates total amount including VAT across all VAT amount lines.
- `GetTotalVATDiscount(CurrencyCode: Code[10]; NewPricesIncludingVAT: Boolean): Decimal`: Calculates total VAT discount amount based on rounding differences.
- `GetAnyLineModified(): Boolean`: Checks whether any VAT amount line has been manually modified.
- `SetInvoiceDiscountAmount(NewInvoiceDiscount: Decimal; NewCurrencyCode: Code[10]; NewPricesIncludingVAT: Boolean; NewVATBaseDiscPct: Decimal)`: Distributes invoice discount amount proportionally across VAT amount lines.
- `SetInvoiceDiscountPercent(NewInvoiceDiscountPct: Decimal; NewCurrencyCode: Code[10]; NewPricesIncludingVAT: Boolean; CalcInvDiscPerVATID: Boolean; NewVATBaseDiscPct: Decimal)`: Applies invoice discount percentage to VAT amount lines with proportional distribution.
- `CalcLineAmount(): Decimal`: Calculates line amount after subtracting invoice discount from original line amount.
- `CalcVATFields(NewCurrencyCode: Code[10]; NewPricesIncludingVAT: Boolean; NewVATBaseDiscPct: Decimal)`: Recalculates VAT amounts and VAT base based on current line amount and VAT parameters.
- `GetBaseLCY(PostingDate: Date; CurrencyCode: Code[10]; CurrencyFactor: Decimal): Decimal`: Converts VAT base amount from foreign currency to local currency using exchange rate.
- `GetAmountLCY(PostingDate: Date; CurrencyCode: Code[10]; CurrencyFactor: Decimal): Decimal`: Calculates VAT amount in local currency by converting from foreign currency.
- `DeductVATAmountLine(var VATAmountLineDeduct: Record "VAT Amount Line")`: Deducts amounts from current VAT amount lines using corresponding lines from another recordset.
- `ApplyNonDeductibleVAT(NonDeductibleVAT: Decimal)` (internal)
- `UpdateLines(var TotalVATAmount: Decimal; Currency: Record Currency; CurrencyFactor: Decimal; PricesIncludingVAT: Boolean; VATBaseDiscountPercHeader: Decimal; TaxAreaCode: Code[20]; TaxLiable: Boolean; PostingDate: Date)`: Updates VAT amount lines with calculated VAT amounts and totals based on currency, pricing settings, and tax configuration. Performs comprehensive VAT calculations including sales tax processing and currency conversions.
- `CopyFromPurchInvLine(PurchInvLine: Record "Purch. Inv. Line")`: Copies VAT-related fields from posted purchase invoice line to create VAT amount line for analysis or reporting.
- `CopyFromPurchCrMemoLine(PurchCrMemoLine: Record "Purch. Cr. Memo Line")`: Copies VAT-related fields from posted purchase credit memo line to create VAT amount line for analysis or reporting.
- `CopyFromSalesInvLine(SalesInvoiceLine: Record "Sales Invoice Line")`: Copies VAT-related fields from posted sales invoice line to create VAT amount line for analysis or reporting.
- `CopyFromSalesCrMemoLine(SalesCrMemoLine: Record "Sales Cr.Memo Line")`: Copies VAT-related fields from posted sales credit memo line to create VAT amount line for analysis or reporting.

Plus 5 local procedures.

## Relations

- Tax Group Code: TableRelation [Table 321 "Tax Group"](../table/321.md)
- VAT Clause Code: TableRelation [Table 560 "VAT Clause"](../table/560.md)

## Pages and codeunits on this table

- [Page 576 "VAT Specification Subform"](../page/576.md) (source table)
- [Page 9401 "VAT Amount Lines"](../page/9401.md) (source table)

## Extended by

- [Table extension 6808 "WHT VAT Amount Line Ext"](../tableextension/6808.md)

## Calls

From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an `Object::"Name"` argument. Interface dispatch and calls through events are not counted, so the list is not complete.

- [Codeunit 6200 "Non-Deductible VAT"](../codeunit/6200.md) (6 calls: `CalcVATFields → Update`, `CopyFromPurchCrMemoLine → CopyNonDedVATFromPurchCrMemoLineToVATAmountLine`, `CopyFromPurchInvLine → CopyNonDedVATFromPurchInvLineToVATAmountLine`, …)
- [Codeunit 398 "Sales Tax Calculate"](../codeunit/398.md) (2 calls: `UpdateLines → CalculateTax`, `UpdateLines → ReverseCalculateTax`)

## Recent changes

- 2026-09-03 [#10381 [Main] Inconsistent Non-Deductible VAT calculations on Purchase & Sales Invoices containing lines with Full VAT calculation type](../../changes/bcapps/10381.md) (main, BC30, fix)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24-29

## Countries that replace it

[AU](../../localizations/au.md), [BE](../../localizations/be.md), [CA](../../localizations/ca.md), [ES](../../localizations/es.md), [GB](../../localizations/gb.md), [IT](../../localizations/it.md), [MX](../../localizations/mx.md), [NZ](../../localizations/nz.md), [RU](../../localizations/ru.md), [US](../../localizations/us.md)

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## Ask your agent

Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: `bcatlas_resolve_node(object_type: "table", object_name: "VAT Amount Line")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
