SAP tableObjectAFPOModulePP_M2D

AFPO table — Production Order Item Table

AFPO stores the item-level data of a production or process order: the material being produced, the plant, the order quantity, batch and storage location, goods receipt quantity, and the make-to-order link to a sales order. Each row is one order item, usually item 0001 for the main product, with additional items for co-products or by-products. It joins to AFKO by order number.

AFPO holds the item data of production and process orders, one level below the order header in AFKO. This page covers the fields consultants actually query, the joins into confirmations, reservations, and BOM tables, and the reflex mistakes made when quantities in AFPO do not match what the shop floor or finance sees.

Published 16 Sept 2026· 1,094 words

What it stores

One row in AFPO represents one item of a production or process order, identified by order number and item number. For a standard discrete production order there is normally a single item, POSNR 0001, describing the material to be produced, its plant, the planned order quantity, and the unit of measure. Process orders can carry multiple items when co-products or by-products are configured, each getting its own POSNR. AFPO also carries the goods receipt quantity accumulated so far, the storage location and batch the receipt is expected to go into, and, for make-to-order or project stock scenarios, the link back to the originating sales order item. It does not hold operations, components, or costs; those live in separate order tables joined through the order number.

Key fields

  • MANDT - client
  • AUFNR - order number, links to the order header
  • POSNR - order item number, usually 0001 for the main product, higher for co/by-products
  • MATNR - material number of the item being produced
  • WERKS - plant of the order
  • CHARG - batch assigned to the item, populated once a batch is determined
  • LGORT - storage location the goods receipt is posted to
  • AMEIN - unit of measure for the order item quantities
  • PSMNG - order quantity for the item, in the order unit of measure
  • WEMNG - quantity already received against this item
  • KDAUF - sales order number, populated for make-to-order or individual customer stock
  • KDPOS - sales order item number corresponding to KDAUF
  • ELIKZ - delivery completed indicator for the item
  • XLOEK - deletion indicator for the item

How it joins the data model

  • AFPO-AUFNR = AFKO-AUFNR, joining item data to the order header for dates, order type, and status
  • AFPO-AUFNR = AFRU-AUFNR, pulling confirmations posted against the order
  • AFKO-RSNUM = RESB-RSNUM, following the header reservation number to the component list, since AFPO does not carry a reservation number itself
  • AFPO-MATNR and AFPO-WERKS = MAST-MATNR and MAST-WERKS, when tracing which BOM was exploded for the order material
  • AFKO-AUFPL = AFVC-AUFPL, reaching the operations of the order, again via the header rather than directly from AFPO

How to read it safely

Always restrict on MANDT and, in almost every real query, on AUFNR or a range of AUFNR built from AUFK selection first, since AFPO on its own has no date or plant-only entry point that is selective enough. Selecting by WERKS and MATNR alone scans every order ever created for that material in that plant, which on a mature production system is a large and slow read. If the requirement is to find orders for a material, go through AFKO or a status-based selection first and use AFPO only to pull the item quantities and batch once the order number is known. Do not assume POSNR 0001 always exists in isolation without checking the header status, a technically completed or deleted order still leaves its AFPO row in place.

How to prove it in the data

Symptom: the goods receipt for a production order looks smaller than what was confirmed on the shop floor. Selection: read AFPO for the order number and item, compare WEMNG against PSMNG to see the received quantity versus the planned quantity, then cross-check AFRU for the same AUFNR to see the confirmed yield quantity. A gap between AFRU confirmed quantity and AFPO WEMNG points to a goods receipt that was never posted or was posted with a quantity variance, not a confirmation problem.

ECC vs S/4HANA

AFPO remains a standard transparent table in S/4HANA with essentially the same structure and role it had in ECC. There is no compatibility view replacing it for general use, and custom reports built against AFPO continue to work. What changes in S/4HANA is more the surrounding process, since order creation and confirmation flows are increasingly exposed through Fiori apps that write to the same underlying tables, so the data in AFPO is unchanged even where the transaction used to create it looks different.

Common pitfalls

  • Treating PSMNG as the current, live order quantity. It is the order quantity as last set at header level, and quantity changes on the order do not always retroactively resync every downstream calculation that already read the original value.
  • Assuming WEMNG equals the quantity confirmed on the shop floor. WEMNG only moves on goods receipt postings; a fully confirmed order with no goods movement yet will show WEMNG at zero while AFRU already shows completed operations.
  • Reading AFPO to find order components. Components live in RESB, reached through the header reservation number in AFKO, not through AFPO.
  • Expecting one row per order. Process orders with co-products or by-products carry multiple AFPO rows per AUFNR, and a query that assumes POSNR 0001 is the only item will silently drop the others.
  • Using KDAUF and KDPOS in AFPO as the general sales order link for every order. It is only populated for make-to-order, project stock, or individual customer stock scenarios; for stock orders it stays blank, and its absence does not indicate a data error.
  • Forgetting that a deleted order (XLOEK set) still has its AFPO row. Reports that filter only on order type or plant without checking deletion and status flags will include orders that were never meant to be produced.

Whose problem this is

Production planning and shop floor control own questions about AFPO content, since order quantities, batches, and storage locations are PP configuration and master data outcomes. Where KDAUF and KDPOS are involved, the sales order link is a joint question between PP and SD, because the demand that created the order originates on the sales side.

Related SAP objects

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

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