SAP FI Document Tables: BKPF, BSEG, ACDOCA Explained

Every financial posting in SAP creates a document, and three tables sit at the center of it all: BKPF (the document header), BSEG (the line items), and — in SAP S/4HANA — ACDOCA (the universal journal). Understanding these tables, their key fields, and how they link together is fundamental for FI consultants, ABAP developers writing reports, and anyone preparing for SAP FICO interviews.

BKPF: The Document Header Table

BKPF stores one record per FI document — the header information that applies to the whole document. Think of it as the cover page: who posted it, when, in which company code, and in which currency.

FieldDescription
BUKRSCompany code the document was posted in
BELNRDocument number (together with BUKRS and GJAHR, the unique key)
GJAHRFiscal year of the document
BLARTDocument type (for example, SA for GL documents, KR for vendor invoices, DR for customer invoices)
BLDATDocument date (the date on the source document)
BUDATPosting date (the date the document hits the ledger — determines the period)
XBLNRReference document number (for example, the vendor’s invoice number)
BKTXTDocument header text
WAERSDocument currency
KURSFExchange rate used for translation
USNAMUser name who posted the document
TCODETransaction code used to post it
CPUDT / CPUTMDate and time of entry into the system

The golden rule: one BKPF record per document, identified by the combination of company code (BUKRS), document number (BELNR), and fiscal year (GJAHR).

BSEG: The Document Line Items Table

BSEG stores the individual line items of each FI document — every debit and credit line. A single BKPF header can have many BSEG lines.

FieldDescription
BUZEILine item number within the document
BSCHLPosting key (for example, 40 = debit GL, 50 = credit GL, 31 = credit vendor, 01 = debit customer)
KOARTAccount type (D = customer, K = vendor, S = GL account, A = asset)
SHKZGDebit/credit indicator (S = debit, H = credit)
HKONTGL account number (for S account types)
DMBTRAmount in document currency
WRBTRAmount in document currency (line item level, mirrors DMBTR)
MWSKZTax code for the line item
KOSTLCost center assigned to the line
PRCTRProfit center assigned to the line — for profit center master data, see our guide to the profit center table in SAP
ZFBDTBaseline date for payment terms
ZTERMPayment terms key
SGTXTLine item text
ZUONRAssignment number (often used for clearing references)

BSEG is a cluster table in classic SAP, which means direct SELECTs on it in ABAP can be slow — one reason reporting best practices favor the secondary index tables or, in S/4HANA, ACDOCA.

How BKPF and BSEG Relate

The relationship is a classic header–item pattern. Join them on the shared key fields:

  • BKPF to BSEG: MANDT + BUKRS + BELNR + GJAHR

Conceptually:

SELECT bkpf~belnr, bkpf~budat, bseg~buzei, bseg~hkont, bseg~dmbtr, bseg~shkzg
  FROM bkpf
  JOIN bseg ON bseg~bukrs = bkpf~bukrs
           AND bseg~belnr = bkpf~belnr
           AND bseg~gjahr = bkpf~gjahr
 WHERE bkpf~bukrs = '1000'
   AND bkpf~gjahr = '2026'.

Every BSEG line belongs to exactly one BKPF header. The header carries the document-level context (dates, currency, user); the lines carry the postings (accounts, amounts, cost objects). Debits must equal credits across the lines of a balanced document.

ACDOCA: The Universal Journal in S/4HANA

ACDOCA is the single most important table change in SAP S/4HANA Finance. It merges the FI line items (BSEG) and the CO line items (COEP) — plus many other components — into one universal journal table. Each row is a journal line carrying financial and controlling dimensions together: company code, GL account, cost center (RCNTR), profit center (PRCTR), and more.

FieldDescription
RLDNRLedger (for example, 0L for the leading ledger)
RBUKRSCompany code
GJAHRFiscal year
BELNRDocument number
DOCLNJournal entry line number
RACCTGL account number
RANLAsset number (for asset postings)
RCNTRCost center
PRCTRProfit center
KOKRSControlling area
DMBTRAmount in document currency
WSLAmount in transaction currency
HSLAmount in company code currency
KSLAmount in controlling area currency
OSLAmount in object currency
BUDAT / BLDATPosting date / document date
BLARTDocument type
POPERPosting period
RMVCTTransaction type
AWTYP / AWREFReference transaction and reference document number

Because every currency type is stored on the line itself, multi-currency reporting no longer needs translation at report runtime.

How ACDOCA Changes the Classic Model

In classic SAP ECC, FI and CO lived in separate tables (BKPF/BSEG for FI, COBK/COEP for CO) and had to be reconciled. In S/4HANA:

  • ACDOCA is the single source of truth for actuals — FI and CO postings are the same rows.
  • BKPF and BSEG still exist and are populated for compatibility, but they are no longer the leading tables for reporting.
  • Secondary index tables BSIS/BSAS (GL open and cleared items), BSID/BSAD (customer), and BSIK/BSAK (vendor) are effectively replaced by ACDOCA views, since open-item information is available directly on the journal.
  • New GL totals tables FAGLFLEXA/FAGLFLEXT remain for classic New GL reporting, but most new analytics read ACDOCA.

The practical takeaway: in S/4HANA, write reports against ACDOCA, not BSEG.

Related Tables Worth Knowing

TableDescription
SKA1GL accounts at chart-of-accounts level — the central account definition
SKB1GL accounts at company code level — company-specific settings per account
SKATGL account texts (names in each language)
BSIS / BSASClassic secondary index: GL open items / cleared items
BSID / BSADClassic secondary index: customer open items / cleared items
BSIK / BSAKClassic secondary index: vendor open items / cleared items
FAGLFLEXANew GL actual line items (classic New GL)

Frequently Asked Questions

What is the difference between BKPF and BSEG?

Answer: BKPF is the document header table — one record per FI document with company code, document number, fiscal year, dates, currency, and user. BSEG is the line item table — one record per debit/credit line, with account, amount, posting key, and cost objects. They join on BUKRS + BELNR + GJAHR.

Is BSEG still used in SAP S/4HANA?

Answer: Yes, BSEG still exists and is populated when documents post, but it is no longer the leading table. In S/4HANA, ACDOCA (the universal journal) is the primary table for reporting and analytics because it combines FI and CO line items with all dimensions in one place. BSEG is also a cluster table, so direct reads on it are slower than reads on the transparent ACDOCA table — another reason new reports should target ACDOCA.

How do I join BKPF and BSEG?

Answer: Join on the shared key: BUKRS (company code), BELNR (document number), and GJAHR (fiscal year) — plus MANDT (client) in multi-client queries. Every BSEG line matches exactly one BKPF header through these fields.

What replaces BSIS and BSAS in S/4HANA?

Answer: The open-item and cleared-item information from BSIS/BSAS (and the customer/vendor equivalents BSID/BSAD/BSIK/BSAK) is available directly in ACDOCA, so these classic secondary index tables are no longer needed for reporting in S/4HANA.

Which table should I use for financial reporting in S/4HANA?

Answer: ACDOCA. It holds every journal line with FI and CO dimensions together — GL account, cost center, profit center, all currency types — making it the single source of truth. Use BKPF/BSEG only when you specifically need the classic document view or compatibility logic.

Conclusion

BKPF gives you the document header, BSEG gives you the lines, and ACDOCA gives you everything in one universal journal. Learn the key fields of each, how the header–item join works, and why S/4HANA reporting starts with ACDOCA. The next time a report needs document data, you will know exactly which table to query — and in S/4HANA, the answer is almost always ACDOCA.

Leave a Comment