EKPO table — Purchasing Document Item Table
EKPO stores one row per item of a purchasing document header held in EKKO: purchase orders, contracts, scheduling agreements, RFQs. It holds material, plant, quantity, price, account assignment category, item category and completion indicators for that line. It does not hold cumulative goods receipt or invoice quantities; those live in EKBE.
EKPO is the item-level table underneath every purchasing document header in EKKO. This page covers which fields actually carry the answer to a status question, the joins consultants write daily against EKET, EKKN and EKBE, and the recurring mistake of reading order-time values or completion flags as if they reflect current logistics status.
Published 15 Sept 2026· 1,103 words
What it stores
One row in EKPO represents a single line item of a purchasing document: material or service, plant, storage location, quantity ordered, price conditions at header-line level, account assignment category, item category, and a set of status indicators showing whether the item is deleted, delivery-complete, or invoice-complete. The document header (vendor, purchasing organization, document type, currency) sits in EKKO and is not repeated here. A scheduling agreement or contract item in EKPO typically carries a nominal or zero target quantity, with the real delivery schedule sitting in EKET. Text items and some service items carry no material master reference at all, which is normal, not a data error. EKPO is the table most people mean when they say a purchase order line.
Key fields
- MANDT - client
- EBELN - purchasing document number, links to header EKKO
- EBELP - item number within the document
- MATNR - material number, blank for text or free-form service items
- TXZ01 - short text describing the item
- WERKS - plant
- LGORT - storage location
- MATKL - material group
- MENGE - order quantity
- MEINS - order unit of measure
- NETPR - net price per price unit
- PEINH - price unit that NETPR must be divided by to get the true unit price
- NETWR - net order value of the item in document currency
- KNTTP - account assignment category, blank for stock items, K/F/etc for cost or order assigned items
- PSTYP - item category, standard, consignment, subcontracting, third-party, and so on
- LOEKZ - deletion indicator, set at item or propagated from header
- ELIKZ - delivery completed indicator
- EREKZ - final invoice indicator
- WEBRE - goods-receipt-based invoice verification flag
- BANFN, BNFPO - requisition number and item that generated this PO item, if one exists
How it joins the data model
- EKPO-EBELN = EKKO-EBELN (item to header)
- EKPO-EBELN, EKPO-EBELP = EKET-EBELN, EKET-EBELP (delivery schedule lines)
- EKPO-EBELN, EKPO-EBELP = EKKN-EBELN, EKKN-EBELP (account assignment detail)
- EKPO-EBELN, EKPO-EBELP = EKBE-EBELN, EKBE-EBELP (goods receipt and invoice history)
- EKPO-MATNR = MARA-MATNR (material master)
- EKPO-MATNR, EKPO-WERKS = MARC-MATNR, MARC-WERKS (plant data for the material)
- EKPO-BANFN, EKPO-BNFPO = EBAN-BANFN, EBAN-BNFPO (originating requisition, when the PO was requisition-driven)
How to read it safely
The primary key is MANDT plus EBELN plus EBELP, so the client field is implicit and every selection must be scoped by it. Never select on MATNR alone across a live system; it is not selective and will scan the full item population. Always restrict by an EBELN value or range where the document number is already known, or join through EKKO first and filter on document type, purchasing organization or creation date before pulling EKPO rows. Use LOEKZ equal to space to exclude deleted items and ELIKZ/EREKZ only as a first-pass filter, not as proof of physical completion. On any classic database the table is large enough that an unrestricted MATNR or WERKS scan is a real performance problem; on HANA it is tolerable but still wasteful.
How to prove it in the data
Symptom: a purchase order line still shows as open in a reporting list even though the business believes goods receipt and invoice are both done. Select EKPO for the known EBELN and EBELP and check ELIKZ and EREKZ directly. If both are blank, the system considers the item open regardless of what was posted, so the next step is comparing EKPO-MENGE against the cumulative quantities in EKBE for that same EBELN/EBELP, because a partial or reversed posting will leave the completion flags unset even after real-world delivery.
ECC vs S/4HANA
EKPO remains a physical table in S/4HANA and continues to hold purchasing document items; it was not retired or replaced by a compatibility view at the persistence layer the way some finance tables were. Some fields tied to older price determination or classic account assignment scenarios are considered legacy in newer procurement scenarios, and additional item categories exist for advanced procurement processes, but the table structure and its role as the item counterpart to EKKO is unchanged. Reporting layers built on CDS views typically read through EKPO underneath.
Common pitfalls
- NETWR is the order value as last calculated on the document line, not what was actually goods-receipted or invoiced; that comparison requires EKBE, not EKPO.
- NETPR is meaningless without PEINH; dividing NETPR by the price unit is mandatory to get the real per-unit price, and skipping this step produces prices inflated or deflated by whatever the price unit happens to be.
- LOEKZ blank does not guarantee the item is fully live; deletion can be set at header level in EKKO and not always reflect cleanly in every downstream report built only from EKPO.
- ELIKZ and EREKZ can lag real logistics events. Reversed goods receipts, manual overrides, or blocked invoices can leave these flags out of sync with what actually happened, so treat them as the system's completion opinion, not an audit trail.
- Blank MATNR is not corrupt data. Text items, many service items, and some account-assigned free-text lines never carry a material reference by design.
- EKPO carries no cumulative GR or invoiced quantity field. Anyone querying EKPO for total received or total invoiced quantity is looking in the wrong table; that belongs in EKBE.
- For scheduling agreements and contracts, MENGE in EKPO is often nominal or zero. The quantities that matter operationally are in EKET, and reading EKPO alone will understate or misstate delivery volume.
Whose problem this is
A procurement or MM consultant owns interpretation of item status, item category and account assignment fields. Pricing and tax-relevant fields are often shared with FI or controlling when the item carries a cost object. The business buyer or procurement process owner is the right person to confirm intent behind an unusual item category or account assignment choice found in the data.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tables/ekpoERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.