SAP MIRO mass invoice posting posts many supplier invoices against their purchase orders in one run. The most dangerous MIRO rerun begins with an innocent sentence: “These invoices failed.” They did not. They posted, received document numbers and were blocked for payment. Posting them again can create duplicates, and the mistake may remain invisible until a payment proposal—or the supplier—finds it.
Replace pass/fail with three outcomes
A mass-invoice result needs three mutually exclusive states:
- Posted and clear: an invoice document exists and is eligible for the normal payment process.
- Posted and blocked: a document exists, but one or more variance or control conditions prevent payment.
- Not posted: no invoice document exists; the row or document group returned an error.
Only the third category is eligible for correction and resubmission. A document number is the first evidence of posting, but verify status explicitly because result handling must not depend on message wording alone.

Three-way matching uses two sources your file does not control
For a PO-based invoice, SAP compares the ordered quantity and price, the goods or services accepted, and the supplier's billed quantity and amount. The file supplies the third side. It should not alter the invoice to make it agree with the first two.
Price variance may be legitimate, a stale PO or an incorrect bill. Quantity variance may mean an unposted receipt or overbilling. Tolerance keys such as PP for price and DQ for quantity influence whether differences are accepted or block payment. Their limits are configuration, often by company code; they are not universal numbers to hard-code in a template.
A block is a work item, not an error message
Once blocked invoices are separated, they need owners. A buyer may resolve a price variance, receiving may post a missing goods receipt, and accounts payable may investigate a duplicate. Putting all blocks in an AP exception list without reason codes simply moves the bottleneck.
Release through MRBR or a Fiori worklist should follow the business decision. Do not “fix” an invoice by reducing quantity, changing reference data or amending the PO merely to clear a technical-looking condition. That removes the evidence the matching control was designed to surface.
Duplicate detection must check two populations
A safe restart also checks the result of the previous run before it looks at the next input row. If the response was lost after posting, the document may exist even though the workbook still says “pending.” Search by supplier reference, company code, fiscal year and amount; only a confirmed absence belongs in the retry population.
SAP's duplicate-invoice checks can use supplier, reference, company code, invoice date and amount depending on configuration. Message M8 108 is commonly associated with a suspected duplicate. In manual entry, a person can interpret a warning. In an unattended or high-volume run, treat it as a stop and review it.
Check the file against posted SAP invoices and against itself. Two identical invoices in the same input may both be absent from SAP when validation starts. Normalize supplier references carefully—spaces, hyphens, leading zeros and case differences can defeat a simplistic comparison—but retain the supplier's real reference in the posted document. Blanking or inventing a reference to get past a warning weakens every future check.
Tax and balance errors are document-level problems
An invoice has header totals and item allocations. SAP expects the gross amount to agree with the items and the tax it calculates. M8 534 Balance not zero usually means that the document-level arithmetic is inconsistent, not that one isolated spreadsheet row is wrong.
Mixed tax codes, rounding, reverse-charge treatment and planned or unplanned delivery costs can all create differences. Validate at the invoice grouping key: sum the lines, derive expected tax using the target system's rules, and compare with gross. Repeating a header amount on every line and then summing it is a classic flat-file error.
GR/IR clearing tells you whether the match completed
Payment exposure should be reconciled separately from posting success. A posted invoice may be blocked today and released tomorrow; once released, it joins the payment proposal. AP therefore needs a queue that carries the document number, block reason, owner and next action through resolution rather than ending at the upload log.
A goods receipt normally credits GR/IR clearing; the matched invoice debits it. When quantity and value align, the PO-item history and clearing position tell a coherent story. A residue is not automatically wrong—timing and legitimate variances exist—but it is the best prompt for investigation.
Reconcile by PO and item, not only by the grand total. A correct overall balance can conceal one item over-cleared and another under-cleared. After the run, compare invoice documents, PO history and blocked status, then hand unresolved GR/IR items to named owners.

The date fields can move cash without an error
Invoice date, posting date and baseline date serve different purposes. Posting date selects the accounting period. Baseline date and payment terms drive due dates. During backlog clearance, old invoice dates can make a large population due immediately even though it was posted today.
Before posting, produce a due-date and currency profile for treasury. A technically clean upload immediately before the payment proposal can still create an unexpected cash requirement.
Use MIRO only when a purchasing document is the basis
MIRO is designed for logistics invoice verification against purchase orders. FB60 posts a vendor invoice directly to FI and does not perform the PO/receipt match. Sending a PO-based bill through FB60 can leave the purchase order and GR/IR position open while also recording the liability.
Service invoices also require care: the accepted service entry sheet, not merely the PO item, is the evidence of performance. Separate goods, services, credit memos and subsequent debit/credit scenarios when their required references and signs differ.
What to preserve in the result file
The retry decision should be explicit, not inferred from cell color. Use states such as posted-clear, posted-blocked, rejected-before-posting, technical-result-unknown and approved-for-retry. Only the last state belongs in an automated rerun.
For a result-unknown invoice, first query SAP using the supplier reference and accounting context. If a document exists, recover its number and status into the workbook. If it does not, retain the evidence of that check before retrying. This small control closes the gap between “the interface returned an error” and “SAP did not post an invoice”—two statements that are not equivalent.
For each invoice group, retain supplier, company code, supplier reference, invoice and posting dates, currency, gross amount, created document number, fiscal year, payment-block status and complete message text. Control totals should include submitted documents and value, posted-clear documents and value, posted-blocked documents and value, and not-posted documents and value.
PostNow can call the standard invoice-verification interface from Excel and return results to the source file. Configure the workbook to expose blocked versus failed outcomes; a single green/red status column is inadequate for MIRO.
S/4HANA changes reporting more than matching
The central matching logic remains. Accounting line-item reporting is shaped by the Universal Journal, while Fiori apps provide alternative entry and blocked-invoice worklists. Interface-based posting is less sensitive to UI changes than a recording of MIRO screens.
Supplier master data is handled through Business Partner, and credit/payment processes may be embedded in broader workflows. Re-test duplicate configuration, tolerance behavior, tax calculation and post-run reports in the target S/4HANA system. Do not assume that a successful ECC posting test proves the surrounding reconciliation is unchanged.