MB31 — Goods Receipt for Order
MB31 posts a goods receipt against a production order, process order, or maintenance order, typically with movement type 101. Unlike MIGO's purchase-order-driven flow, MB31 is order-driven: it checks the order's status and tolerances, not a PO history, which is the root of most confusion when consultants expect PO-style validation.
MB31 is the classic transaction for posting a goods receipt tied to a production, process, or maintenance order rather than a purchase order. This page covers the order-driven posting logic, the tables the save writes to, and the diagnostic categories that account for most MB31 failures: order status blocks, batch determination gaps, movement type mismatches, and valuation variance surprises.
Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,103 words
Purpose
MB31 posts a goods receipt into inventory against an internal order, most commonly a production order or process order, using movement type 101 by default (102 for reversal). The receipt increases stock, updates the order's delivered quantity, and triggers valuation based on the order's cost estimate or standard price. The one structural fact that explains most confusion: MB31 validates against the order (its status, its component list, its tolerance limits), not against a purchase order history. Consultants who come from a purchase-to-pay background expect PO-style three-way matching and are surprised when MB31 accepts quantities the order's own settings do not flag as an issue, because there is no PO to compare against.
When it is used
MB31 sits at the confirmation-and-receipt end of production execution, used when finished or semi-finished goods produced against a production or process order need to be booked into stock without going through the order confirmation transaction's automatic goods receipt option. It is also used for goods receipts against maintenance orders where spare parts or refurbished components are received back into stock. A consultant reaches for MB31 specifically when the goods receipt needs to be posted independently of confirmation, or when troubleshooting a receipt that MIGO's order-related tab did not handle as expected. In newer implementations MIGO or a Fiori manufacturing app is preferred for the same posting; MB31 remains the fallback when the order type or movement scenario is not yet mapped to the newer interface.
How to use it in practice
- Call MB31 and enter the movement type, normally 101 for a standard receipt or 102 for its reversal.
- Enter the order number the receipt is against; the system pulls plant, storage location defaults, and the order's material.
- Confirm or override the storage location and, if the material is batch-managed, enter or trigger batch determination.
- Enter the quantity received; check it against the order's open quantity if a partial receipt is expected.
- Review the item overview screen for valuation and account assignment proposals before posting.
- Post the document and note the material document number for later verification or reversal.
Key data objects
- MKPF - material document header, one row per posting with document number, date, and posting period.
- MSEG - material document line items, the actual movement: material, plant, storage location, quantity, movement type, order number.
- AUFM - a reporting view over goods movements for orders, used for order-related movement history.
- RESB - reservation table; consumption postings against the order's component reservations are updated when relevant.
- MBEW - material valuation; the receipt updates moving average or standard cost stock values and quantities.
- AFPO - production order item; delivered quantity and status fields are updated on posting.
How to prove it in the data
In SE16 or SE16N, open MSEG filtered on BWART = 101 (or 102 for the reversal) and AUFNR equal to the order number in question. Join to MKPF on MBLNR and MJAHR to get posting date and user. Compare the summed quantity against the order's delivered quantity in AFPO to confirm whether the posting actually reduced the open order quantity, and check RESB for the same order to see whether component consumption moved in step with the receipt.
ECC vs S/4HANA
MB31 still works on S/4HANA and posts through the same logic, though the underlying storage is the universal journal's MATDOC table with MKPF and MSEG served as compatibility views. SAP's direction is toward MIGO for order-related receipts and toward Fiori apps for production execution, which present the same posting with a more current interface, but no functional change has been made to what MB31 itself checks or writes.
Common pitfalls and how to diagnose them
- Order status block: the order is not released, is already technically complete, or is locked, and MB31 rejects the posting with a status error; check the order's system status list before touching movement type or quantity.
- Batch determination gap: the material is batch-managed but no batch strategy is configured for the plant or storage location, so the user is stuck at the batch entry screen with no proposal; verify batch management flag on the material master against the classification and strategy setup rather than assuming the user simply forgot to type a batch number.
- Movement type mismatch: a user selects 101 when the scenario calls for 102, or vice versa, producing a stock increase or reversal that does not match the physical event; always check BWART against MSEG for the actual posting, not against what the user intended to enter.
- Valuation variance surprise: for materials on standard price, a receipt at an actual cost different from standard throws a price difference into a variance account, which looks like an error to a consultant expecting a clean stock posting; this is expected behavior for standard-priced materials and should be checked against MBEW's price control indicator before escalating.
- Missing plant or storage location assignment: the order references a plant or storage location combination not maintained for the material, producing an assignment error at posting; check the material master's plant and storage data before assuming it is a user input mistake.
- Reversal complications: reversing an MB31 posting through MBST fails if the material document is already referenced by a settlement or a follow-on confirmation; check for downstream postings against the order before attempting a reversal.
Whose problem this is
This is a functional MM or PP problem first; the consultant investigating an MB31 issue needs to check order status, movement type configuration, and valuation settings before involving anyone else. ABAP involvement is limited to custom user exits or enhancement logic wrapped around the posting; Basis is rarely involved except for authorization object failures. A good handover includes the order number, movement type, material document number if one was created, and the exact error message text.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tcodes/mb31ERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.