SAP tableObjectEKBEModuleMM_P2P

EKBE table — Purchase Order History Table EKBE

EKBE is the purchase order history table. Each row records one posted follow-on event against a PO item, for example a goods receipt, an invoice receipt, an order acknowledgment, or a subsequent debit or credit, tagged with a transaction/event type field so the same PO item can accumulate many rows across its life.

This page covers what a single EKBE row represents, the fields consultants actually query, and how the table joins to the PO, the goods receipt document, and the invoice document. The main focus is the recurring analysis mistakes: mixing event types in aggregations, missing reversal rows, and confusing quantity received with quantity still open.

Published 15 Sept 2026· 1,173 words

What it stores

One row in EKBE represents a single posted follow-on transaction against one item of a purchase order or scheduling agreement: a goods receipt, an invoice receipt, an order acknowledgment, a shipping notification, a delivery, a revaluation, or a subsequent debit or credit. The table is commonly called purchase order history. It does not describe the purchase order itself, only what has actually happened against it after creation, so a PO with no goods receipt and no invoice yet has no rows here at all. Over the life of a PO item there will typically be many rows: one per partial goods receipt, one per invoice, and an extra row for every reversal of either. The transaction/event indicator on each row is what tells a reader which kind of event it is looking at.

Key fields

  • MANDT - client
  • EBELN - purchasing document number
  • EBELP - item number within the purchasing document
  • ZEKKN - sequential number of the account assignment or delivery cost history line
  • VGABE - transaction/event type identifying what kind of history record the row is (goods receipt, invoice receipt, order acknowledgment, shipping notification, delivery, revaluation, subsequent debit/credit)
  • GJAHR - fiscal year of the referenced material or accounting document
  • BELNR - number of the referenced document, e.g. the material document or invoice document
  • BUZEI - line item number in the referenced document
  • BWART - movement type, populated for goods movement history rows
  • BEWTP - category of the history record, further qualifying whether it is a receipt, invoice, credit memo, or return
  • MENGE - quantity posted in this history record, in the PO's order unit
  • DMBTR - amount posted in company code local currency
  • WRBTR - amount posted in document currency
  • BUDAT - posting date of the referenced document
  • BLDAT - document date of the referenced document

How it joins the data model

  • EKBE-EBELN = EKPO-EBELN and EKBE-EBELP = EKPO-EBELP, linking a history row back to its PO item
  • EKBE-EBELN = EKKO-EBELN, linking back to the PO header
  • EKBE-BELNR = MKPF-MBLNR and EKBE-GJAHR = MKPF-MJAHR, with EKBE-BUZEI = MSEG-ZEILE, for rows where VGABE marks a goods movement
  • EKBE-BELNR = RBKP-BELNR and EKBE-GJAHR = RBKP-GJAHR, with EKBE-BUZEI = RSEG-BUZEI, for rows where VGABE marks an invoice
  • EKBE-EBELN/EBELP lines up conceptually with EKET-EBELN/EBELP when comparing history against confirmed schedule line quantities, though the schedule line number itself is not a shared key

How to read it safely

MANDT first, as with any standard table. Never scan EKBE without an EBELN restriction; on a procurement-heavy system it grows without bound and there is no secondary index that rescues a broad scan. The natural access path is EBELN plus EBELP, which is what the table is built around. If a search is date-driven, go through the referenced document instead, using MKPF-BUDAT for goods receipts or RBKP-BUDAT for invoices, rather than filtering on EKBE-BUDAT in bulk, since that field is a redundant copy and performs poorly as a primary filter. Restricting on VGABE early keeps the result set to a single event type and prevents goods receipt and invoice rows from being aggregated together by accident.

How to prove it in the data

Symptom: an invoice is blocked for quantity variance on a PO item. Select EKBE for that EBELN and EBELP with VGABE = 1 (goods receipt), sum MENGE net of any reversal rows identified by the offsetting movement type, and compare that figure to the sum of MENGE where VGABE = 2 (invoice) for the same item. A mismatch between the two confirms the variance the system is complaining about. If the two totals already agree, the block is being driven by a tolerance key setting in invoice verification, not by anything visible in the PO history itself.

ECC vs S/4HANA

EKBE continues to exist as a transparent table in S/4HANA with its original structure and role as PO history; it has not been retired and there is no compatibility view standing in front of it for this purpose. The material documents underlying its goods receipt rows are technically sourced from the newer document store in current S/4HANA releases, but the application logic that writes EKBE behaves the same way, so reporting or programs built against EKBE do not need rework after migration.

Common pitfalls

  • Summing MENGE across every VGABE value without separating goods receipt rows from invoice rows produces a meaningless total, since the two represent different stages of fulfillment.
  • A reversal does not delete the original EKBE row, it adds a new one with an offsetting movement type; a plain SUM(MENGE) that ignores reversal pairs overstates the true received or invoiced quantity.
  • Multiple account assignment lines on a PO item generate multiple ZEKKN values for what is physically one event; counting rows instead of grouping by the underlying referenced document inflates the apparent number of receipts or invoices.
  • EKBE does not store an open quantity or open value field; the open balance has to be derived by subtracting cumulative history from the target quantity on EKPO or EKET, and the last row in EKBE is often mistaken for that balance.
  • VGABE and BEWTP are easily confused, one gives the general transaction category and the other refines the same row further; filtering on the wrong one returns a plausible-looking but wrong subset with no error raised.
  • Subcontracting and stock transport order history use movement types that do not match the intuitive expectations from a standard goods receipt, so assuming a fixed movement type for a given VGABE across all PO categories leads to misreads.
  • The existence of a PO history row does not guarantee an item is still eligible for invoicing; when goods-receipt-based invoice verification is active, a specific receipt line already fully invoiced will not be offered again in MIRO even though its EKBE row is still there.

Whose problem this is

Interpretation of goods receipt rows in PO history sits with the MM or procurement functional consultant; invoice rows sit with the FI-AP or invoice verification consultant. A mismatch between receipt and invoice quantities usually needs input from both sides rather than one. This is a functional reading question, not a basis or authorization one.

Related SAP objects

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

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