SAP tableObjectBSETModuleFI_FICO

BSET table — BSET Tax Data Table in Accounting Documents

BSET stores the tax lines calculated for a posted FI document, one row per tax code and condition type per document. It holds the tax base amount, the tax amount in local and document currency, the tax code, and the jurisdiction code. It is the table to query when the automatically generated tax posting line does not match the amount expected on the invoice or when reconciling tax reporting against posted documents.

BSET is the tax breakdown table sitting alongside BKPF and BSEG, holding the base and tax amounts SAP calculated for each tax code used on a document. This page covers its key fields, how it joins to the header and line item tables, and the recurring mistakes consultants make when using it to chase tax discrepancies.

Published 15 Sept 2026· 1,082 words

What it stores

Each row in BSET represents one tax calculation result for one accounting document: a specific combination of company code, document number, fiscal year, tax code and condition type, together with the base amount the tax was calculated on and the resulting tax amount, in both local and document currency. A single invoice with two different tax codes produces two rows in BSET, not one. The table is populated automatically during posting whenever a document contains at least one line with a tax code, whether the tax is calculated by the system or entered manually. It exists independently of BSEG because a document's tax lines are a derived, aggregated view of the tax-relevant items, not a one-to-one copy of the posting lines themselves.

Key fields

  • MANDT - client
  • BUKRS - company code the document was posted in
  • BELNR - accounting document number
  • GJAHR - fiscal year of the document
  • BUZEI - line item number of the tax posting within the document
  • KSCHL - condition type used for the tax calculation, for example output or input tax
  • MWSKZ - tax code applied
  • KTOSL - internal processing key that drives account determination for the tax
  • TXJCD - tax jurisdiction code, relevant for jurisdiction-based tax calculation such as in the US
  • HWBAS - tax base amount in local currency
  • HWSTE - tax amount in local currency
  • FWSTE - tax amount in document currency
  • SHKZG - debit/credit indicator for the tax line

How it joins the data model

  • BSET-BUKRS = BKPF-BUKRS and BSET-BELNR = BKPF-BELNR and BSET-GJAHR = BKPF-GJAHR to get document header data such as posting date and document type
  • BSET-BUKRS = BSEG-BUKRS and BSET-BELNR = BSEG-BELNR and BSET-GJAHR = BSEG-GJAHR and BSET-BUZEI = BSEG-BUZEI to find the actual posting line the tax amount was booked against
  • BSET-MWSKZ = T007A-MWSKZ to pull the tax code configuration, percentage rate and tax type
  • BSET-BUKRS = T001-BUKRS to get company code currency and country, needed to interpret HWBAS and HWSTE correctly

How to read it safely

BSET is client-dependent and keyed at document level, so it can grow to the same order of size as BSEG in a mature system. Never select from it without at least BUKRS and a GJAHR restriction; adding a BELNR range or a posting date filter joined through BKPF is what keeps the query usable. Do not attempt to filter directly on HWSTE or HWBAS with a range unless the currency and sign convention have been confirmed first, since amounts carry SHKZG-driven sign logic that differs from how the same amount appears in BSEG. When comparing tax amounts across documents, always compare within the same currency field consistently, either local or document currency, never mixing HWSTE and FWSTE in the same calculation.

How to prove it in the data

To confirm a suspected wrong tax amount on an invoice, select BSET restricted to BUKRS, BELNR and GJAHR of the document in question, and inspect KSCHL, MWSKZ, HWBAS and HWSTE for every row returned. If more than one row appears with different tax codes, the document contains mixed tax treatment across its line items, which explains why a single expected tax percentage does not reconcile against the total. Cross-check HWBAS against the sum of the tax-relevant BSEG lines carrying the same MWSKZ to confirm the base was calculated correctly before assuming the tax code configuration is wrong.

ECC vs S/4HANA

BSET continues to exist as a table in S/4HANA and is still populated on posting for compatibility with tax reporting programs and interfaces that read it directly. The line-item detail that used to require joining BSET to BSEG is now also available directly in ACDOCA, which carries tax code and tax amount fields at the universal journal line level, so newer custom reports and CDS-based tax analysis tend to read ACDOCA instead. Existing tax reports built against BSET generally continue to work unchanged.

Common pitfalls

  • Assuming BSET-BUZEI lines up one-to-one with every BSEG line: it only corresponds to the specific tax posting line, not to the vendor or customer line the tax was calculated from.
  • Reading HWSTE as the tax posted to the general ledger without checking SHKZG: sign conventions can make a debit tax look like a negative number depending on the query, leading to false conclusions about over- or under-posted tax.
  • Ignoring that a document can carry multiple tax codes: summing HWBAS across all rows for a document without grouping by MWSKZ produces a meaningless blended base amount.
  • Treating BSET as the source of truth for statutory tax reporting: many tax reports read from dedicated reporting tables or from ACDOCA in S/4HANA, and BSET may not reflect later manual adjustments booked outside the standard tax posting logic.
  • Expecting BSET to show tax on documents posted with tax code but zero tax percentage: a row still gets written with a zero HWSTE, which is often mistaken for a missing tax calculation rather than a deliberately configured non-taxable code.
  • Comparing FWSTE across documents in different currencies without converting first: two documents can carry the same document-currency tax amount and mean very different things in local currency.

Whose problem this is

Discrepancies in BSET amounts are first a tax configuration question, owned by the FI consultant responsible for tax code and condition setup, before they become a program or interface issue. If the base amount itself looks wrong, the question shifts to whoever owns pricing or invoice creation upstream, since BSET only reflects what was handed to the tax calculation, not why that amount was calculated that way.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-tables/bsetERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.