Invoice Verification Deep Dive: Quantity and Price Variances, Payment Blocks, MRBR and GR/IR
A supplier invoices more than was received, at a higher price. MIRO posts the invoice but blocks it for payment for both reasons; GR/IR shows the open quantity; the missing goods arrive and clear it; the buyer accepts the price and MRBR releases the invoice for payment.
Educational content. SAP behaviour varies by configuration and release. Spotted something off? Report it.
Digital twin
01First delivery: 80 of 100 EA
80 EA arrive and are received with 101. GR/IR is credited ₹80,000.
Business scenario
PO 4500001400 orders 100 EA of RM-1000 at ₹1,000. Only 80 EA have arrived when the supplier invoices all 100 EA at ₹1,050.
All companies, numbers and documents are fictional demo data.
Step-by-step flow
- 01
First delivery: 80 of 100 EA open in twin
80 EA arrive and are received with 101. GR/IR is credited ₹80,000.
GR/IR now expects an invoice for 80 EA at ₹1,000.
- 02
Invoice for 100 EA at ₹1,050 open in twin
The supplier invoices 100 EA at ₹1,050 = ₹1,05,000. Received so far: 80. Agreed price: ₹1,000.
Two variances: quantity (invoiced 100, received 80) and price (₹1,050 vs ₹1,000).
- 03
What do you do with the invoice? open in twin
Both quantity and price are out of tolerance.
The supplier's claim is real and must be in the books; whether to pay it is a separate decision.
- 04
Hiding the variance open in twin
Editing the PO to match the invoice removes the price check. The 80 EA already received were valued at ₹1,000, so GR/IR no longer balances and needs manual clearing later.
A price increase should be a deliberate approval (release of the block), not a silent PO edit — otherwise the control that caught it is defeated.
- 05
Post the invoice — blocked Q and P open in twin
Vendor credited ₹1,05,000; GR/IR debited ₹1,00,000; ₹5,000 price difference. Payment block set.
The liability is recorded, but the payment run skips the invoice while it is blocked.
- 06
The missing 20 EA arrive open in twin
20 EA are received. GR/IR is credited ₹20,000 and now balances. The quantity block reason no longer applies.
GR/IR is now balanced: 100 received, 100 invoiced.
- 07
Release the invoice (MRBR) open in twin
MRBR releases the quantity block automatically (its cause is gone). The buyer confirms the new price, so the price block is released manually.
Payment only happens after someone has accepted each variance.
- 08
Payment run open in twin
F110 pays ₹1,05,000 to the supplier.
End of the procure-to-pay cycle with variances.
- 09
Invoice settled open in twin
GR/IR balanced, invoice paid, ₹5,000 price difference recognised.
GR/IR is the control account that proves receipts and invoices match.
SAP documents
Stock impact
| Step | Plant / SLoc | Stock type | MvT | Change |
|---|---|---|---|---|
| First delivery: 80 of 100 EA | 1000 / 0001 | Unrestricted use | 101 | +80 EA |
| The missing 20 EA arrive | 1000 / 0001 | Unrestricted use | 101 | +20 EA |
Accounting impact
Goods receipt for 80 EA
TypicalFirst delivery: 80 of 100 EA
- Dr Inventory — raw materials (BSX)₹80,000
- Cr GR/IR clearing (WRX)₹80,000
Valued at the PO price.
Invoice with quantity and price variance
TypicalPost the invoice — blocked Q and P
- Dr GR/IR clearing (WRX)₹1,00,000
- Dr Price difference (PRD)₹5,000
- Cr Supplier 100001 (payable)₹1,05,000
GR/IR is debited for the invoiced quantity at the PO price; the excess price goes to a price-difference account because RM-1000 is under standard price control in this demo (with moving average price and stock on hand it would typically go to inventory). The invoice is posted with blocking reasons for payment.
Goods receipt for the remaining 20 EA
TypicalThe missing 20 EA arrive
- Dr Inventory — raw materials (BSX)₹20,000
- Cr GR/IR clearing (WRX)₹20,000
Clears the open GR/IR quantity.
Payment of the released invoice
TypicalPayment run
- Dr Supplier 100001 (payable)₹1,05,000
- Cr Bank / outgoing payments clearing₹1,05,000
The payable is cleared against the bank (or bank clearing) account.
Typical conceptual flow. Actual G/L accounts and posting behaviour depend on material valuation, automatic account determination and system configuration.
Movement type
- 101GR for purchase orderReversal: 102
Checks supplier invoices against what was ordered and received, records the liability, holds payment for unaccepted variances, and keeps GR/IR as the control between receipts and invoices.
Transactions & Fiori apps
- MIRO — Enter Incoming Invoice
- MRBR — Release Blocked Invoices
- MR11 — GR/IR Account Maintenance
- MB5S — List of GR/IR Balances
- F110 — Payment Run
- Supplier Invoices List
- Manage Blocked Supplier InvoicesAvailability depends on release and scope
- Monitor GR/IR Account BalancesAvailability depends on release and scope
Differences by SAP version
MIRO, MRBR, MR11 as described; GR/IR is reported per vendor/PO.
Same transactions; Fiori apps add GR/IR monitoring with responsibility assignment.
Invoices are processed through Fiori apps; tolerance configuration via self-service configuration.
Configuration
Tolerance keys (OMR6)
Configuration dependentPP (price), DQ (quantity), BR/BW and others set limits that block or prevent posting.
GR-based invoice verification
Configuration dependentMatches invoices per goods receipt; the PO item indicator controls it.
Price control of the material
TypicalStandard price sends price differences to PRD; moving average price sends them to inventory while stock covers the quantity.
Prerequisites
- Purchase order with goods receipt
- Tolerance keys for the company code
- Payment terms and payment run setup
Master data
- Purchase order
- Agreed quantity and price; GR-based IV indicator.
- Supplier master
- Payment terms and payment methods.
Organizational structure
- Company code 1000
- Plant 1000
Tables
| Table | Description |
|---|---|
| RBKP / RSEG | Invoice header / item (incl. blocking reasons) |
| EKBE | PO history: receipts and invoices |
| ACDOCA | Universal journal (S/4HANA) |
Integration
- FIPayables, GR/IR clearing, price differences and the payment run.
Common errors
“Invoice blocked for payment”
Likely causes: Price or quantity variance beyond tolerance; Invoice before goods receipt; Manual payment block
Where to look: MRBR · Invoice item blocking reasons · Tolerance keys
“GR/IR account does not clear”
Likely causes: Quantities received and invoiced differ permanently; PO price changed after receipt
Where to look: MB5S · PO history · MR11
Troubleshooting
Something went wrong? Work through these checks in order. They are diagnostic questions, not configuration instructions — confirm changes with your system owner.
CHECK 1
Blocked invoice
- Which blocking reason is set?
- Has the missing goods receipt arrived?
- Has the buyer approved the price?
CHECK 2
GR/IR
- Run MB5S for the PO
- Compare PO history quantities
Interview questions
What happens in MIRO when the invoice price is higher than the PO price?
Within tolerance, the invoice posts normally and the difference goes to inventory (moving average price with stock coverage) or to a price-difference account (standard price). Beyond the blocking tolerance, the invoice posts with blocking reason P and is held for payment until released in MRBR; beyond the posting tolerance it cannot be posted at all.
What is GR/IR clearing and how is it kept clean?
A clearing account credited at goods receipt and debited at invoice receipt for the same PO quantities and prices. Balances show received-not-invoiced or invoiced-not-received items. MB5S lists them; MR11 clears differences that will never be settled, posting them to a GR/IR clearing difference account.
How are blocked invoices released?
Through MRBR (or the Fiori app). Blocks whose cause has disappeared — e.g. the missing goods have arrived — can be released automatically; others are released manually after approval, or resolved by a credit memo.
Quiz
References
- SAP SE — SAP Help Portal: Logistics Invoice Verification (source)
- SAP SE — SAP Help Portal: Tolerance Limits and Blocking Reasons (source)
- SAP SE — SAP Help Portal: GR/IR Clearing Account Maintenance (source)
Explanations are original. They summarize standard behaviour; always validate against your system's release and configuration.
Version history
| Version | Change |
|---|---|
| 1.0.0 | Initial version. |