Invoice Price Variance Explained
Invoice price variance explained: how SAP's M8 082–085 messages work, why a whole invoice is blocked for payment, and when the real cause is units.
Invoice price variance is the gap between the price a supplier billed and the price your ERP expected — the net order price, measured per unit. When the gap crosses a configured tolerance, the system blocks the invoice for payment rather than paying a figure nobody agreed to.
In SAP, that comparison is literal arithmetic: the invoice price is the invoice value divided by the invoice quantity, checked against the net order price on the purchase order. If the two differ by more than the limit set on tolerance key PP, SAP raises one of the M8 082–085 messages and holds the invoice for payment under blocking reason price variance. The same idea drives invoice matching in Dynamics 365 and every other three-way-match system. This entry explains what the variance is, how the SAP message family is structured, why a single bad line can freeze a whole invoice, and the one case where the message says price but the real cause is units.
Definition
Invoice price variance is a check inside sachliche Rechnungsprüfung — the factual stage of invoice verification, where each line on a supplier invoice is reconciled against the purchase order and the goods receipt. The system recomputes a per-unit invoice price (invoice value ÷ invoice quantity) and compares it to the net order price. A difference inside tolerance posts and pays silently; a difference beyond tolerance becomes a variance that blocks the invoice for payment.
In SAP the tolerance lives on key PP (price variance), maintained in transaction OMR6 per company code. The variance surfaces through a family of four messages that split along two axes — too high versus too low, and an absolute limit versus a percentage limit on the same key.
| Message | Short text (EN) | Limit type | Direction |
|---|---|---|---|
| M8 082 | `Price too high (tolerance limit of & & exceeded)` | Absolute (`& &`) | Invoice price above the order price |
| M8 083 | `Price too high (tolerance limit of & % exceeded)` | Percentage (`& %`) | Invoice price above the order price |
| M8 084 | `Price too low (below tolerance limit of & &)` | Absolute (`& &`) | Invoice price below the order price |
| M8 085 | `Price too low (below tolerance limit of & %)` | Percentage (`& %`) | Invoice price below the order price |
The same text exists as M8 478 for credit memos, and M8 516 (Prices in & items were not reached or were exceeded) summarises a multi-line breach — its long text confirms that message types 082–085 are changeable in Customizing for Invoice Verification.
Why invoice price variance breaks invoice verification
The variance is easy to define and hard to live with, because it fails in ways that look like different problems. The first surprise is scope: SAP blocks the whole invoice for payment even if only one item shows a variance, so a single stale line freezes every clean line on the document. The second is that the block is a payment block, not a posting block — per the M8 083 long text, a posted-despite-variance document and its account movements post normally but carry a block indicator and cannot be paid until released in MRBR.
The third and most misdiagnosed is the units trap. The invoice price is a quotient, so anything that moves the denominator moves the price with no change to the agreed figure. A wrong order-price-unit conversion inflates the order price quantity, the computed invoice price drifts, and SAP reports a price variance for an invoice whose price is exactly right — the subject of the guide the error says price, the cause is units. The denominator is a unit of measure problem wearing a price label.
| Failure mode | What actually happens |
|---|---|
| One item breaches, the whole invoice is held | The entire invoice is blocked for payment even if only one line shows a variance — no partial pay of the clean lines |
| Payment block, not a posting block | The document and its account movements still post; a block indicator is set and the invoice cannot be paid until released |
| The price is right, the unit is wrong | A shifted order price quantity moves the computed invoice price with no change to the agreed price — the message says price, the cause is units |
| Tolerance set too loose | Setting every limit on key PP to *Do not check* accepts any variance, so genuine overcharges post and pay silently |
| Release without a fix | Releasing in MRBR pays this one invoice but leaves the cause in place, so the next invoice for that item fails the same way |
Messy vs. trusted: how a price variance is handled
| Messy — variance chased by hand | Trusted — variance resolved at the source |
|---|---|
| A buyer emails the vendor about a price the contract actually allows | Each line is validated against one agreed price before the invoice is even cut |
| Tolerance key PP is widened to clear a stubborn block | PP left strict; the conversion factor or price list is corrected so the variance never computes |
| Every blocked invoice is released one at a time in MRBR | The agreed price and units are resolved once, so future invoices post clean |
| Nobody can say which price-list version was in force on the invoice date | Every line carries the price, the unit and the source it was checked against |
How to catch invoice price variance across a supplier catalog
-
Read the message number, not just the block. M8 082 and M8 083 mean too high; M8 084 and M8 085 mean too low. The
& &pair is an absolute money limit, the& %pair a percentage — the fix for a 2% drift is not the fix for a flat overcharge. -
Recompute the invoice price the way SAP does. Divide the invoice value by the invoice quantity and compare it to the net order price. If the amount is right but the quotient is wrong, the quantity in the denominator is the fault, not the price.
-
Rule out the units trap. Check the order price unit and its conversion factor before touching any tolerance. A unit and dimension converter confirms whether a per-unit price is dividing against the right quantity in seconds.
-
Compare the billed price against the agreed list, not memory. Run the current supplier file against the last one with a price list diff so a changed price or unit is caught at intake, long before it becomes a blocked invoice.
-
Fix at the source, not the tolerance. Correct the price-list entry, conversion factor or order price unit so the variance stops computing. Keep PP strict and keep MRBR for genuine one-off exceptions, not as a daily release valve.
Related
Glossary
What Is Unit of Measure (UOM)?
Base, order and price units and the conversion factors that turn a correct price into a phantom variance.
Glossary
Canonical Product Record
The single trusted record that holds the agreed price every invoice line is checked against.
Glossary
Entity Resolution
Matching a supplier invoice line to the right catalog record before any price is compared.
Tool
Margin and Markup Calculator
Translate a price variance into the margin it actually costs across a line or an order.
Tool
Product Record Diff
Compare the invoiced record against the agreed one field by field to locate the drift.
Playbook
Map Supplier Attributes to Your Schema
Map supplier prices, units and conversion factors onto one canonical product model.
FAQ
What does invoice price variance mean in SAP?
It is the difference between the invoice price SAP computes and the net order price it expected. SAP derives the invoice price as the invoice value divided by the invoice quantity, then compares it against the net order price on the purchase order. When the difference exceeds the limit set for tolerance key PP in transaction OMR6, SAP raises a message in the M8 082 to M8 085 family and, on posting, blocks the invoice for payment with blocking reason price variance.
What is the difference between SAP messages M8 082 and M8 083?
Both say the price is too high, but they test different kinds of limit on the same tolerance key, PP. M8 082 is the absolute limit — its short text carries the & & placeholder, which fills with an amount and a currency. M8 083 is the percentage limit, and its short text carries the & % placeholder. M8 084 and M8 085 are the matching too-low pair, absolute and percentage. That absolute-versus-percentage split is exactly why they are separate messages, so the ampersands should never be tidied away.
Does an invoice price variance stop the invoice from posting?
Usually no. Per the M8 083 long text, if you post despite the variance the document and its account movements post normally — but the document carries a block indicator and cannot be paid until it is released. The variance blocks payment, not posting. This is configurable: SAP issues message M8 083, whose type is configurable — commonly a warning that blocks the invoice for payment rather than preventing posting — so each company code can decide whether a given variance warns, blocks or is ignored.
Can one line item block the entire invoice for payment?
Yes. SAP’s rule is explicit: the entire invoice is blocked for payment even if only one item in the invoice shows a variance. There is no partial payment of the clean lines. That is why a single wrong conversion factor or stale price-list entry can hold up an otherwise correct multi-line invoice, and why the fix belongs at the source rather than in a one-off release of the blocked document.
How do I release an invoice blocked for a price variance?
Blocked invoices are released in transaction MRBR, which lists documents blocked due to variances and lets you release them for payment. But releasing clears only the invoice in front of you. If the variance came from a wrong order price quantity, a stale price list or a loose tolerance, the next invoice for that item fails the same way. Correct the underlying price, unit or conversion factor so the variance stops computing, and keep MRBR for genuine one-off exceptions.
How does Claro help with invoice price variance?
Claro resolves every supplier invoice line to one canonical product record that already carries the agreed price, the unit it is priced in and the conversion factors between units, with a source and a confidence score on each value. So a line is checked against the price and unit that were actually agreed, not against whatever happens to sit on the PO, and a real overcharge is separated from a units artifact before the invoice ever reaches the payment block. The mapping is written back into your PIM or ERP, so it holds for every future invoice instead of being re-worked one blocked document at a time.
REVIEW-NOTES
- Accuracy trace. Every SAP artefact here comes from the brief appendix: messages M8 082 / 083 / 084 / 085 (short texts verbatim, ampersands preserved —
& &absolute,& %percentage), M8 478 (credit memos), M8 516, the M8 083 long text (posts with block indicator, blocked for payment, not posting), tolerance key PP, transactions OMR6 and MRBR, blocking reason price variance, and the “whole invoice blocked even if one item” rule. M8 083’s configurable message type uses the brief’s mandated phrasing. No German short text is quoted (085’s was not retrieved and is not needed in an English entry). The paraphrase “invoice price differs from order price” is deliberately NOT presented as a short text anywhere. - Glossary↔guide pairing deferred. The brief pairs this entry with the guide
sap-price-variance-tolerance-not-working, which does not exist yet. An inline markdown link to it would fail the readiness audit, and Template A’s 6-card Related composition (3 glossary + 2 tools + 1 playbook/comparison) left no guide slot, so the pair-guide link is deferred to the final wiring commit (brief Workflow step 6). The flagship guideerror-says-price-cause-is-unitsis already linked inline in the body. When the pair guide ships, add a Card (and/or inline link) to it here, and link back from it. - Related cards all resolve to existing pages (unit-of-measure, canonical-product-record,
entity-resolution, margin-markup-calculator, product-record-diff, map-supplier-attributes-to-schema),
matching the approved flagship pilot’s choice to avoid live broken links.
relatedSlugsis omitted per the task, so none of these are audit-checked, but all are present regardless.
Claro
See how Claro handles this in production
This concept is one piece of keeping a catalog trusted. See how Claro resolves identity, enriches missing attributes, and validates every update before it reaches your PIM or ERP.
Learn more