SAP Insiders
Articles/SAP S/4HANA/Price Difference & Material Ledger in SAP S/4HANA — every rupee traced
SAP S/4HANA

Price Difference & Material Ledger in SAP S/4HANA — every rupee traced

When Vajra Precision Tools receives 100 units of forged steel at ₹40,000 and the supplier invoices ₹42,500, SAP posts ₹2,50,000 to a PRD account. With Price Determination 3, Material Ledger doesn't stop there — it holds that variance all month, then CKMLCP traces it through every BOM level to the finished spindle assembly. This is the accounting chain most implementations get half right.

Editorial magazine infographic — Price Difference and Material Ledger in SAP S/4HANA INR. Left column: large bold title, five causes of price differences in a dark navy panel. Right column: Goods Receipt card showing Dr Stock BSX 40 lakh Cr GR/IR WRX 40 lakh versus Invoice Receipt card showing Dr GR/IR 40 lakh Dr PRD 2.5 lakh Cr Vendor 42.5 lakh, with not-equal sign between them. OBYC keys panel listing PRD KDM BSX WRX. Price Determination panel comparing type 2 (P&L immediately) and type 3 (ML collects). Footer: every rupee traced.

Vajra Precision Tools, Pune. 5 May 2026. Their stores team receives 100 units of RM-003 Forged Steel. The purchase order price is ₹40,000 per unit. The goods receipt posts cleanly — stock is debited ₹40,00,000, GR/IR clearing is credited.

Twenty days later the invoice arrives: ₹42,500 per unit. Total ₹42,50,000. That is ₹2,50,000 more than what went into stock.

In most ERP setups, that ₹2,50,000 hits a variance account and someone investigates it at year-end, if at all. In SAP S/4HANA with Material Ledger and Price Determination 3, it doesn't disappear into a variance bucket. It gets traced — through the bearing pre-assembly that consumed the steel, through the spindle assembly that was built from the bearing, to the exact units sitting in finished goods stock on 31 May. CKMLCP does this in a single month-end run.

Here is the full accounting chain.

Five ways a price difference is born

A price difference in SAP arises whenever the value recorded at goods receipt doesn't match the value on the supplier's invoice:

  1. Supplier invoices higher or lower than PO price. The most common cause. Supplier negotiates a surcharge, or gives a volume rebate, after the PO was raised.
  2. Exchange rate change between GR date and IR date. PO in USD. GR at 83.50 INR/USD. Invoice arrives two weeks later at 84.20 INR/USD. Rate difference creates a separate variance (KDM account, not PRD).
  3. Freight charges added to the invoice but not in the PO. Supplier adds ₹12,000 freight on an invoice for goods already received.
  4. Supplier discount or debit memo posted after goods receipt. Supplier issues a ₹30,000 debit memo in June for goods received in May. Price difference posts in June.
  5. MR21 price change applied retroactively. You update the standard price in June for a material with closing stock. The revaluation of that stock creates a price difference document.

The accounting chain — from dock to ledger

Accounting entry flow diagram showing three steps on ledger-paper cream background. Step 1 Goods Receipt MIGO in green: Dr Stock RM-003 BSX 40 lakh Cr GR/IR Clearing WRX 40 lakh, note says no price difference yet. Step 2 Invoice Receipt MIRO in amber: Dr GR/IR Clearing WRX 40 lakh Dr Price Difference PRD 2.5 lakh Cr Vendor Payable 42.5 lakh, note says 2.5 lakh goes to PRD account via OBYC. Step 3 ML Collects in blue (Price Determination 3): ML holds the 2.5 lakh on RM-003 all month, PRD does not hit P&L yet, month-end CKMLCP calculates PUP 42500 and rolls up BOM. Summary bar shows full rupee flow. OBYC panel lists PRD Price Differences KDM Exchange Rate Differences BSX Inventory WRX GR/IR Clearing. Exchange rate example panel shows USD PO at 83.50 GR rate vs 84.20 IR rate giving KDM variance of 35000.

Goods Receipt — MIGO, movement type 101

When the 100 units of RM-003 arrive at Vajra's store:

Dr  Inventory — RM-003           (BSX)  ₹40,00,000
    Cr  GR/IR Clearing account   (WRX)             ₹40,00,000

Stock is now on the books at the PO price. No price difference yet. The GR/IR account is a transit account — it holds the liability until the invoice arrives.

Invoice Receipt — MIRO

The supplier's invoice arrives on 20 May for ₹42,50,000:

Dr  GR/IR Clearing account       (WRX)  ₹40,00,000
Dr  Price Difference             (PRD)  ₹2,50,000
    Cr  Vendor Payable                             ₹42,50,000

The GR/IR clears. The ₹2,50,000 delta posts to the PRD account. This is automatic — no one types the G/L account number. SAP determines it via OBYC.

OBYC — automatic account determination

OBYC is the IMG configuration that maps every inventory-related movement to a G/L account without manual entry. It works by matching three things: chart of accounts, valuation class of the material, and the transaction key.

For price differences, the key transaction keys are:

KeyNameTriggered by
PRDPrice differencesInvoice ≠ GR value, price change (MR21)
KDMExchange rate differencesForeign currency invoice at different rate than GR
BSXInventory postingAll goods movements (stock account)
WRXGR/IR clearingGR and IR on same PO

IMG path: Materials Management → Valuation and Account Assignment → Account Determination → Account Determination Without Wizard → Configure Automatic Postings → OBYC

The most common configuration mistake: mapping PRD (purchase price differences) and PRY (production variances) to the same G/L account. Your P&L then shows one combined "variance" line and nobody can tell how much is purchasing and how much is production. Keep them on separate accounts.

Price Determination 2: the variance exits immediately

With Price Determination indicator 2 on the material master (single-level, transaction-based):

  • The ₹2,50,000 hits the PRD G/L account at MIRO
  • It goes straight to P&L in that period
  • Inventory stays at the standard price
  • Material Ledger records the movement but does not collect the variance for roll-up
  • CKMLCP does not touch this material's variance for multi-level distribution

Use indicator 2 for trading goods, spare parts, or any material without a manufacturing BOM where you don't need upstream variances to flow downstream.

Price Determination 3: ML collects, holds, and rolls up

With Price Determination indicator 3 on the material master (multi-level, the SAP default for manufacturing):

At MIRO, the ₹2,50,000 still posts to PRD. But Material Ledger intercepts it. Instead of exiting to P&L immediately, the variance is parked on RM-003 for the period. Every price difference that arrives during May — from additional invoices, from debit memos, from exchange rate differences — accumulates on the material.

At month-end, CKMLCP processes it:

Step 2 — Single-level price determination:

PUP for RM-003 = (Opening stock value + GR value + Price differences) ÷ Total quantity

= (₹0 + ₹40,00,000 + ₹2,50,000) ÷ 100 units
= ₹42,50,000 ÷ 100
= ₹42,500 per unit

The Periodic Unit Price is what RM-003 actually cost in May.

Step 3 — Multi-level price determination (the BOM walk): CKMLCP now asks: who consumed RM-003 during May? Answer: SFG-004 Bearing Pre-assembly consumed 60 units. That consumption was recorded at ₹40,000 (the standard price). The actual cost was ₹42,500. The variance to distribute upward:

60 units × (₹42,500 − ₹40,000) = 60 × ₹2,500 = ₹1,50,000

That ₹1,50,000 climbs to SFG-004. The remaining 40 units still in RM-003 stock carry their own share:

40 units × ₹2,500 = ₹1,00,000 → stays on RM-003, revalues closing stock

The full BOM roll-up — Vajra May numbers

BOM roll-up diagram showing three levels with dark panels on a light blue background. Level 3 Raw Material RM-003 Forged Steel: standard price 40000 per unit, invoice price 42500 per unit, price difference 2500 per unit, total price difference 2.5 lakh, PUP after CKMLCP step 2 is 42500 per unit, 100 units received 60 consumed 40 in stock. Arrow to Level 2 labelled 60 units consumed. Level 2 Semi-finished SFG-004 Bearing Pre-assembly: rolled from RM-003 60 times 2500 is 1.5 lakh, SFG own price differences 28000, total variance 1.78 lakh, standard cost 85000 per unit, PUP 90933 per unit, 25 consumed by FG-001 5 in stock. Arrow to Level 1 labelled 25 units consumed. Level 1 Finished Good FG-001 CNC Spindle Assembly: rolled from SFG-004 25 times 5933 is 1.48 lakh, FG own production variance 42000, total variance 1.9 lakh, standard cost 1.5 lakh per unit, PUP 1.57622 lakh per unit, 20 units in closing stock revalued to actual. Bottom summary: PRD account plus SFG and FG diffs all revalued, after Post Closing PRD balance is zero.

Step 4 — Revaluation: CKMLCP revalues closing stock and consumption at every level:

  • RM-003 closing stock: 40 units × ₹2,500 = ₹1,00,000 upward revaluation (Dr Stock, Cr Price Diff)
  • SFG-004 closing stock: 5 units × ₹5,933 = ₹29,667 upward revaluation
  • FG-001 closing stock: 20 units × ₹7,622 = ₹1,52,444 upward revaluation

After revaluation, every unit of closing stock is valued at actual cost, not standard. The difference between standard and actual is now in the stock account, not on the PRD account.

Step 5 — Post Closing: The CKMLCP closing document posts. After this step, the PRD account for RM-003 shows a balance of ₹0. The ₹2,50,000 has been fully distributed — ₹1,50,000 went up the BOM to SFG and FG, ₹1,00,000 revalued RM-003 closing stock. Nothing was lost. Nothing was guessed.

Exchange rate difference — the sibling of PRD

When the PO is in foreign currency, there are two separate variances:

Purchase price variance (PRD): The difference between the PO unit price and the invoice unit price, converted at the same rate.

Exchange rate difference (KDM): The difference caused by the rate changing between GR date and IR date.

Example — Vajra imports bearings from a German supplier:

  • PO: $500/unit. GR on 5 May at 83.50 INR/USD → ₹41,750 per unit
  • IR on 20 May at 84.20 INR/USD → ₹42,100 per unit
  • Exchange rate difference: ₹350/unit → KDM account, not PRD
  • If invoice price also changed from $500 to $505: additional ₹421 → PRD account

Both PRD and KDM are visible separately in CKM3 (Material Price Analysis). This is critical for controllers who need to separate purchasing efficiency (PRD) from treasury/forex exposure (KDM) in their variance reports.

Reading it in CKM3

CKM3 (transaction CKM3) is the Material Ledger price analysis report. For RM-003 in May, it shows:

Material: RM-003    Period: 005/2026    Plant: 1110

Category              Qty      Value (₹)
─────────────────────────────────────────
Opening stock           0          0
Goods receipts        100  40,00,000  ← at standard price
Price differences       —   2,50,000  ← from MIRO
─────────────────────────────────────────
Stock (at PUP)        100  42,50,000
Goods issues (SFG)    −60 −25,50,000  ← revalued to PUP
─────────────────────────────────────────
Closing stock          40  17,00,000  ← 40 × ₹42,500

The Price differences line is where ₹2,50,000 entered the material's ledger. After CKMLCP, the Goods issues line is updated to PUP (not standard), and the closing stock value reflects actual cost.

The "Not Distributed" trap. If CKMLCP finishes but you see a non-zero "Not Distributed" balance in CKM3, it means a portion of the price difference could not be allocated — usually because there were no receipts or issues in the period to carry it. Check if the material had zero movement in May. The Not Distributed amount carries forward to June and can compound if not investigated.

What the auditor checks

At month-end close, an SAP auditor or controller should verify:

  1. PRD account balance = ₹0 after Post Closing. Any residual means CKMLCP did not fully distribute. Run the CKMLCP closing document report and check which materials have open balances.

  2. GR/IR clearing account is reconciled. Every open GR/IR item is either a goods receipt awaiting an invoice, or an invoice awaiting a goods receipt. Items older than 30 days need explanation.

  3. CKM3 for high-variance materials. Filter for materials where the price difference exceeds 5% of the standard cost. These are the top candidates for purchasing to explain.

  4. PRD account vs PRY account are separate. Run the G/L balance report for both. If they are merged, you cannot tell purchasing variances from production variances — a common audit finding.

  5. KDM balance distributed correctly. Exchange rate differences follow the same CKMLCP path as PRD. If your controller reports say "exchange rate losses" but the KDM account has a non-zero balance, the period is not fully closed.

Price Determination 3 in practice — when it pays for itself

The ₹2,50,000 example is straightforward. Where Price Determination 3 earns its complexity is when the same raw material feeds fifteen different finished goods, when exchange rates move 3% mid-month, and when four invoices arrive in the same period at four different prices. A manual allocation of all of that across every BOM level is not feasible. CKMLCP does it in a single run, in minutes, and produces a closing document the auditor can read line by line.

The investment is in the setup: Price Determination 3 on every manufacturing material, OBYC configured with separate G/L accounts for PRD and KDM, and CKMLCP run in the correct sequence (single-level → multi-level → revaluation → post closing). Get those four things right and every rupee from the delivery dock lands on the right finished good.


Source: SAP Help Portal — Material Ledger Actual Costing (S/4HANA Cloud 2602); SAP OBYC configuration guide; transaction CKM3 documentation. © SAP SE. Journal entries, worked example, and company scenario by SAP Insiders. All figures in Indian Rupees (INR).