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:
- 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.
- 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).
- Freight charges added to the invoice but not in the PO. Supplier adds ₹12,000 freight on an invoice for goods already received.
- 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.
- 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
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:
| Key | Name | Triggered by |
|---|---|---|
| PRD | Price differences | Invoice ≠ GR value, price change (MR21) |
| KDM | Exchange rate differences | Foreign currency invoice at different rate than GR |
| BSX | Inventory posting | All goods movements (stock account) |
| WRX | GR/IR clearing | GR 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
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:
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.
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.
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.
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.
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).