SAP Insiders
Articles/SAP S/4HANA/Material Ledger & Actual Costing in SAP S/4HANA: A Cost Accountant's Field Guide
SAP S/4HANA

Material Ledger & Actual Costing in SAP S/4HANA: A Cost Accountant's Field Guide

A finance-first walkthrough of the SAP S/4HANA Material Ledger and Actual Costing. Why ML is mandatory, the three currency types, transaction-based vs multi-level price determination, the Periodic Unit Price formula, multi-level BOM cost roll-up, the five steps of CKMLCP, activation in five transactions, and the common errors with the exact fixes. Worked example: Vajra Precision Tools, Pune — INR, USD, EUR in parallel.

Material Ledger and Actual Costing in SAP S/4HANA — one material SFG-002 Spindle Body valued in parallel in three currencies (INR company code currency 10, USD group currency 30, EUR hard currency 40); standard price held during the month; Periodic Unit Price calculated at close as (opening inventory plus receipts plus collected variances) divided by (opening quantity plus receipt quantity); modern ledger-paper visual style with indigo and copper accents

A controller closes May for a precision-tools manufacturer in Pune. During the month, goods movements were valued at standard price — every receipt, every issue, every transfer. Standard prices come from last year's cost run. Steel went up 5% in April. Bearing-grade alloy went up 12%. The labour rate moved with the wage settlement. None of that is on the books yet.

At month-end the controller opens CKMLCP, runs five steps, and watches the system re-price every material — raw materials by their actual purchase price, semi-finished goods by their rolled-up raw-material variances, finished goods by the cumulative roll-up of every level beneath them. Inventory now reflects what May actually cost. P&L stops lying.

That capability is Material Ledger + Actual Costing, and in SAP S/4HANA it is not optional. ML is the mandatory sub-ledger for inventory valuation; Actual Costing is the optional add-on that takes ML's data and produces the Periodic Unit Price. This article walks the whole thing through one running Indian manufacturer with full INR examples. Read the glossary first — every term reappears in the diagrams.

The vocabulary — read this before anything else

Thirteen words. One sentence each. The whole article rests on these.

  • Material Ledger (ML) — the sub-ledger in S/4HANA that holds the multi-currency, multi-valuation inventory data for every material. Sits beside Accounts Payable, Accounts Receivable and Asset Accounting under the General Ledger. Mandatory in S/4HANA — ECC tables MBEW/EBEW are now compatibility views.
  • Actual Costing — the optional engine on top of ML that calculates the Periodic Unit Price at month-end and revalues inventory and consumption to actual cost. You can run ML without it; you cannot run it without ML.
  • Periodic Unit Price (PUP) — the actual cost of a material for one period. Formula: PUP = (Opening Inventory Value + Receipts Value + Collected Variances) ÷ (Opening Qty + Receipt Qty). CKMLCP calculates it. You can also use it as next period's standard.
  • Currency Type — the code that labels each parallel valuation. 10 = Company Code Currency (legal — for Vajra, INR). 30 = Group Currency (consolidation — typically USD or EUR). 40 / 50 / 60 = Hard / Index / Global currency (for high-inflation contexts or extra views).
  • Valuation Area — the lowest level at which material stock is valued. In S/4HANA almost always the plant.
  • Material Ledger Type — a config object (created in OMX2) that bundles the currency types and valuation profile applied to one or more valuation areas.
  • Price Control — the indicator on the material master accounting view. V = moving average price (MAP). S = standard price. ML and Actual Costing strongly prefer S.
  • Price Determination Indicator — also on the material master. 2 = transaction-based (single-level, variance straight to FI). 3 = multi-level (variance collected and rolled up the BOM at month-end). SAP recommends 3 for ML.
  • Standard Price — the planned cost held on the material master and used to value every goods movement during the month. Set once at the start of the period (often by the standard cost estimate run, CK40N).
  • Price Difference — the delta between the standard price and the actual price on a goods receipt or production confirmation. Collected on the material in ML during the month.
  • Single-level price determination — the CKMLCP step that calculates a PUP for each material from its own price differences only.
  • Multi-level price determination — the CKMLCP step that walks the BOM bottom-up and pushes price differences from raw materials onto semi-finished, then onto finished goods.
  • CKMSTART — the production start-up program. Flips a valuation area's ML status from "red" (test) to productive. Once run, ML cannot be deactivated for that area.
  • CKMLCP — the month-end Actual Costing cockpit. Runs the five-step closing in sequence and stays on screen while it executes.

Read once. Now the diagrams will speak.

Forget the abstract for a moment. Material Ledger isn't a table — it's the system of record for the life of a material, from the truck arriving at the dock to the finished spindle leaving the production line. Five physical touchpoints. Three currencies at each one. Fifteen ledger lines for a single goods receipt.

Illustrated material lifecycle showing the five touchpoints where Material Ledger records data — modern dashboard style with five connected cards showing the physical material journey: card 1 Supplier with warehouse building icon shows Steel Source Pvt Ltd vendor 7000234 Maharashtra with PO issued for RM-003 100 each at ₹40,750 per piece; card 2 In Transit with detailed truck illustration showing cargo container with Vajra logo and three sets of wheels rolling along a dashed road, inbound delivery ETA 14 May 10:30; card 3 Goods Receipt with sawtooth-roof factory icon showing smokestack and loading dock with a truck silhouette parked inside, MIGO posting at standard ₹40,000 per each with delta ₹75,000 parked as price difference; card 4 Stock on Hand with stacked pallet illustration in copper/orange showing three stacked pallets with RM label, 100 each on hand valued in three currencies in parallel; card 5 Production with industrial conveyor belt illustration showing rollers and material boxes feeding into a green CNC machine with robot arm and display panel, goods issue at standard then revalued at PUP at month-end; bottom dashboard panel summarises what ML writes at each stop noting that the five touchpoints with three currencies each generate fifteen ledger lines for a single goods receipt; PO step shows commitment created no FI or ML posting only encumbrance; Transit step shows inbound delivery recorded with no FI hit visible to planners only; GR MIGO step shows three ML lines one per currency stock at standard price difference parked on material; Store step shows no new postings stock visible in three currencies awaiting issue; Issue plus CKMLCP step shows goods issue at standard with month-end revaluing consumption to PUP

That picture is the article in one frame. Five stages. Now zoom out for the six-panel summary, and we'll work each panel underneath.

Material Ledger and Actual Costing at a glance — six panels covering why ML is mandatory in S/4HANA, the three simultaneous currency valuations (10 company code, 30 group, 40/50/60 hard/index/global), the two price-determination indicators on the material master (2 transaction-based with price control V and no BOM rollup, 3 multi-level with price control S and full RM to SFG to FG roll-up which SAP recommends), the five-step activation flow OMX2 to OMX3 to OMX1 to CKMSTART to CKMLCP, the Periodic Unit Price worked example showing SFG-002 Spindle Body with standard price ₹40,000, opening inventory 50 each ₹20,00,000, receipts 100 each ₹40,00,000, price variance ₹75,000 collected giving PUP ₹40,500 a delta of plus ₹500 per each, and the four common errors M3152 C+039 FML_CUST033 and missing ML checkbox with their exact fixes; bottom band explains the CKMLCP cockpit five steps Selection then Single-level then Multi-level then Revaluation then Post Closing

Quick check — vocabulary

Q. Is Material Ledger optional in SAP S/4HANA? A. No. ML is mandatory in S/4HANA — it's the default valuation engine. Actual Costing, the layer on top, is optional.

Q. What's the difference between price control and price determination indicator? A. Price control (V or S) decides what value sits on the material master. Price determination indicator (2 or 3) decides whether variances roll up the BOM. They're on the same accounting view but answer different questions.

Q. What does "PUP" stand for and what's the one-line formula? A. Periodic Unit Price. PUP = (Opening Inventory Value + Receipts + Variances) ÷ (Opening Qty + Receipt Qty).

Meet Vajra Precision Tools

To keep this concrete, every example below uses the same imaginary company.

Vajra Precision Tools Pvt Ltd is the same Indian precision machine-tool manufacturer from the Distribution & Assessment article. CNC milling machines and turning centres, single plant in Pune. For this article we narrow the lens to one product family so the BOM is visible end-to-end:

  • FG-001CNC Spindle Assembly (Finished Good). Standard price ₹1,00,000.
  • SFG-002Spindle Body (Semi-finished). Standard price ₹40,000.
  • SFG-004Bearing Pre-assembly (Semi-finished). Standard price ₹30,000.
  • SFG-005Bearing Race (Semi-finished). Standard price ₹20,000.
  • RM-003Forged Steel Block. Standard price ₹15,000.
  • RM-004Bearing-grade Steel. Standard price ₹10,000.
  • RM-005Refractory Coating. Standard price ₹5,000.

Vajra's parent group reports in USD for consolidation, and the group also produces an IFRS pack in EUR. All three valuations are kept by ML, on every movement, with no extra effort from the controller.

What Material Ledger actually does — in one paragraph

When a goods receipt posts at Vajra, the system doesn't write one line — it writes three lines, one per currency type, one per valuation. Each line uses the standard price for that valuation, and any difference between standard and the PO price is parked as a price difference on the material. That happens for every receipt all month. At period end, Actual Costing sweeps up the parked differences, calculates the actual unit cost for each material (the PUP), walks the BOM bottom-up to push raw-material variances onto the semi-finished and finished goods that consumed them, and revalues closing inventory and consumption. The Universal Journal (ACDOCA) now carries the full multi-currency, fully-roll-up picture — and the auditor has one number for inventory that is exactly what May cost.

Three currencies, three valuations — in parallel, always

The single most important S/4HANA shift: a goods movement is no longer "one transaction". It's three — and that's exactly how the controller sees it in Fiori.

Fiori-style Material Inventory Values dashboard for SFG-002 Spindle Body at plant 1110 Pune Vajra Precision Tools Pvt Ltd period May 2026 — top app bar with menu icon shows "Material Inventory Values" app title and "SAP Fiori Material Ledger" subtitle plus user avatar VJ; tab strip with Overview tab selected (underlined indigo) plus Movements Price History Settings tabs; material context strip with gear icon and status pill "ML active 3 currencies" in green; three large KPI tiles in a row each showing one currency valuation; tile 1 in indigo Currency Type 10 Company Code INR Statutory GST MCA with big rupee badge showing Periodic Unit Price ₹40,500 a +1.25% increase vs standard ₹40,000 with mini sparkline showing trending up over 10 periods; tile 2 in copper Currency Type 30 Group USD Consolidation transfer pricing with big dollar badge showing PUP $486.30 a +1.31% increase vs standard $480 mini sparkline noting includes FX delta at ₹83 per dollar; tile 3 in slate Currency Type 40 Hard EUR IFRS pack Ind AS reference with euro badge showing PUP €446.50 a +1.48% increase vs standard €440 mini sparkline noting stable reference at ₹91 per euro; bottom row four secondary KPI tiles showing Opening Inventory 50 each at standard ₹40,000 equals ₹20,00,000, May Receipts 100 each at standard ₹40,000 equals ₹40,00,000, Variance Collected ₹75,000 plus rolled-in from BOM ₹1,15,500 highlighted in amber, PUP Result INR ₹40,500 per each highlighted in indigo with note quantity weighted period average revalued by CKMLCP

Three points the diagram cannot shout loudly enough:

  • The price differences are different in each currency, because exchange rates aren't constant. ML tracks price difference, exchange rate difference, and combinations of both. The Universal Journal can map them to separate G/L accounts.
  • You don't pick one and ignore the others. All three valuations are kept for every material, every day. The parent's USD consolidation pack reads currency type 30. The Companies Act books read 10. They never need a manual conversion.
  • Single Valuation Ledger vs Multi-valuation Ledger is a structural choice you make at activation. Multi-valuation = one fiscal year variant across all currencies. Single Valuation = potentially different fiscal year variants per ledger.

Price determination — the field on the material master that decides everything

Every material in S/4HANA has a Price Determination Indicator on its accounting view. Two values. Choose carefully — once goods movements post against a material with one choice, switching to the other is a project.

Price Determination 2 or 3 — modern executive-brief style comparison showing the field on every material master in SAP S/4HANA that decides everything that follows; two large numbered cards side by side with eyebrow "SAP S/4HANA · MATERIAL MASTER · ACCOUNTING VIEW"; card 2 in slate gray Transaction-based Single-level with feature pills "Price control V Moving Average", "Variance straight to P&L", "No roll-up to next BOM level", "Lightest configuration" and "WHEN TO USE" answer "Trading goods spare parts where moving-average is fine and there is no manufacturing BOM upstream"; card 3 in indigo SAP RECOMMENDED DEFAULT FOR ML Multi-level with ribbon at the top and feature pills "Price control S Standard", "Variance collected on material", "Multi-level roll-up at month-end", "Calculates true PUP per level" and "WHEN TO USE" answer "Manufacturing RM SFG FG where production variances need to land on finished goods at month-end"

The rule of thumb for any S/4HANA manufacturer:

  • Raw materials, semi-finished, finished goods → Indicator 3 (multi-level). Standard price control S. Variances roll up the BOM at month-end.
  • Pure trading goods, low-value spare parts, materials with no production BOM upstream → Indicator 2 is acceptable. Moving average behaviour, no rollup, simpler config.

For Vajra, every material in the running example is indicator 3.

Quick check — price determination

Q. If a material uses indicator 2 (transaction-based), can its variances be rolled up to a finished good that uses indicator 3? A. No. Indicator 2 posts variance directly to FI on the spot — there's nothing left to roll up at month-end. The finished good will see its components at standard only.

Q. Your auditor asks why one specific raw material's monthly value matches a moving-average calculation instead of standard plus rolled variance. What's the most likely cause? A. The material is set to indicator 2. Common when a material was originally created as a trading good and later promoted to a production input without updating the accounting view.

A worked example — multi-level cost roll-up in May

May closes for Vajra. Raw-material prices moved. The controller wants to know: by how much, and where does it land?

Multi-level cost roll-up showing how variances climb the BOM for Vajra Precision Tools May actuals — table-style diagram with columns Level, Material, Standard, Price Diff, Actual PUP, and Delta %; bottom level L4 raw materials shown with RM-003 Forged Steel Block standard ₹15,000 plus price difference ₹300 giving actual ₹15,300 a 2.0% delta, RM-004 Bearing-Grade Steel ₹10,000 plus ₹500 giving ₹10,500 a 5.0% delta, RM-005 Refractory Coating ₹5,000 plus ₹300 giving ₹5,300 a 6.0% delta; arrow upward labelled "sum ₹1,100 rolled up" shows the L4 variances aggregating into L3; L3 SFG-005 Bearing Race standard ₹20,000 plus rolled ₹1,100 giving ₹21,100 a 5.5% delta; arrow upward labelled "sum ₹1,100 plus own variance" into L2 SFG-004 Bearing Pre-assembly standard ₹30,000 plus ₹1,600 giving ₹31,600 a 5.3% delta; arrow upward into L1 SFG-002 Spindle Body standard ₹40,000 plus ₹2,100 giving ₹42,100 a 5.3% delta; finally L0 FG-001 CNC Spindle Assembly with standard ₹1,00,000 plus ₹3,200 giving actual ₹1,03,200 a 3.2% delta; bottom band explains a 5% raw-material spike survives every BOM level and CKMLCP traces the entire chain in one run with no manual restatement

Read top to bottom. Three things to notice:

  • Variances accumulate but don't multiply. A 5% jump in Bearing-grade Steel costs Vajra ₹500 per kg. That ₹500 walks up the BOM only with the quantity used in each parent. A 5% RM spike doesn't become a 25% FG spike — physics, not finance.
  • The finished good ends up with a blended variance that mixes the worst raw-material jumps with the calmer ones, weighted by BOM quantity. FG-001 settled at +3.2% even though some of its raws moved 6%.
  • The whole chain runs in one CKMLCP execution. No manual journals. No spreadsheet "what does this cost now?" reconciliation. The system walks the BOM, posts the deltas, leaves an audit trail of every roll-up.

Quick check — the rollup

Q. If SFG-005 Bearing Race used 0.4 kg of RM-004 Bearing-grade Steel and 1.2 kg of RM-003 Forged Steel, what's the rolled-in raw-material variance per piece of SFG-005? A. 0.4 × ₹500 (RM-004 variance) + 1.2 × ₹300 (RM-003 variance) = ₹200 + ₹360 = ₹560.

Q. Why is the Finished Good's % delta (3.2%) lower than several Semi-finished Goods underneath (5.3%)? A. Because the standard price of the FG is high enough (₹1,00,000) that the rolled-up variance (₹3,200) is a smaller share. Lower BOM levels carry the variance against a smaller denominator.

The Periodic Unit Price formula — one line, two surprises

For a single material:

PUP = (Opening Inventory Value + Receipts Value + Collected Variances)
        ÷ (Opening Inventory Qty + Receipt Qty)

Applied to Vajra's SFG-002 Spindle Body for May:

ComponentValueQty
Opening inventory (50 ea × ₹40,000)₹20,00,00050
Receipts (100 ea, std ₹40,000 each)₹40,00,000100
Price differences collected during May₹75,000
Rolled-in variance from RM (per the BOM table)₹+1,15,500
Numerator₹60,90,500
Denominator (Opening + Receipts qty)150
PUP₹40,603₹40,500

(Rounded in the diagram for legibility.)

Two surprises for finance professionals new to ML:

  1. The PUP uses quantity-weighted values, not the latest receipt. It is not LIFO. It is not FIFO. It is the average actual cost across the period, weighted by what was on hand.
  2. The "Collected Variances" line includes both price and exchange rate differences when ML is running multi-currency. In USD or EUR, FX deltas show up in the same parking lot as price deltas.

The CKMLCP cockpit — five steps, every month

ML and Actual Costing close the month through a single cockpit, CKMLCP. Five sequential steps. The cockpit stays on screen, each step turns green or red, you can re-run any step until you hit Post Closing.

Activation and monthly cockpit flows — top row shows the one-time activation sequence with five connected boxes left to right: OMX2 Currency Types where you define the ML type and assign currency types 10, 30, 40/50/60; OMX3 Type assigned to Valuation Area where ML type is assigned to each valuation area with a 1:1 link though it may be shared across areas; OMX1 Activate ML where you flag ML active per valuation area and the status starts at red; CKMSTART Production Startup in orange that migrates legacy stock and flips status to PRODUCTIVE and cannot be undone; then LIVE state shown with green check; bottom row shows the every-month CKMLCP cockpit five-step sequence: Step 1 Selection picks period plant materials to close as the scope of the run; Step 2 Single-level calculates PUP per material from its own variances with no BOM lookup yet; Step 3 Multi-level rolls up variances per BOM RM to SFG to FG where the magic happens; Step 4 Revaluation revalues closing stock and updates consumption putting inventory at actual; Step 5 Post Closing posts in the NEW period; closing band lists the auditor invariants — sum of revaluation equals sum of price differences collected during the period and zero out is normal, Not Distributed inventory bucket should be empty, every step is reversible until Post Closing after which you reverse the whole run, Post Closing writes to new period so it must be open before you can close the old one

The five steps:

  1. Selection — pick the period, plants and materials in scope. For Vajra at single-plant the selection is a one-screen affair.
  2. Single-level price determination — calculates a PUP for each material from its own collected price differences. No BOM walk yet.
  3. Multi-level price determination — walks the BOM bottom-up. Pushes raw-material variances onto semi-finished, then onto finished goods. This is the engine.
  4. Revaluation of consumption — closing stock revalued at PUP; consumption postings against goods issues are corrected. Inventory now reflects actual cost.
  5. Post Closing — writes the revaluation postings to FI. Importantly, the postings are dated in the new period, so the new period must already be open before you can close the old one.

Quick check — the cockpit

Q. You ran Step 2 and Step 3, looked at the numbers, found a wrong standard price. Can you fix and re-run? A. Yes. Steps 1–4 can be re-run inside the cockpit any number of times. Only Step 5 (Post Closing) commits to FI.

Q. You ran Step 5 and then spotted a wrong price. Now what? A. You reverse the entire CKMLCP run from the cockpit. ML allows reversal even after Post Closing — by design, period-end is never "final".

Activation in five transactions

Before any of this is possible, ML must be activated per valuation area. Five transactions in sequence:

StepT-codeWhat you do
1OMX2Define the ML Type and assign currency types (10, 30, 40/50/60) to it
2OMX3Assign the ML Type to each Valuation Area (plant in S/4HANA)
3OMX1Flag ML active for the Valuation Area. Status starts as red.
4CKMSTARTProduction Start-Up. Migrates legacy stock, flips status to productive. Irreversible.
5CKMLCPFirst month-end close. Validate end-to-end.

A few notes worth pinning to the wall:

  • In S/4HANA conversions, ML activation is included in the migration cockpit (SAP Notes 2694618 and 2352383). You don't run OMX2 manually on a conversion project — but you do need to configure the currency types and ML type before the migration cockpit runs.
  • Once CKMSTART has flipped a valuation area to productive, ML cannot be deactivated for that area. Actual Costing on top of ML can be toggled.
  • A new account modification key, PRL, was added in S/4HANA for the cost-centre credit posting on GBB-AUI. If you're converting from ECC, you need to set this up.

Common errors during activation — with the exact fix

These four show up at most go-lives. The fixes are unambiguous, but the error messages don't help.

ErrorMeaningFix
M3152Company code not set up for Material LedgerOMSY is missing entries for the company codeMaintain OMSY for the company code
C+039ML currencies have been changed since last runThe currencies in CKM9 / SCC4 no longer match what ML was activated withAlign CKM9 (ML currencies) and SCC4 (client/currency) before re-running
FML_CUST033ML currencies not definedUniversal Journal ledger configuration doesn't carry the ML currenciesMaintain FINSC_LEDGER and the controlling area's currency settings
"ML Active" checkbox missing on material master accounting viewML wasn't active for this valuation area when the material was created, or the material type isn't set for quantity/value updatingDeactivate ML for the area (rare) → fix material type in OMS2 → re-run CKMSTART

There are dozens more. The first three are almost always currency/ledger config mismatches. The fourth is almost always a material type that wasn't set for value updating in the affected valuation area.

Quick check — activation

Q. A goods receipt fails with error C+039. The PO was placed yesterday. What's the most likely cause? A. Someone changed the company code currency or added a parallel currency in SCC4/CKM9 after ML was activated. The fix is to align the currency configuration with what ML expects, not to re-create the PO.

Q. What does CKMSTART actually do — in one sentence? A. Migrates any legacy stock into the new ML tables and flips the valuation area's status from "red" (test) to "productive" — making ML the live valuation engine for that area.

ML vs Actual Costing — they are not the same thing

A confusion this article wants to crush. Two separate decisions, two separate activations:

  • Material Ledger = the sub-ledger. Multi-currency, multi-valuation, mandatory in S/4HANA. You will run ML.
  • Actual Costing = the engine on top of ML that calculates PUP and revalues inventory at month-end. Optional. Turn it on when the business wants true actual-cost inventory; leave it off if standard price with FI-posted variances is enough.

You can run ML without Actual Costing. You cannot run Actual Costing without ML.

For Vajra, both are on. For a trading-only business, ML on and Actual Costing off is a sensible default.

Fiori apps and old GUI transactions

The transactions you actually run, mapped to the Fiori apps that have replaced them in S/4HANA:

Old GUIFiori appWhat you do
CKM3Material Inventory ValuesView per-material values across currencies and periods
CKMLCPRun Actual CostingMonth-end cockpit — runs the 5 steps
CK40N / CK11NRun Material Cost EstimateSet the standard prices for the next period
MIGOManage Stock + Post Goods MovementGoods receipts and issues — note: legacy MB-series transactions (MB1A, MB1C…) are removed in S/4HANA
OMX1 / OMX2 / OMX3(no Fiori app — still classic UI)One-time ML activation config
KB31NManage Statistical Key Figure ValuesWhere SKFs live (relevant to Actual Costing when used as splitting bases)

There is no Fiori app to process ML execution-level actions like the activation transactions. There are Fiori apps for viewing the data and for the run. Most ML troubleshooting still happens in classic UI.

Compatibility views — your old reports still work

Two questions everyone asks during migration:

Q. Are the old tables MBEW, EBEW deleted in S/4HANA? A. No. They are kept as compatibility views. Old custom programs that read them continue to work. New data, however, is written to the new ML tables (MATDOC, MLDOC, MLDOCCCS, etc.), not the old ones.

Q. Same question for old ML tables MLHD, MLIT, CKMLPP? A. Same answer — kept as compatibility views for legacy reads.

Translation: your inventory-value Z-reports will not break on go-live. Your new reports should write against ACDOCA or the new ML tables.

Common pitfalls that send auditors into orbit

A short list of things that go wrong on real projects.

1. Activating ML and forgetting to set indicator 3 on the materials. ML runs. Variances post to FI on goods receipts and never roll up to FG. Month-end inventory is correct in value, but FG carries zero variance — auditor asks why and there's no good answer.

2. Changing standard price mid-period. Variances explode. CKMLCP can still close, but the management explanation is brutal.

3. Negative inventory. S/4HANA ML does allow it, but it has to be explicitly enabled in the material master and the MM period-opening program. If it's not, the receipt fails.

4. Standard cost estimate not released. New material in the period, standard price = 0. Every receipt collects 100% as price variance. CKMLCP runs but the PUP is meaningless.

5. Currency rate type not maintained. Group currency valuations come out wrong. ML uses the rate type defined in the ML Type — if the rate isn't entered for the period, you get FX gaps.

6. Trying to deactivate ML. Once CKMSTART has run productive, ML cannot be turned off for that valuation area. You can disable Actual Costing on top, but ML itself stays.

7. Treating ML as a finance project. It isn't. PP, MM and CO all post into ML. Project governance has to span all four.

FAQ

Q. Is Material Ledger mandatory in SAP S/4HANA? Yes. ML is the mandatory inventory sub-ledger. Actual Costing on top is optional.

Q. How many currencies does ML support? Up to three simultaneously: Company Code (10), Group (30), and one of Hard / Index / Global (40 / 50 / 60).

Q. What's the difference between indicator 2 and indicator 3 on the material master? 2 (transaction-based) posts variance directly to FI on the spot — no BOM rollup. 3 (multi-level) collects variances on the material and rolls them up the BOM at month-end via CKMLCP.

Q. What is CKMLCP? The Actual Costing month-end cockpit. Runs the five-step close: Selection → Single-level → Multi-level → Revaluation → Post Closing.

Q. What is CKMSTART? The production start-up program. Migrates legacy stock and flips a valuation area's ML status from "red" to "productive". Irreversible.

Q. Can ML be deactivated? No, once a valuation area is productive. Actual Costing on top can be toggled.

Q. Why is my "Not Distributed" bucket non-zero? Almost always a goods movement without a valuation (zero standard price), or a material missing the ML active flag. Fix at the material/movement level, not in CKMLCP.

Q. Does ML impact FI and CO? Yes. ML integrates with FI for valuation postings and with CO for cost component splits and profitability analysis. ACDOCA holds the joined picture.

Q. Do I need new ML config before migrating from ECC to S/4HANA? Yes. At minimum, the currency types need to be reconfigured (if you used 0000), and the new account modification key PRL needs to be set up for the GBB-AUI cost-centre credit posting.

Q. We're on ECC 6.0 on HANA with ML already active. Anything special for the S/4 move? No special steps. You go through the normal S/4 conversion. The processing speed won't change (you already have HANA), but you can now leverage the new ML functionalities.

Key takeaways

  • Material Ledger is the mandatory inventory sub-ledger in SAP S/4HANA. ECC MBEW/EBEW are now compatibility views. New writes go to the new ML tables.
  • Actual Costing is optional but recommended for manufacturers. It calculates the Periodic Unit Price and revalues inventory and consumption at month-end.
  • Up to three currencies are kept in parallel: company code (legal — INR for Indian operations), group (consolidation — USD or EUR), hard/index/global (for high-inflation or extra views). Each goods movement posts three lines.
  • Set price determination indicator 3 (multi-level) on every material that participates in a manufacturing BOM. Use price control S. Reserve indicator 2 for pure trading goods.
  • The PUP formula: (Opening Inventory + Receipts + Variances) ÷ (Opening Qty + Receipt Qty). Period-average, quantity-weighted.
  • Multi-level price determination walks the BOM bottom-up at month-end. Raw-material variances climb to semi-finished, then to finished goods, in one CKMLCP run.
  • CKMLCP has 5 steps: Selection → Single-level → Multi-level → Revaluation → Post Closing. All reversible.
  • Activation is 5 transactions: OMX2 → OMX3 → OMX1 → CKMSTART → first CKMLCP. After CKMSTART, ML cannot be turned off for that area.
  • The four most common errors at go-live are M3152, C+039, FML_CUST033 and the missing "ML Active" checkbox. Three are currency / ledger config mismatches; one is a material type that wasn't set for value updating.

Five steps, three currencies, two price-determination indicators, one mandatory sub-ledger. That's the rhythm of Material Ledger in S/4HANA — and once these diagrams are pinned to the wall, the monthly close stops feeling like wizardry.