HomeAboutBlog ContactSAP
💰 SAP FI Tables · Real Use Cases · 2026–27

BKPF vs BSEG -
What Is the Real Difference?

Explained in plain, everyday language - with real Indian company scenarios, T-codes, interview questions, and common mistakes that trip up every SAP beginner.

2026–27 Guide LearntoSAP.com 20 min read FI · BKPF · BSEG · Audit Trail · Interview Prep

🏦 What Are BKPF and BSEG, and Why Does Every SAP Finance Person Need to Know Them?

Today we are discuss BKPF vs BSEG Real Difference? Every time money moves in a company that uses SAP - whether it is paying a vendor, booking a salary, receiving a customer payment, or posting a journal entry - SAP writes a permanent record called a Financial Accounting Document. This one document is actually stored across two tables: BKPF and BSEG. Think of it like a restaurant bill - the top of the bill shows the table number, date, and waiter name (that is BKPF), and the bottom shows each dish you ordered with its price (that is BSEG). You need both parts together to understand the full picture. These two tables are the backbone of SAP FI - every report, every audit, every reconciliation, every payment trace ultimately comes back to BKPF and BSEG. If you work in SAP FI, you will query these tables every single week of your career.This tutorial or document breaks down the process step by step, using simple language and real-world examples to help you master the skill.

The Document Cover Page
BKPF

One row per accounting document. This is the "who posted it, when, and what kind of document is it" table. It holds the document header - the overall summary information that applies to the whole transaction, not the individual line items.

One document = exactly one row in BKPF
Stores: document date, posting date, company code, document type, who posted it, which T-code was used
Does NOT store amounts - just the envelope information
Primary key: Company Code (BUKRS) + Document Number (BELNR) + Fiscal Year (GJAHR)
Table: BKPF · T-Code to view: FB03
The Line Items Inside
BSEG

Multiple rows per accounting document. This is the "what accounts were debited and credited, by how much" table. Every single line item in a document - every debit and every credit - gets its own row here.

One document = two or more rows in BSEG (minimum one debit + one credit)
Stores: G/L account, vendor/customer, amount, cost centre, tax code, payment terms, assignment
This is where the actual money amounts live
Primary key: BUKRS + BELNR + GJAHR + Line Item Number (BUZEI)
Table: BSEG · T-Code to view: FB03 → Line Items
🔑

They Share One Key

BKPF and BSEG are always joined using Company Code + Document Number + Fiscal Year. This is how SAP links the document header to its line items.

🔒

Both Are Permanent

Once posted, neither table can be changed. A mistake is fixed by posting a reversal - which creates a new document in both tables. The original stays forever.

📊

Always Used Together

In audit reports and queries you almost always JOIN BKPF with BSEG. BKPF alone tells you a document exists. BSEG alone tells you amounts but not who posted or when.

Document Header (BKPF)
Line Items (BSEG)
FB03 · FBL1N · FBL3N · FBL5N
BKPF + BSEG Join
Audit Trail · SOX · SEBI
Interview Questions

🔎 What Exactly Is Stored in Each Table? (Every Important Field Explained Simply)

Instead of showing you a boring list of field names, let us walk through both tables using the example of a real invoice payment: Rajan Manufacturing Ltd in Pune pays their electricity bill of ₹1,85,000 to MSEDCL (Maharashtra State Electricity Distribution Company). The accountant posts this in SAP using T-code FB60. Here is exactly what gets written into BKPF and BSEG.

📋 BKPF - The Document Header (One Row Created for the Electricity Bill)
Field Name What It Means in Plain English Value in Our Example
BUKRSCompany Code -which company in SAP posted this. Rajan Manufacturing is company code 1100.1100
BELNRDocument Number -SAP automatically assigns this unique number when you save. Think of it as the receipt number.1900012344
GJAHRFiscal Year -which financial year this belongs to. Together with company code and document number, this makes the document 100% unique in the system.2025
BLARTDocument Type -what kind of financial document is this. KR = Vendor Invoice, KZ = Vendor Payment, SA = G/L Posting, DZ = Customer Payment. This is one of the most important fields for filtering.KR (Vendor Invoice)
BLDATDocument Date -the date on the actual paper invoice you received. This is what the vendor wrote on their invoice.28-Apr-2025
BUDATPosting Date -the date the transaction is recorded in the financial books. This affects which accounting period it falls into -a critical field for month-end reporting.30-Apr-2025
CPUDTEntry Date -the exact calendar date when the accountant sat down and typed this into SAP. SAP sets this automatically from the computer clock and no one can change it. This is the most trusted date for audit purposes.02-May-2025
CPUTMEntry Time -the exact time the document was saved in SAP, right down to the second. Together with CPUDT, this creates a perfect timestamp that cannot be manipulated.11:24:37
USNAMUsername -the SAP user ID of the person who posted this document. This is the audit trail field -it tells you exactly who touched this transaction.ACCOUNTS.PRIYA
TCODETransaction Code -which SAP screen the user used to post this. FB60 = post vendor invoice. FB01 = manual journal entry. F110 = automatic payment run. Auditors check this to see if a transaction was posted the normal way or via a back-door method.FB60
WAERSCurrency -the currency of the document. INR for Indian Rupee, USD for US Dollar, EUR for Euro.INR
XBLNRReference / External Document Number -the vendor's own invoice number. This helps match SAP documents to the actual paper invoices during reconciliation.MSEDCL/APR25/7823
BKTXTDocument Header Text -a free-text description the accountant types when posting. Useful for explaining what the transaction is about, though some companies leave this blank.Electricity Apr-2025
STBLGReversal Document Number -if this document was later reversed (cancelled), SAP puts the reversal document number here. If this field is blank, the document has never been reversed.(blank -not reversed)
💡

Key insight about dates: BLDAT is the date on the vendor's paper invoice (you control this). BUDAT is the date you choose to book it in SAP (you control this). CPUDT is the date SAP records it automatically (nobody can change this). For fraud investigation and audit purposes, always use CPUDT -it is the one date that cannot be backdated or manipulated by any end user.

📋 BSEG - The Line Items (Two Rows Created for the Same Electricity Bill)
Field Name What It Means in Plain English Line 1 (Vendor) Line 2 (Expense)
BUZEILine Item Number -the sequence number of this line within the document. Line 1 is the vendor payable, Line 2 is the expense account.001002
KOARTAccount Type -K = Vendor, D = Customer, S = G/L Account, A = Asset, M = Material. This tells you what kind of account this line item belongs to.K (Vendor)S (G/L Account)
LIFNRVendor Number -the SAP vendor master number for the party you are paying. This is only populated on vendor lines (KOART = K). The vendor MSEDCL has number V-002341.V-002341(blank)
HKONTG/L Account -the general ledger account number that this line posts to. 160000 might be "Accounts Payable – Vendors", 402000 might be "Electricity Expense". Every line item must go to a G/L account.160000 (Payable)402000 (Expense)
DMBTRAmount in Local Currency -the transaction amount in your company's base currency (INR for Indian companies). This is the main amount field -the actual rupee value of this line.₹1,85,000₹1,85,000
SHKZGDebit/Credit Indicator -S = Debit (Soll), H = Credit (Haben, the German word for "have"). SAP uses German convention here because it was built in Germany. S increases expense accounts and decreases liability accounts.H (Credit)S (Debit)
KOSTLCost Centre -which department or cost centre this expense belongs to. Electricity for the production floor goes to cost centre 1000 (Production). This is how management accounting reports are built.(blank)PROD-1000
MWSKZTax Code -the VAT or GST code applied to this line. V1 might mean 18% GST Input, V0 means zero-rated. SAP uses this to calculate tax amounts automatically.V1 (18% GST)(blank)
ZUONRAssignment -a reference field often used to store the vendor invoice number, cost object reference, or any string that helps link this line to external systems. Companies use this field in many creative ways.MSEDCL/APR25APR-2025-ELEC
SGTXTItem Text -a free-text note specific to this individual line item (different from the document header text in BKPF). Useful for explaining why this specific line exists.MSEDCL April 2025Factory electricity Apr
ZTERMPayment Terms -the agreed payment terms with the vendor. Z030 might mean "Pay within 30 days." This is used by SAP to calculate the due date for automatic payment runs (F110).Z030(blank)
AUGDTClearing Date -the date when this open item was cleared (paid). Empty means the invoice has not been paid yet. Filled means it has been cleared -with a reference to the clearing document.(blank -unpaid)(blank)

The Golden Rule of Double-Entry Accounting in BSEG: For every document, the sum of all DMBTR values where SHKZG = 'S' (Debit) must exactly equal the sum of all DMBTR values where SHKZG = 'H' (Credit). SAP will not let you post a document where this is not true -it will throw an error. This is how SAP enforces double-entry bookkeeping automatically. If your BSEG query returns a document where debits do not equal credits, something has gone seriously wrong in the system configuration.

🔍 Real Scenario: "Who Posted This Invoice, and Why Was the Amount Different?"

The most common real-world reason you will open BKPF and BSEG is to trace a suspicious or disputed financial document. Here is a real situation that happens in many Indian companies every month.

SCENARIO 01

Pramod Steel Industries – Finance Team Investigates a Duplicate Vendor Payment

The accounts payable manager at Pramod Steel Industries in Raipur gets a call from their vendor Sharma Iron Suppliers saying they have received two payments of ₹3,42,000 each for the same invoice INV-2025-0334. The vendor is asking for a refund of the duplicate payment. The finance manager needs to trace exactly what happened - which documents were posted, who posted them, when, and whether there was an error or fraud.

1
Step 1 - Find the Vendor's Documents in FBL1N

The finance manager opens T-code FBL1N (Vendor Line Item Report) and enters the vendor number for Sharma Iron Suppliers. She selects "All Items" and enters the date range April/May 2025. SAP shows her all line items from BSEG for this vendor. She immediately sees two cleared items -both for ₹3,42,000, both referencing external document INV-2025-0334 (stored in BKPF.XBLNR). Two payments against the same invoice number - confirmed duplicate.

▶ T-Code: FBL1N · Reads: BSEG (LIFNR = vendor number, KOART = 'K') joined to BKPF on BUKRS + BELNR + GJAHR
2
Step 2 - Open Each Document in FB03 to See the Header Details

She double-clicks the first payment document to open it in FB03. SAP shows the BKPF header: Document Type KZ (Vendor Payment), Posting Date 15-May-2025, Entry Date 15-May-2025, Username ACCOUNTS.SUNIL, T-Code F110 (automatic payment run). This is the legitimate payment - posted by the automatic payment program F110 as expected. She opens the second document: Document Type KR (Vendor Invoice), Posting Date 15-May-2025, Entry Date 15-May-2025, Username ACCOUNTS.SUNIL, T-Code FB60 (manual invoice entry). This is the problem -someone manually re-entered the invoice on the same day the automatic payment ran.

▶ T-Code: FB03 · Reads: BKPF (BELNR = document number) · Key fields: BLART, USNAM, TCODE, CPUDT, CPUTM
3
Step 3 - Check the Line Items in BSEG to Confirm the Amounts

Using SE16N on table BSEG, she filters by BELNR = the second document number and BUKRS = 1200 (Pramod Steel's company code). The result shows two line items: Line 001 -KOART = K (Vendor), LIFNR = Sharma Iron Suppliers, DMBTR = ₹3,42,000, SHKZG = H (Credit -meaning SAP owes the vendor). Line 002 -KOART = S (G/L Account), HKONT = 260000 (Raw Materials expense), DMBTR = ₹3,42,000, SHKZG = S (Debit -expense booked). The duplicate invoice has correctly posted to both accounts -the money has left the company and gone to the vendor. This was not a system error -it was a human error.

▶ SE16N on BSEG · Filter: BUKRS + BELNR · Key fields: KOART, LIFNR, HKONT, DMBTR, SHKZG
4
Step 4 - Reverse the Duplicate Document Using FB08

The CFO authorises reversal of the manually-entered duplicate invoice using T-code FB08. SAP creates a new reversal document that exactly mirrors the original - it credits the expense account and debits the vendor payable, zeroing out the erroneous posting. Both the original document and the reversal document now permanently exist in BKPF and BSEG -the field BKPF.STBLG (Reversal Document Number) on the original document now points to the reversal. The accounting books are corrected. The vendor receives a debit note for the duplicate amount.

▶ T-Code: FB08 (Reverse Document) · Creates new doc in BKPF + BSEG · Original BKPF.STBLG filled with reversal doc number
💡

Why did the duplicate get past the system? SAP has a "Duplicate Invoice Check" feature (configured in SPRO) that warns you if the same vendor, same amount, and same external document number are posted twice. This company had the check disabled or ACCOUNTS.SUNIL used a slightly different reference number (INV-2025-334 vs INV-2025-0334) which bypassed the check. Both the BKPF.XBLNR comparison and BSEG.DMBTR check are used by this feature. Always ensure duplicate invoice checks are active in production.

📊 Real Scenario: "Our G/L Balance Doesn't Match the Vendor Statement - Find the Difference"

Every month-end, finance teams at Indian companies do account reconciliations. When a balance in SAP does not match an external statement, BKPF and BSEG are where you go to find the gap -line by line, document by document.

SCENARIO 02

Vikram Textiles Ltd - Accounts Payable Reconciliation for April 2025

The finance controller at Vikram Textiles Ltd in Surat runs the month-end AP reconciliation for April 2025. The SAP balance in account 160000 (Accounts Payable - Creditors) shows ₹2.87 crore as the closing balance. But the manually maintained vendor statement summary shows ₹2.93 crore. There is a gap of ₹6 lakh. The controller needs to find which document or documents explain this difference.

1
Step 1 - Run G/L Line Item Report to See Every Posting to Account 160000

The controller opens FBL3N (G/L Account Line Item Report), enters account 160000, company code 1500 (Vikram Textiles), and sets the posting date to 01-Apr-2025 to 30-Apr-2025. This query reads BSEG where HKONT = '160000' and BUKRS = '1500', joined to BKPF for the posting date filter (BKPF.BUDAT). Result: 94 line items. Opening balance ₹2.42 crore. Total credits (invoices posted): ₹1.82 crore. Total debits (payments made): ₹1.37 crore. Closing balance: ₹2.87 crore -matches SAP perfectly. So the SAP figure is internally consistent.

▶ T-Code: FBL3N · Reads: BSEG (HKONT = account, KOART = 'S') joined to BKPF (BUDAT range) · Tables: BSIS (open items) + BSAS (cleared items)
2
Step 2 - Find Documents Parked But Not Posted (VBKPF / VBSEG)

The controller suspects the gap might be invoices that were entered into SAP but not yet posted - they would sit in VBKPF and VBSEG (the parked document tables, not BKPF/BSEG). Using T-code FBV3 (Display Parked Documents), he finds three parked invoices totalling ₹4,12,000 dated April 2025 -they are stuck waiting for a manager's approval. These are not in BKPF or BSEG yet, so they do not appear in the SAP balance. The external statement included them because the vendors sent the invoices in April. Gap partially explained: ₹4,12,000 of the ₹6,00,000 difference.

▶ T-Code: FBV3 (Display Parked Documents) · Parked docs live in VBKPF + VBSEG - NOT in BKPF/BSEG until approved and posted
3
Step 3 - Check for Documents Posted in May with April Invoice Dates

The remaining ₹1,88,000 gap must come from somewhere else. The controller looks in BKPF for documents where BUDAT (Posting Date) = May 2025 but BLDAT (Document Date / Invoice Date) = April 2025. These are April invoices that the accounts team posted late in May -they show in the vendor statement for April but in SAP's accounting balance for May. A quick SE16N on BKPF with BUKRS = 1500, BLART = 'KR', BLDAT between 01-Apr and 30-Apr, BUDAT between 01-May and 05-May finds two such documents totalling ₹1,88,000. Gap fully explained -₹4,12,000 parked + ₹1,88,000 cross-period = ₹6,00,000 total.

▶ SE16N on BKPF · Filter: BLART = 'KR', BLDAT in Apr, BUDAT in May · Key learning: BLDAT ≠ BUDAT causes period-end reconciliation differences
🎓

Interview Question This Scenario Answers: "What is the difference between Document Date, Posting Date, and Entry Date in SAP?" -Document Date (BLKPF.BLDAT) = date on the vendor's invoice. Posting Date (BKPF.BUDAT) = date it hits the G/L books and determines the accounting period. Entry Date (BKPF.CPUDT) = the actual calendar date the accountant typed it into SAP, set by the system clock. A mismatch between BLDAT and BUDAT is the single most common cause of month-end reconciliation differences -and it always lives in BKPF.

🏛️ Real Scenario: "SEBI Wants to See Every Manual Journal Entry Posted by a Specific User"

SCENARIO 03

Luxi Pharmaceuticals Ltd - SEBI Query on Late-Night Manual Postings

SEBI (Securities and Exchange Board of India) has raised a query asking Luxi Pharmaceuticals to explain all manual journal entries (Document Type SA) posted between October and December 2024 by users with system administrator access. The company's internal audit team has 48 hours to produce a complete list with full document details, line item amounts, and proof of who authorised each posting.

1
Step 1 - Query BKPF First to Find Matching Document Headers

The audit team runs SE16N on BKPF with the following filters: BUKRS = 'LPL1' (company code), BLART = 'SA' (General Ledger document type -manual journal entries), CPUDT between 01-Oct-2024 and 31-Dec-2024, USNAM = 'SYSADMIN' (the system administrator user ID). Result: 23 documents. Key BKPF fields extracted: BELNR (document number), GJAHR, CPUDT, CPUTM (entry time), BLDAT, BUDAT, BKTXT (document text), TCODE. Three documents were posted between 11 PM and midnight -immediately flagged for deeper review. BKPF gives you the complete "who, when, which transaction code" picture.

▶ SE16N on BKPF · Filters: BLART + USNAM + CPUDT range · Always start with BKPF first - it is the smaller table and has indexed fields
2
Step 2 - Pull the Line Items from BSEG for Those 23 Documents

The audit team takes the 23 BELNR (document number) values from Step 1 and queries BSEG filtering by BUKRS = 'LPL1' and BELNR IN (the list of 23 numbers). This returns all the line items -every G/L account, amount, and cost centre for each of those 23 manual journal entries. The three late-night documents show: large credits to account 800000 (Revenue) and debits to account 190000 (Inter-Company Receivables). Revenue recognition entries posted manually at midnight before quarter-end -a classic revenue manipulation pattern. BSEG gives you the "what money moved, to which accounts, in which amounts" detail.

▶ SE16N on BSEG · Filter: BUKRS + BELNR IN (list) · Key fields: HKONT, DMBTR, SHKZG, KOSTL, SGTXT · Join back to BKPF on BUKRS + BELNR + GJAHR
3
Step 3 - Produce the ABAP / SQL Report Joining Both Tables

To give SEBI the complete picture in one report, the technical team writes an ABAP program that joins BKPF and BSEG on BUKRS + BELNR + GJAHR and outputs: Document Number, Document Date, Posting Date, Entry Date, Entry Time, Username, T-Code, Document Text, G/L Account, Amount, Debit/Credit indicator, Cost Centre, Line Item Text. This combined view is what auditors want -the document header context (from BKPF) alongside the exact financial movements (from BSEG). The report is exported to Excel and submitted to SEBI within 6 hours.

▶ Custom ABAP: SELECT FROM bkpf INNER JOIN bseg ON bukrs + belnr + gjahr · OR use SQVI (Quick Viewer) to join the two tables visually without code
ABAP - JOIN BKPF + BSEG for Audit Report
" ═══════════════════════════════════════════════════════════════
" SAP FI Audit Query: BKPF + BSEG Join
" Purpose : Extract all manual journal entries (SA) by SYSADMIN
" Tables  : BKPF (doc header) joined to BSEG (line items)
" ═══════════════════════════════════════════════════════════════

REPORT z_bkpf_bseg_audit.

"── Selection screen ───────────────────────────────────────────
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs,
               s_blart FOR bkpf-blart,
               s_uname FOR bkpf-usnam,
               s_cpudt FOR bkpf-cpudt.

"── Result structure ────────────────────────────────────────────
TYPES: BEGIN OF ty_result,
  belnr  TYPE bkpf-belnr,    " Document number
  gjahr  TYPE bkpf-gjahr,    " Fiscal year
  bldat  TYPE bkpf-bldat,    " Document date (on invoice)
  budat  TYPE bkpf-budat,    " Posting date (accounting period)
  cpudt  TYPE bkpf-cpudt,    " Entry date (system clock -cannot be changed)
  cputm  TYPE bkpf-cputm,    " Entry time
  usnam  TYPE bkpf-usnam,    " Who posted it
  tcode  TYPE bkpf-tcode,    " Which T-code was used
  bktxt  TYPE bkpf-bktxt,    " Document text
  buzei  TYPE bseg-buzei,    " Line item number
  hkont  TYPE bseg-hkont,    " G/L account
  dmbtr  TYPE bseg-dmbtr,    " Amount in local currency
  shkzg  TYPE bseg-shkzg,    " S = Debit, H = Credit
  kostl  TYPE bseg-kostl,    " Cost centre
  sgtxt  TYPE bseg-sgtxt,    " Line item text
END OF ty_result.

DATA: lt_result TYPE TABLE OF ty_result.

"── The JOIN -ALWAYS start with BKPF, then bring in BSEG ───────
" BKPF is the smaller table. Filter it first. Never start with BSEG.
" Joining key: BUKRS + BELNR + GJAHR (all three are mandatory)
SELECT
  h~belnr  h~gjahr  h~bldat  h~budat
  h~cpudt  h~cputm  h~usnam  h~tcode  h~bktxt
  i~buzei  i~hkont  i~dmbtr  i~shkzg  i~kostl  i~sgtxt
  INTO TABLE @lt_result
  FROM bkpf AS h
  INNER JOIN bseg AS i
    ON  i~bukrs = h~bukrs
    AND i~belnr = h~belnr
    AND i~gjahr = h~gjahr
  WHERE
    h~bukrs IN s_bukrs
    AND h~blart IN s_blart   " Document type filter (SA = manual journal)
    AND h~usnam IN s_uname   " User ID filter
    AND h~cpudt IN s_cpudt.  " Date range filter -uses CPUDT (system date)

"── Output ─────────────────────────────────────────────────────
SORT lt_result BY cpudt cputm belnr buzei.
LOOP AT lt_result INTO DATA(ls).
  WRITE: / ls-belnr, ls-cpudt, ls-cputm, ls-usnam,
           ls-hkont, ls-dmbtr, ls-shkzg, ls-sgtxt.
ENDLOOP.

Performance Warning - BSEG is One of the Largest Tables in SAP: In a production system that has been running for 5+ years, BSEG can easily have 500 million rows or more. Never query BSEG directly without filters on BUKRS (company code) and either BELNR (document number) or GJAHR (fiscal year). Always start by querying BKPF first with your date and document type filters, collect the matching BELNR values, then query BSEG using those BELNR values. Querying BSEG directly with only a date range can crash your production system or run for hours.

💰 Real Scenario: "A Customer Paid ₹50 Lakh - Which Invoices Did This Clear?"

SCENARIO 04

Anand Auto Parts Ltd - Tracing a Customer's Bulk Payment to Individual Invoices

The accounts receivable team at Anand Auto Parts Ltd in Chennai receives a bank statement showing that customer Maruti Components India Ltd transferred ₹49,87,500 on 08-May-2025. This is a bulk payment -the customer has not specified which invoices they are paying. The AR team needs to find which open invoices to clear against this payment in SAP.

1
Step 1 - Post the Payment and Find the Incoming Payment Document in BKPF

The accountant posts the incoming bank receipt using F-28 (Post Incoming Payment). SAP creates a document - in BKPF: Document Type DZ (Customer Payment), BUDAT = 08-May-2025, USNAM = AR.KAVITHA, TCODE = F-28. In BSEG: Line 001 -KOART = D (Customer), KUNNR = Maruti Components customer number, DMBTR = ₹49,87,500, SHKZG = S (Debit -clears the money the customer owes). Line 002 -KOART = S (G/L), HKONT = 112000 (Bank Incoming account), DMBTR = ₹49,87,500, SHKZG = H (Credit -cash came in). The payment document is in BKPF but the invoices are not yet matched.

▶ T-Code: F-28 (Post Incoming Payment) · Creates BKPF (BLART = 'DZ') + BSEG (KOART = 'D' for customer line)
2
Step 2 - View Open Customer Invoices in FBL5N

Using FBL5N (Customer Line Item Report), the AR team views all open items for Maruti Components. SAP reads BSEG where KOART = 'D' (Customer) and AUGDT is blank (not yet cleared / unpaid). It shows 12 open invoices with various amounts and due dates. The AR team selects invoices totalling exactly ₹49,87,500 -a combination of 7 invoices from March and April -and processes the clearing. SAP then fills the AUGDT (Clearing Date) field in BSEG with 08-May-2025 for each cleared invoice and links all of them to the payment document number via AUGBL (Clearing Document Number).

▶ T-Code: FBL5N · Reads: BSEG (KOART = 'D', AUGDT is blank = open items) · After clearing: BSEG.AUGDT + BSEG.AUGBL filled
3
Step 3 - Verify the Clearing in BSEG

A quick SE16N on BSEG filtering by KUNNR = Maruti Components customer number and AUGBL = the payment document number shows all 7 invoice line items now marked as cleared -AUGDT = 08-May-2025, AUGBL = the incoming payment document BELNR. The customer's account is now clean. The BKPF of the original invoices still exists unchanged -but BSEG now carries the clearing reference. This is how SAP links payment documents back to the original invoices -through the AUGBL field in BSEG.

▶ SE16N on BSEG · Fields AUGDT (clearing date) + AUGBL (clearing document) are the link between invoice and payment

⚠️ Most Common Mistakes People Make with BKPF and BSEG

These mistakes appear again and again in SAP projects -in reports, ABAP programs, and interview answers. Knowing them puts you ahead of 80% of SAP finance consultants.

❌ Wrong

Querying BSEG first without any BKPF filters: SELECT * FROM bseg WHERE budat = '20250430' - BUDAT is in BKPF, not in BSEG! BSEG does not have a posting date field. This query will either fail or return wrong results.

✅ Right

Always filter BKPF first using date fields, collect document numbers, then query BSEG: SELECT belnr FROM bkpf WHERE budat = '20250430', then SELECT FROM bseg WHERE belnr IN list.

❌ Wrong

Saying "BKPF stores the amounts" in an interview. BKPF has NO amount fields. The document header is just metadata -who, when, what type. All monetary values are in BSEG. Mixing this up is a very common and visible mistake.

✅ Right

BKPF = Document Header (no amounts -just identity, dates, user, document type). BSEG = Line Items (all amounts in DMBTR, account numbers in HKONT/LIFNR/KUNNR, debit/credit in SHKZG).

❌ Wrong

Using BLDAT or BUDAT for fraud investigation: "Show me documents posted on 31-Oct-2024." Both these dates can be freely entered by the user. A fraudster can set BUDAT to any date in the open period.

✅ Right

For fraud investigation, always use BKPF.CPUDT (entry date) and BKPF.CPUTM (entry time). These are set by the SAP system clock and cannot be changed by any end user -they are the most trustworthy date fields in the entire FI module.

❌ Wrong

Forgetting GJAHR (Fiscal Year) in the join: JOIN bseg ON bkpf.bukrs = bseg.bukrs AND bkpf.belnr = bseg.belnr. Document numbers can repeat across fiscal years! Without GJAHR you get cross-year data collisions and completely wrong results.

✅ Right

Always join on all three key fields: ON bukrs AND belnr AND gjahr. The three-part key is what makes every document globally unique in the system. This is the most important technical fact about the BKPF-BSEG relationship.

🎓

Top 3 Interview Questions on BKPF and BSEG:

Q1: "What is the relationship between BKPF and BSEG?" - One-to-many. One row in BKPF (the document header) links to two or more rows in BSEG (the line items). They are joined using Company Code + Document Number + Fiscal Year.

Q2: "A document was posted with the wrong amount. How do you fix it in SAP?" - You cannot edit BKPF or BSEG directly. You must reverse the original document (FB08 -creates a mirror image) and post a new correct document. Both the original and the reversal stay permanently in the tables. BKPF.STBLG on the original will hold the reversal document number.

Q3: "Where is the username of the person who posted a document stored?" - In BKPF.USNAM (Username). The T-code they used is in BKPF.TCODE. The exact time it was posted is in BKPF.CPUDT and BKPF.CPUTM. All of this is in the document header table, not in BSEG.

📚 Complete BKPF vs BSEG Quick Reference - Everything on One Page

BKPF vs BSEG - Side-by-Side Comparison
QuestionBKPF (Header)BSEG (Line Items)
What does it store?The "cover page" of a financial document - overall identity and contextEach individual accounting line -every debit and credit with amounts
How many rows per document?Always exactly one row per documentAt least two rows per document (minimum one debit + one credit); often many more
Does it have amounts?No. BKPF has no amount fields at allYes. DMBTR = local currency amount. WRBTR = document currency amount
Primary keyBUKRS + BELNR + GJAHR (3 fields)BUKRS + BELNR + GJAHR + BUZEI (4 fields - adds line item number)
Who is in this table?USNAM (who posted), TCODE (which screen used)LIFNR (vendor), KUNNR (customer), HKONT (G/L account)
Which dates are here?BLDAT (document date), BUDAT (posting date), CPUDT (entry date), CPUTM (entry time)AUGDT (clearing date), ZFBDT (baseline payment date) -mostly accounting dates
Can it be changed?No. Immutable once posted. Can only be reversed using FB08.No. Same rule -immutable. AUGDT and AUGBL are filled when cleared, not changed.
T-Code to viewFB03 (header tab), SE16N on BKPFFB03 (line items tab), FBL1N, FBL3N, FBL5N, SE16N on BSEG
Related/shadow tablesVBKPF = parked document headers (not yet posted)VBSEG = parked line items · BSIS = open G/L items · BSAS = cleared G/L items · BSIK = open vendor · BSAK = cleared vendor · BSID = open customer · BSAD = cleared customer
Best used forFinding who posted something, when, which T-code, what document type - the "identity check"Finding what amounts moved, to which accounts, debit or credit -the "money trail"
Related Tables You Will Always See Alongside BKPF and BSEG
TableWhat It StoresWhen You Use ItLinked To
VBKPFParked document headers - invoices entered but waiting for approval before they hit the booksMonth-end reconciliation when SAP balance differs from vendor statement -parked items are missing from BKPFPosted via FBV0 → moves to BKPF
BSISG/L Open Items - a "view" or subset of BSEG showing only lines that have not yet been cleared (AUGDT is blank)G/L account reconciliation, finding outstanding itemsSubset of BSEG · cleared items go to BSAS
BSASG/L Cleared Items - G/L lines that have been matched and closed. AUGDT has a date in it.Checking that payments cleared correctly, producing cleared items reportsSubset of BSEG · same data, different selection view
BSIKOpen Vendor Items - BSEG lines for vendors that have not yet been paid (invoices still outstanding)AP aging report, payment run selection, vendor statement matchingSubset of BSEG (KOART = 'K', AUGDT blank)
BSAKCleared Vendor Items - vendor BSEG lines that have been paid. The payment document number is in AUGBL.Tracing which invoices a payment cleared, duplicate payment investigationSubset of BSEG (KOART = 'K', AUGDT filled)
BSIDOpen Customer Items - money customers owe you that has not yet been receivedAR aging report, dunning, customer statementSubset of BSEG (KOART = 'D', AUGDT blank)
BSADCleared Customer Items - customer invoices that have been paid and matchedConfirming customer payments were applied correctlySubset of BSEG (KOART = 'D', AUGDT filled)
BKPF.STBLGNot a separate table - it is a field inside BKPF. Stores the reversal document number. Empty = never reversed.Checking if a document has been cancelled, finding reversal pairs for auditLives in BKPF itself
T-Codes That Read BKPF and BSEG - What Each One Shows You
T-CodeNameWhat You SeeMain Tables Used
FB03Display DocumentOne complete accounting document - header + all line items side by sideBKPF + BSEG
FBL1NVendor Line Item DisplayAll open and cleared invoices and payments for one or more vendorsBSEG (KOART = 'K') + BKPF for dates
FBL3NG/L Account Line Item DisplayAll postings to a specific general ledger account - open and clearedBSIS + BSAS (subsets of BSEG) + BKPF
FBL5NCustomer Line Item DisplayAll open and cleared invoices and receipts for one or more customersBSEG (KOART = 'D') + BKPF
FB08Reverse DocumentCreates a reversal - new rows in both BKPF and BSEG, original BKPF.STBLG filledCreates in BKPF + BSEG
FBV3Display Parked DocumentInvoices entered but not yet approved - not in BKPF/BSEG yetVBKPF + VBSEG
F110Automatic Payment RunBulk vendor payments - generates KZ documents in BKPF/BSEG and fills BSEG.AUGDTCreates in BKPF + BSEG · REGUH + REGUP
SE16NTable BrowserRaw table data - used by auditors and developers to directly query BKPF or BSEG with any filter combinationDirect access to BKPF and/or BSEG
SQVIQuick ViewerCreate simple JOIN reports between BKPF and BSEG without writing ABAP - ideal for one-off audit queriesBKPF JOIN BSEG

The One Sentence Summary You Need for Any Interview: BKPF is the document's identity card - one row telling you who posted it, when, and what kind it is, with no amounts. BSEG is the document's contents -one row per accounting line showing which accounts moved, how much, and which direction. You always need both. You always join them on Company Code + Document Number + Fiscal Year. BKPF is where you start every query. BSEG is where you find the money.