BKPF table — Accounting Document Header Table
BKPF stores one row per accounting document header in FI: company code, document number, fiscal year, document type, posting date, entry date, reference, and reversal status. It holds no amounts and no G/L account data. Line item detail sits in BSEG (or the universal journal in S/4HANA). Always query BKPF with company code plus fiscal year, never BELNR alone.
BKPF is the header table behind every FI accounting document, one row per document regardless of how many line items it contains. This page covers the key header fields, how to join into BSEG and related tables, and the recurring mistakes consultants make when reading reversal status, dates, and reference keys off this table.
Published 15 Sept 2026· 1,168 words
What it stores
One row in BKPF represents a single accounting document header, created whenever an FI posting is made, whether by a G/L journal entry, an incoming invoice, a billing document transfer, or a payment run. The header carries the administrative and control data for that document: which company code and fiscal year it belongs to, what document type was used, who entered it and when, the posting and document dates, the currency, a free-text reference, and whether the document has since been reversed. It does not carry any monetary amounts or account assignments; those live at line item level. A document with one debit and one credit line, or with fifty lines split across cost centers and tax codes, still produces exactly one BKPF row.
Key fields
- MANDT - client
- BUKRS - company code
- BELNR - accounting document number, unique only in combination with BUKRS and GJAHR
- GJAHR - fiscal year
- BLART - document type, controls number range and account types allowed
- BLDAT - document date, the date printed on the source document
- BUDAT - posting date, determines the posting period
- MONAT - fiscal period derived from posting date
- CPUDT - entry date, the date the document was keyed into the system
- USNAM - user who created the document
- TCODE - transaction code used to post
- WAERS - document currency key
- XBLNR - reference document number, often the vendor invoice number or external reference
- BKTXT - document header text
- AWTYP - reference procedure identifying the type of originating business object
- AWKEY - reference key linking back to the originating object, such as a billing or logistics document
- STBLG - number of the reversal document, filled once the document is reversed
- STJAH - fiscal year of the reversal document
How it joins the data model
- BKPF-BUKRS/BELNR/GJAHR = BSEG-BUKRS/BELNR/GJAHR to reach the individual debit and credit lines
- BKPF-BUKRS = T001-BUKRS to resolve company code attributes such as currency and chart of accounts
- BKPF-BLART = T003-BLART to check document type configuration and allowed account types
- BKPF-BUKRS/BELNR/GJAHR = BSET-BUKRS/BELNR/GJAHR to reach the tax line items for that document
- BKPF-AWTYP/AWKEY used to trace back to the originating business document, such as a billing document or goods movement, when the header was created by an integration posting rather than manual entry
How to read it safely
Always restrict on MANDT implicitly and on BUKRS plus GJAHR explicitly before doing anything else; those two fields carry the real selectivity on this table. BELNR alone is meaningless because document number ranges are assigned per company code and can repeat across company codes and years. Do not select across all company codes on BUDAT or CPUDT without at least a company code range first, the table grows without bound over the life of a system and an unrestricted date-range scan against it is a common cause of a stuck background job or a locked dialog session. If hunting by user or entry date across many company codes, expect the query to run long unless a suitable index supports it.
How to prove it in the data
Symptom: a customer or vendor line is reported as still open even though someone claims the document was reversed. Select BKPF on BUKRS, BELNR, GJAHR for the original document and check STBLG and STJAH. If both are blank, no reversal exists regardless of what was told to the business. If they are filled, take that STBLG/STJAH pair, look up the reversal document's own BKPF row to confirm it posted successfully, then check BSEG for both documents to confirm the clearing fields were actually set on the open item, not just that a reversal document exists.
ECC vs S/4HANA
BKPF continues to exist as a real table in S/4HANA and is still populated on every posting; it remains the header table for FI documents. Line item detail that used to live only in BSEG is now sourced from the universal journal table ACDOCA, with BSEG retained as a compatibility view mapped onto it. Joins from BKPF into line items therefore still work using the same BUKRS, BELNR, GJAHR keys, whether the target is BSEG or ACDOCA directly.
Common pitfalls
- Trying to total amounts from BKPF. There are none. Every amount, debit or credit, local or document currency, sits in BSEG or the universal journal, not the header.
- Treating BELNR as a unique key on its own. It is only unique within BUKRS and GJAHR; the same number can exist in multiple company codes or fiscal years for entirely unrelated documents.
- Assuming a filled STBLG means the original postings were removed. Reversal creates a new document and updates clearing status on the line items; the original document and its lines remain in BSEG, now flagged as cleared, not deleted.
- Confusing BUDAT, BLDAT, and CPUDT. Period determination and period-close checks run off BUDAT. Reading BLDAT when the question is about which period a document landed in gives a wrong answer that looks plausible.
- Manually decoding AWKEY expecting a clean foreign key. The reference key format concatenates an object identifier with a fiscal year in a way specific to the reference procedure named in AWTYP, and treating it as a plain document number produces false matches.
- Assuming one BKPF row equals one transaction as the business user understood it. A single invoice entry can generate more than one accounting document, for example a separate cross-company document, and these are linked by shared reference data rather than by a single BELNR.
- Running an unrestricted select against BKPF in a production system expecting it to behave like a small master table. It is one of the largest tables in a mature FI system and an unrestricted read is a frequent cause of a runaway query.
Whose problem this is
Questions about why a specific document looks the way it does, wrong document type, wrong posting date, missing reversal, sit with the FI or GL accounting functional team, not basis. Performance problems caused by unrestricted reads against BKPF in production are a basis and ABAP development concern, usually surfaced through a long-running job or a database team escalation rather than a functional ticket.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tables/bkpfERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.