SAP Insiders
Articles/SAP S/4HANA/Material Ledger in SAP S/4HANA — Troubleshooting, Operations and SAP-Note Field Guide
SAP S/4HANA

Material Ledger in SAP S/4HANA — Troubleshooting, Operations and SAP-Note Field Guide

The practitioner's follow-up to our cost accountant's guide — what every S/4HANA consultant needs to run Material Ledger at month-end. The new CKMLCP architecture in 1610 (one Settlement step replaces four), the push posting logic, the new PRL transaction key, the dozen errors you will actually hit (C+704, ML4HRUN053, MLCCS009, ASSERTION_FAILED), the SAP Note for each, the supportability toolbox (ANST, MLHELP_SAPRCKMU, CKMDISPTAB), and the migration path from ECC.

Material Ledger Troubleshooting Field Guide for SAP S/4HANA — navy and gold cover with mock terminal output showing CKMLCP run for May 2026 plant 1110, Selection and Preparation steps successful with 18420 materials, Settlement step failed with 14 errors including ML4HRUN053 cost component split data inconsistent, MLCCS009 missing CCS in MLDOCCCS table, and C+704 ML-FI inconsistency, with action prompts pointing to KBA numbers 2483516, 2553586 and 2693824 — the operator's manual style

A controller at Vajra Precision Tools opens CKMLCP on 4 June at 09:15. Vajra has migrated to S/4HANA 2024 last quarter, this is the third month-end on the new system, and on the second run she got an error she's never seen in twelve years of running actual costing: ML4HRUN053. The classical 4-step CKMLCP she grew up with has been replaced by something with five steps including a "Preparation" she doesn't quite trust yet, and her audit checklist still refers to "Single-level Price Determination" — a step that no longer exists as a separate execution.

This is the article she needs. It is the operations companion to the cost-accountant's field guide. That article explained what Material Ledger is. This one explains what it does in production, what breaks, and which SAP Note fixes each break.

If you implement, configure, troubleshoot or own actual costing in S/4HANA, this is for you.

The vocabulary — terms you will hit in the SAP help portal

The first article's glossary covered the concepts. These ten terms are what you'll see in SAP Notes, error message texts and IMG nodes:

  • MALENA — the new ML architecture introduced in S/4HANA 1610. Replaced the classical tables (CKMLPP, CKMLCR, MLCD) with MLDOC and MLDOCCCS. If you read "new MALENA architecture" in a Note, it means S/4HANA 1610 or later.
  • MLDOC / MLDOCCCS — the two HANA tables that hold all Material Ledger documents and cost-component-split data from 1610 onwards. The old tables remain as compatibility views.
  • ACDOCA — the Universal Journal. ML postings flow into it for every currency type.
  • PRL — the new transaction key (introduced in 1610) for activity price differences. The "not allocated" variance bucket now sits on PRL instead of staying on the cost-centre.
  • MALENA / PRL push posting — multi-level rollups are now posted in the input material's closing document, not the output's. Old SAP help refers to this as "push instead of pull". One of the architectural shifts that breaks consultants' mental models.
  • Costing Run / Run Reference — a costing run can now be a rolling run (CKMLCP / CKMLCPAVR with a Run Reference) that closes period-after-period without manual re-setup. See Note 2779567.
  • CKM3 vs CKM3OLD vs CKM3PH — the new CKM3 reads MLDOC (post-migration). CKM3OLD reads the classical tables for pre-migration periods. CKM3PH is the price-history view, always available regardless of price-determination indicator.
  • FCMLHELP — the Material Ledger Helpdesk program (latest version 10, SAP Note 2772395). Runs consistency checks across MLDOC / MLDOCCCS / ACDOCA and reports defects.
  • FINS_MIG_STATUS — the migration cockpit transaction on a S/4HANA conversion. Where you see the M10/M20/M11/M21 migration steps for ML master data and order history.
  • TopNote — a SAP-classification for an unusually important Note. The four ML TopNotes (2693824, 2691272, 2610889, 2607681) plus a HotNews (3141811) are the bedrock implementation list.

Read once. These appear constantly in what follows.

The whole picture is unchanged — the cockpit isn't

The architecture from the first article still holds: one mandatory sub-ledger, three currencies in parallel, two price-determination indicators on the material master, five-stage material lifecycle. Quick refresher:

Illustrated material lifecycle showing the five touchpoints where Material Ledger records data — modern dashboard style with five connected cards showing the physical material journey from Supplier with warehouse icon issuing PO for RM-003 at ₹40,750 per piece, through In Transit with detailed truck illustration carrying inbound delivery, to Goods Receipt with factory and loading dock showing MIGO posting at standard ₹40,000 with delta ₹75,000 parked, then Stock on Hand with three stacked pallets showing 100 each on hand valued in three currencies in parallel, finally Production with industrial conveyor and CNC machine showing goods issue at standard then revalued at PUP at month-end; bottom panel summarises that five touchpoints with three currencies each generates fifteen ledger lines for a single goods receipt

What did change in 1610 — and what makes this article necessary — is how the period-end cockpit posts those entries.

What changed in 1610 — and why it matters

In ECC and S/4HANA prior to 1610, CKMLCP ran four separate posting passes, each of which could fail independently and each of which had its own error surface:

  1. Single-Level Price Determination
  2. Multi-Level Price Determination
  3. Revaluation of Consumption
  4. WIP Revaluation

Plus Post Closing on top. Five buttons on the cockpit. Reprocessing a single material that had errors in step 2 forced you to think through whether step 3 needed manual re-run. Lots of consultants made career out of this complexity.

Here's what that classic cockpit looked like — costing run 10001406, period 8/2014, two company codes (1000 and 2000), 399 materials selected:

Classic pre-1610 CKMLCP cockpit with annotations — actual SAP GUI screenshot of the Costing Cockpit Actual Costing Change/Execute screen with four numbered callout boxes drawn on top; callout 4 in amber labels Selection as "unchanged" since selection logic is the same in the new cockpit you just also get a Preparation step; callout 1 in red highlights the four collapsed steps Single-Level Pr. Determination, Multilevel Pr. Determination, Revaluation of Consumption, and WIP Revaluation noting that in 1610+ all four are one row called Settlement — flagged as the classic mid-close problem where Revaluation of Consumption shows red with no progress and 216 WIP Revaluation rows still open; callout 2 in green labels Post Closing as "kept" with 366 successful and 33 still open but with new push posting logic and PRL transaction key; callout 3 in indigo labels Mark Prices as "still last" the optional step that sets next-period standard price from this period's PUP; right-side legend panel explains each callout in detail; bottom takeaway band notes the business case for 1610 — same controller scenario but 75% fewer error surfaces and one re-run instead of four

Read the status column carefully — green ticks on Selection and Single-Level, but Revaluation of Consumption is red and WIP Revaluation has 216 still open. Under the old architecture, that's the controller's nightmare scenario: she has to decide whether to push through Post Closing leaving WIP partially revalued, or stop and investigate. Either choice is risky. Under the new architecture in 1610+, those four red/yellow rows are one row — Settlement — that either fully succeeded or fully needs reprocessing. The error-handling surface area shrank by 75%.

Starting in S/4HANA 1610 (note 2558888), the architecture changed:

Old CKMLCP versus New CKMLCP — modern executive-brief style comparison showing what changed in S/4HANA 1610; left card in amber labelled Classic ECC and S/4HANA below 1610 explains four passes with pull logic where variances are pulled from inputs into outputs, numbered list shows 1 Single-level price determination, 2 Multi-level price determination, 3 Revaluation of consumption, 4 WIP revaluation, 5 Post Closing, with pain points warning that errors in any step block the next requiring four separate error-handling surfaces and reprocessing forces manual cascade with easy missed dependencies; right card in green labelled S/4HANA 1610+ Current Recommended explains five steps with push logic where variances are pushed from inputs onto outputs at posting time, numbered list shows 1 Selection which picks materials with price determination 3 plus relevant activities, 2 Preparation which builds settlement records and runs cost sequence determination, 3 Settlement marked with circle plus symbol noting it replaces old steps 1+2+3+4 doing cycle iteration and PUP calculation, 4 Post Closing using push posting with new PRL transaction key for activities, 5 Mark Prices optional setting next period standard from PUP; wins panel highlights one error surface auto-detect cascade period-locked materials HANA native

The crucial collapse: steps 1, 2, 3 and 4 of the old cockpit are all rolled into the new "Settlement" step. The Preparation step builds the work list and runs Cost Sequence Determination. Settlement does the actual costing calculation, cycle iteration, variance distribution to consumption and ending inventory, and PUP calculation in one pass. Post Closing then commits the result to FI with the new push posting logic.

Here's what a successful Settlement run actually looks like on screen — the real SAP cockpit, not a mock:

SAP CKMLCP Settlement step result screen — actual SAP GUI screenshot showing costing run FB0117 posting period 1.2017 with 19,064 materials processed successfully and 2 activities processed successfully, table on left showing per-costing-level breakdown (Costing Level 1 with 2 materials successful 0 errors, Costing Level 2 with 2 materials successful 0 errors, both with green status indicators); right side message log showing C+136 informational message "The periodic unit price of previous period must be used (currency 10)" for materials FB_FINI_0001, FB_FINI_0002 and WA-T, plus ML4HR 002 noting 83,977 MLDOCCCS records inserted and ML4HR 003 noting 19,089 MLDOC records updated — confirms successful execution

Notice the message-numbers in the log — C+ 136, ML4HR 002, ML4HR 003. These two prefixes — C+ and ML4H — are the namespaces you'll trace error codes back to throughout this article. C+ are classical Material Ledger messages dating from R/3; ML4H are the new MALENA-era message class introduced in 1610.

And the Settlement parameters screen — every consultant should know what these controls actually do:

SAP CKMLCP Settlement step parameters dialog — actual SAP GUI screenshot showing the parameter sections: Treating Materials/Activities Already Processed (Process Again vs Do not process radio buttons), Stock Coverage Check (No Stock Coverage Check checkbox), Automatic Error Management (Negative Price Alternative Price Strategy checkbox ticked, No Convergence with Cycle Cut Critical Connections checkbox ticked), Processing Options (Background Processing, Save Log ticked), Parallel Processing (Server Group and Maximum Number of Tasks fields), Process only selected Materials/Activities buttons, and a highlighted red box at the bottom showing the new 1610 fields Costing Level and Cycle No. in Run which let you re-run Settlement from a specific costing level onwards

The highlighted red box at the bottom — Costing Level and Cycle No. in Run — is the 1610-era productivity gift. When Settlement fails at level 3 of a 5-level BOM, you don't re-run the whole chain. You re-run from level 3 onwards. The classic 4-step cockpit had no such surgical tool.

Quick check — the 1610 change

Q. A colleague says "run Multi-Level Price Determination" for an S/4HANA 1610+ system. What do you do? A. That separate step no longer exists. The work is now inside the Settlement step. You run Selection → Preparation → Settlement → Post Closing → (optionally) Mark Prices.

Q. Push vs pull — what's the practical difference for an auditor reading the FI documents? A. Under push, the multi-level rollup is posted in the closing document of the input material or activity, not the output. The audit trail for "where did this variance go" now starts at the input, not the finished good.

The new PRL transaction key — and why your cost-centre balance changed

The single most overlooked operational change in 1610. Before 1610, an activity price variance that couldn't be allocated to a receiver stayed on the cost-centre as a residual balance — and finance teams would either accept it or manually re-allocate.

In 1610+:

  • A new transaction key PRL was introduced (Note 2558115).
  • During Post Closing, activity price variances are moved from GBB-AUI (cost-centre credit) to PRL (Material Ledger price-difference account) in one single posting.
  • From PRL they are then distributed to the receivers.
  • "Not allocated" variances no longer remain as a balance on the cost-centre — they sit on PRL.
  • Activities are always posted with valuation class = blank now.

The practical consequence on Monday morning at month-end:

  • Your old "cost-centre still has residual balance" investigation now starts at the PRL account in FI.
  • Your custom report that summed GBB-AUI to identify under-allocation needs to be re-pointed.
  • Period-end reconciliation needs to include PRL in its scope.

If you're converting from ECC, account modification key PRL needs to be configured before your first productive CKMLCP — Note 2354768 has the technical detail.

This is what the new posting actually looks like in an Activity Type / ABC Process Closing document — the WIP Revaluation button is built-in, and the Output, Work in Process and Reval. Consumption rows are all generated by the same Settlement step:

SAP Activity Type ABC Process Closing document — actual SAP GUI screenshot showing document number 2000140200 dated 09.02.2017 period 01.2017 user BIGDON current currency Company code currency EUR; hierarchical tree view with WIP Revaluation button at top showing AAS_M1/AAS_M1 expanded; Beginning Inventory row showing 4.00 difference price diff 4.00 EUR; Output row showing 5.50 negative difference 5.50 negative price diff EUR with sub-row Output SR_FERT_0001 RALF showing 4.00 negative and WIP SR_FERT_0001 RALF showing 1.50 negative; Work in Process row showing 0.500 negative quantity 1.50 difference 1.50 price diff EUR with Reduc sub-row showing same values; Reval. Consumption row at bottom showing EUR currency

And the same closing pattern for a material — Material Ledger Settlement document for an SFG-level material — Beginning Inventory, Ending Inventory, Output (rolled-up to the parent), WIP and Revaluation of Consumption all visible:

Material Ledger Settlement Document with audit callouts — actual SAP GUI screenshot of the full Material Ledger Settlement document number 2000139027 with four numbered callout boxes drawn on top showing the bottom-up trace pattern; callout 1 in red highlights the document header (Doc # 2000139027, 09.02.2017, Period 01.2017, User BIGDON, Company code currency EUR) indicating which closing run produced this; callout 2 in amber highlights the SR_ROH_0001 RALF row (raw material input) highlighted green as the input material whose variance is being pushed up to its consumer — under MALENA push posting the rollup lives on the INPUT's document; callout 3 in green highlights the Output rows showing 29.14 EUR pushed to parent SR_FERT_0001 with 19.26 EUR to consumption and 9.88 EUR to WIP inside the FG; callout 4 in indigo highlights the Work in Process and Reduc rows showing 60 EA × 9.88 as WIP balance with Reduc showing the corresponding reduction when WIP is consumed; right-side legend panel explains each callout in detail; the article body explains why the auditor must walk this document bottom-up under MALENA, not top-down as in the classic ECC architecture

This is the document the auditor opens when they want to trace "where did the variance go". Under push posting, the multi-level rollup line lives on the input material's document (SR_ROH_0001 RALF here) — not on the finished-good's. If your existing audit procedure starts by opening the FG's Material Ledger document and walking down, you need to re-train: under MALENA you start at the bottom and walk up.

CKM3 — the report you read every day, refactored

CKM3 / CKM3N was completely redesigned in 1610 (Note 2503684). Three transactions, three jobs:

TransactionReadsUse when
CKM3 / CKM3NMLDOC, MLDOCCCS (new)Periods after the 1610 migration. Active actual costing.
CKM3OLDCKMLPP, CKMLCR, MLCD (old)Pre-migration periods, or mixed periods spanning before+after migration
CKM3PHPrice history (independent of migration)Any period, regardless of price-determination control or actual costing

The new CKM3:

  • No separate view for cost components — they're integrated in the main screen.
  • Cost-component-split flag — choose between inventory-relevant CCS only (default) or all components.
  • WIP reduction is hidden by default; when shown, both WIP reduction and consumption of WIP for the order appear in opposite signs in different folders.
  • Plan/Actual Comparison view is removed.
  • "Not Allocated" lines can still appear — usually from the price-limiter logic (KBA 2898738).

If you see "Data Unmigrated" warnings in CKM3, check KBA 2537912. If "Not Allocated" lines look wrong, KBAs 2898738 and 2148759 are your first stop.

Here's the new CKM3 in action — material WA-VL at plant RALF, period 1/2017, Company code currency view showing the Price Determination Structure:

SAP CKM3 Material Price Analysis screen — actual SAP GUI screenshot showing material WA-VL at plant RALF Ralf's Bastelstube with no valuation type, sales order stock and project stock indicators, period/year 1/2017 with all-green period status indicators, Curr/Valuation Company code currency, Value field set to Actual Value with Level + Lower Level + Fixed dropdowns, View set to Price Determination Structure; Prices and Inventory Values panel below with buttons Choose Detail, Display Actual BOM, Messages for Material; data tree showing Beginning Inventory 200 KG with 20,000.00 ValQtyUnit and 4,000.00 PrelimVal; Revaluation row 0 KG with 6,000.00 PriceDiff highlighted; Price Change sub-row 0 KG with document 3000006091 "Change in material price" 3,000.00 PrelimVal 3,000.00 PriceDiff; Procurement sub-row 0 KG with document 1000140352 "Init.entry of stBal. 561" showing 3,000.00 PrelimVal 3,000.00 PriceDiff; Cumulative Inventory 200 KG 26,000.00 PrelimVal 2,000.00 PriceDiff highlighted in yellow; Ending Inventory 200 KG same values

Walk the columns: PrelimVal is what the standard price said, PriceDiff is the cumulative variance ML collected during the period, and the Cumulative Inventory line shows the actual values that feed into the next-period PUP. The auditor's go-to question — "what's the variance per kg?" — is right there: 2,000.00 ÷ 200 KG = ₹10 / KG over standard.

A more complete CKM3 view — a finished material with the full picture displayed, including standard / actual / future / planned prices in a side header, and the inventory tree in the main panel:

CKM3 Material Price Analysis with audit callouts — actual SAP GUI screenshot of the full Material Price Analysis screen for material ACT-LCD at plant 6000 Mexico City, with three numbered callout boxes drawn on top; callout 1 in red highlights the Standard Price 4.30 and Periodic Unit Price 4.32 fields in the header strip noting "this is the headline number for finance" — standard price says 4.30 per PC, PUP came out at 4.32 a small overrun of 0.02 per PC or +0.5%; callout 2 in amber highlights the Inv. value 4,329 with variance (100) noting 962 PC on hand times 4.30 std equals 4,136 but actual inventory value is 4,329 with the parenthetical 100 showing the inventory-relevant slice after price-limiter; callout 3 in green highlights the Cumulative Inventory row as the audit anchor — 962 PC × 4,329 PrelimVal × 5.00 PriceDiff — this row is the input to next-period's PUP and to ACDOCA so if it doesn't match ACDOCA stop and run FCMLHELP; right-side legend panel explains each callout in detail with the auditor's first question answered

The header strip on the left is the auditor's single source of truth — every number that matters for a single material in a single period is right there, in the chosen currency, with the variance pre-calculated.

What does this look like when the material has prior-period price changes? Period-shift transactions are where C+704 and friends usually surface. CKM3 will show them via the "Late Price Change" link in the document tree:

SAP CKM3 Material Price Analysis showing late price change and back-postings — actual SAP GUI screenshot for material ACT-LCD-01 plant 6000 Mexico City period 2 2016 with all-green period status, current valuation Company code currency, view Price Determination Structure with closing entry "Values Entered" and KOK indicator; data tree showing Beginning Inventory 1,600 PC 9,600.00 PrelimVal 0.00 PriceDiff; Period Opening sub-row with document 0000201462 Change in material price for 1,600 PC and 8,000.00 PrelimVal 200.00 PriceDiff in red box; Receipts 0 PC; Other Receipts/Consumption with Debit/Credit sub-row 0 PC with document 1000000390 Material debit/credit for 0 PC and 200.00 PrelimVal 200.00 PriceDiff in red box; Cumulative Inventory 1,600 PC 9,600.00 PrelimVal 200.00 PriceDiff; Consumption 0 PC; Ending Inventory 1,600 PC 9,600.00 PrelimVal 200.00 PriceDiff

The red boxes highlight the two posting types that cause the most confusion at month-end: Period Opening (a price change applied to the beginning inventory of the new period — i.e. a late MR21 retroactive to the prior period) and Debit/Credit in Other Receipts/Consumption (a manual MR22 adjustment). Both legitimate. Both audit-traced. Both common causes of "the PUP doesn't match my expectation" calls to consultants.

For materials that have movements posted in a prior period after the period was already closed, the ML document itself carries a tab to show how each affected item resolves:

SAP Display Material Ledger Document 1000000345 Item 2 of 2 — actual SAP GUI screenshot showing the ML document detail view with material ACT-LCD plant 6000 unit of measure PC currency MXN Company code currency item type UP Material Ledger Update period/year 2 2016; tabs visible Change in inventory and Prior period posting; Change in inventory tab shows Inventory minus 20 quantity, Inventory value minus 94.80; period selection popup showing two options Choose Period radio buttons 1 2016 and 2 2016 with 2 2016 selected showing what period the prior-period posting affects; secondary screen variant showing Qty.PstdToPrPer minus 20 and Revalued amount 0.00 with the Prior period posting tab highlighted

This is the screen that solves the most-frequent "why does the prior-period inventory disagree with what we filed?" investigation. The Qty.PstdToPrPer field tells you exactly how many units were posted back into the prior period after it was technically closed. The Revalued amount tells you whether the back-posting triggered a revaluation. Most of the time both are zero — when they're not, an after-the-fact adjustment happened and the auditor needs to know.

Quick check — CKM3 navigation

Q. A user calls about a January 2024 price analysis on a system that converted to S/4HANA in March 2024. Which transaction? A. CKM3OLD — the period is older than the last period of the previous year relative to conversion, so its data sits in the old tables. The new CKM3 won't show it; CKM3OLD will.

The Single-Level vs Multi-Level views in CKM3 — side by side

When the same material is on price determination indicator 3 (multi-level), CKM3 will display two parallel views — the single-level picture (showing only the material's own variances) and the multi-level picture (showing the rolled-up variances from inputs). Reading these side by side is how you verify a multi-level rollup actually happened:

SAP CKM3 Material Price Analysis showing single-level vs multi-level price determination side-by-side — actual SAP GUI screenshot with two windows; left window shows material ACT-LCD plant 6000 Mexico City Single-Level view with valuation Company code currency and Price Determination Structure view; tree shows Beginning Inventory 354 PC 1,677.96 PrelimVal; Period Opening sub-row 0 PC 0.00 PrelimVal; Post closing material ledger document 0000020571; Purchase order 10 PC 49.40 PrelimVal 4.40 PriceDiff; Production 20 PC 94.80 PrelimVal 0.20 PriceDiff; Cost center 20 PC 94.80 PrelimVal 0.20 PriceDiff with sub-row Account 4000004 Cost center 1000 0.00 PrelimVal 0.20 PriceDiff; Receipts row aggregated 4 PC PriceDiff; Other Receipts/Consumption; Not Distributed 0 PC 0.00 PrelimVal; Cumulative Inventory 354 PC 1,725.36 PrelimVal 4.74 PriceDiff highlighted yellow; Consumption 0 PC; Ending Inventory 354 PC 1,602.12 PrelimVal; right window shows the same material in Multi-Level view also displayed with Company code currency and Price Determination Structure; tree expanded shows Beginning Inventory 354 PC 1,820.16 PrelimVal; Cumulative Inventory 354 PC 1,867.56 PrelimVal 4,74 PriceDiff edited; Receipts 40 PC 189.60 PrelimVal 4.74 PriceDiff with sub-rows Not Allocated, Cost center 30 PC 94.80 PrelimVal 0.20 PriceDiff with sub-row Account 4000004 Cost center 1000 and Production 20 PC 94.80 PrelimVal showing rollup with Revaluation of Consumption multi-level rows visible

The numbers diverge as soon as multi-level postings exist. In the left (single-level) window the Cumulative PriceDiff is 4.74 — only the material's own input variances. In the right (multi-level) window the Cumulative PriceDiff is also visible but now includes the multi-level rollup contribution from the lower-level BOM items. The delta between the two views is the roll-up volume — the variance that climbed up to this material from its inputs.

Why this matters in troubleshooting: if the two views match exactly, your multi-level rollup didn't happen — either Settlement failed, or all input materials are on indicator 2, or your BOM is wrong. If they differ by an order of magnitude, you may have a unit-of-measure mismatch in the BOM. CKM3 is where you spot these patterns first.

WIP at actual costs — what Settlement now also covers

If "Activate WIP at Actual Costs" (OMXW) is on, the new Settlement step extends its scope to revalue Work in Process. The CKM3 view shows a separate Production folder where the WIP component of consumption is segregated:

SAP CKM3 showing WIP quantity in Production vs WIP Production folder — actual SAP GUI screenshot annotated with explanation text reading "WIP quantity document creates an additional WIP quantity document for each order. The document contains the WIP quantities and their periodic changes on all components and activities types consumed for the order"; left annotation reading "In CKM3 of the component the part of the consumption identifies as WIP is removed from folder Production and stored in an own folder WIP Production"; lower right shows the WIP Quantity Document Display Overview with header showing User 30019820 Period 001.2016 Material 4001 Controlling Area 6000 Match Type Unit WBP Qty Diff Qty Bil ACT4-D ML6 002 0.000 and ACT4-A1Z M1 ML6 002 0.000; right side panel shows annotation reading "The WIP quantity document is shown in both lines and explains the switch of the quantities"; main panel shows tree starting with Beginning Inventory 8.7 PC, Cumulative Inventory 8.7 PC PrelimVal Price diff Edit diff Price Currency, Receipts; Consumption split shown with Not Allocated sub-row, Production sub-row, Cost center sub-row with Account, 100000005 document, Cost center 1000; WIP Production sub-row separated showing 1000000005 ZF Revaluation 0 PC

Two things to note when WIP at actuals is active:

  • In CKM3 the consumption tree shows both a Production and a WIP Production folder. The WIP folder isolates the quantity that's in process — physically consumed but not yet outputted as finished goods.
  • The WIP quantity document is generated per production order and shows the running WIP balance. Reconciling the WIP quantity document against the production order's confirmation history is the safest way to investigate "why did WIP move by X?".

The matching WIP Revaluation Document then shows the variances allocated to the WIP balance at month-end:

SAP WIP Revaluation Document — actual SAP GUI screenshot showing the Material Price Analysis tree with WIP Revaluation rows and an inset of the WIP Revaluation Document 300000093/2016 detail; annotation explains "The Step WIP Revaluation revaluates the consumption to folder WIP Production. The WIP Revaluation Document explains the variances allocated here"; main tree shows Beginning Inventory 384 PC 1,925.16 PrelimVal 0.00 PriceDiff; Cumulative Inventory 384 PC; Consumption 40.6 negative quantity 198.94 negative PrelimVal 5.18 negative PriceDiff with sub-rows Not Allocated, Cost center with Account 4000004 Cost center 1000, Production with order linked sub-rows for two orders 10000000000019 and 10000000000020 and WIP Production with order linked sub-rows showing 3.6 negative, 3.65 negative quantities; Ending Inventory 384 PC 1,677.96 PrelimVal 4,74 PriceDiff highlighted yellow; right inset shows the WIP Revaluation Document 300000093/2016 header with Doc.Number 300000093 Doc.Date 03.02.2016 Period 02 Costing Run ESM610 Material ACT-LCD Costing Run BSAS610/31.01.2016 Current Currency MXN Company code currency; document table with columns Header/Detail/Process/Type/Order/Material/Quantity/Difference/New quantity/Price diff Old/Price diff/Acc Old/ZF SubTl Tot/Prim Yld Tot showing two rows ACT-LCD 6000 and a sub-process Process with Adapt material data type values 0 0 0 0 0 -3.65 0 0 0 0 0 0

For each WIP revaluation, the document shows: the original quantity, the WIP-specific portion, the price difference (old and new), and the accumulated adjustment. The "Total" column at the right edge is where finance signs off — if it doesn't reconcile to the WIP variance you expected, this is the document you walk through line by line.

The complete Material Ledger Closing Document — what the auditor opens

Once Post Closing runs, every material gets a Material Ledger Closing Document. The auditor opens this to verify the closing entry was complete:

SAP Material Ledger Closing Document number 2000000505/2016 — actual SAP GUI screenshot annotated with explanation "The closing documents of the components show additional WIP Revaluation postings"; document header shows Doc.Number 2000000505 Doc.Date 03.02.2016 Period 02 User BIGDON Costing Run ESI01620 Current Currency MXN Company code currency with WIP Revaluation button; tree expands showing ACT-LCD 6000 with sub-rows Quantity, Unit, Price diff, ExR diff, S.L. diff, Multi. diff, Currency; sub-tree shows ACT-LED 6000 with multiple sub-rows including Check 6000 with values 4.13 difference EUR; ACT-LCD 6000 root level 4.13 difference EUR with Beginning Inventory 02.2016 sub-row 4.13 EUR; Work in Process row Create 81 0 PC 0.09 0.09; sub-row showing 9 PC 0.09; Reval. Consumption row 0.00 0.00; right side shows Display Document Data Entry view for ML4HRUN documents with Document Date, Period, Posting Date, Local Reference, Created By fields and a long table of about 25 line items showing document numbers, type Mater. Ledger, Company Code 60000, fiscal year 2016, posting date 02.02.2016, ML4HRUN entries with Amount Currency, Amount in LC, Amount in LC2 columns showing values 0.00 EUR, 4.74-, 8.99, 9.07, 4.13, 9.46, 6.99, 16.99, 6.07-, 4.34, 4.07 across the rows

The right-hand panel is the Display Document Data Entry report, which lists every ML4HRUN document created for the closing. The numbers on the right are the actual amounts in local currency that flowed into ACDOCA. Reconciling the closing document tree (left) against the Display Document Data Entry list (right) is your "everything balanced" check — if a line on the left has no matching ML4HRUN on the right, Post Closing failed silently for that material and you need to investigate.

Currency settings — the table you must memorise

The first article said "up to three currencies". The exact options that ML supports per valuation, with their currency types — this is straight from SAP help:

SAP currency settings matrix table for Material Ledger — actual SAP documentation table image showing the three valuation views down the rows and three currency categories across the columns; row 1 Legal Valuation maps to 10 Company Code Currency, 30 Group Currency, and 40 or 50 Hard- or Index Currency; row 2 Group Valuation maps to 11 Company Code Currency, 31 Group Currency, and Not possible for Hard or Index Currency; row 3 Profit Center Valuation maps to 12 Company Code Currency, 32 Group Currency, and Not possible for Hard or Index Currency — making clear that hard/index currency is only available in the legal valuation view

Rule: pick currency type 10 plus up to 2 additional in any valuation. For Vajra, that's 10 (INR) + 30 (USD for group) + 40 (EUR as a hard currency for IFRS pack).

Two non-obvious points the SAP help documents heavily:

  • Currency type 20 vs 30 in the Controlling Area — currency type 20 is known only to cost accounting. Type 30 is known generally in FI and ML. ML integration with FI exists only if you use currency type 30 in the controlling area (Note 119428).
  • Once ML is productive, you cannot change currency types without a full deactivation/re-startup (Note 53947). On a test system, deactivation runs SAPRCKMJX — which deletes all ML data. On productive, it's a project (KBA 1511335 for the C+039 trail).

The dashboard view of the three-currency PUP is what your team actually sees 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 — three large KPI tiles per currency each showing PUP value variance arrow and mini sparkline trending up over 10 periods; first tile INR currency type 10 Company Code at ₹40,500 a 1.25% increase vs standard ₹40,000; second tile USD currency type 30 Group at $486.30 a 1.31% increase vs standard $480 including FX delta at ₹83 per dollar; third tile EUR currency type 40 Hard at €446.50 a 1.48% increase vs standard €440 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 in amber, PUP Result INR ₹40,500 per each in indigo with quantity weighted period average note

The IMG — where ML actually lives

Before CKM9, know the IMG paths. This is the customizing tree every consultant memorises — SPRO → Controlling → Product Cost Controlling → Actual Costing / Material Ledger:

SAP IMG Display screen showing the Actual Costing Material Ledger customizing nodes — actual SAP GUI screenshot showing the IMG tree expanded under Product Cost Controlling with Product Cost Planning and Cost Object Controlling siblings; Actual Costing/Material Ledger subtree shows nodes Activate Valuation Areas for Material Ledger highlighted in yellow, Assign Currency Types to Material Ledger Type, Assign Material Ledger Types to Valuation Area, Maintain Number Ranges for Material Ledger Documents, Configure Dynamic Price Changes, Reasons for Price Changes, Set up Material Price Dispatch, Define User-Defined Message Types; Material Update subtree with Define Movement Type Groups of Material Ledger, Assign Movement Type Groups of Material Ledger, Define Material Update Structure, Assign Material Update Structure to a Valuation Area, BAdI: Modify Actual Cost Component During Material Ledger Update; Actual Costing subtree with Activate Actual Costing, Create User-Defined Names for Receipts/Consumptions, Assign User-Defined Names for Receipts/Consumptions, Activate Actual Cost Component Split, Activate Distribution of Consumption Differences, Set Up Transfer of Cost Component Split to CO-PA, Activate WIP at Actual Costs, BAdI Receiver Search for Revaluation of Consumption, BAdI External Apportionment Structure for Joint Production, BAdI Ending Inventory Valuation; bottom shows Balance Sheet Valuation Procedure with Material Ledger node

Three IMG nodes a fresh consultant must check before any go-live audit:

  • Activate Valuation Areas for Material Ledger — confirms every relevant plant is ticked.
  • Activate Actual Costing — without this, multi-level rollup and PUP calculation don't run, even with ML on.
  • Activate WIP at Actual Costs (OMXW) — controls whether the Settlement step touches Work in Process.

CKM9 — the customizing X-ray for any go-live

CKM9 is the report every senior consultant runs on their first day in a new system. It displays everything ML-relevant about a valuation area in one screen:

SAP CKM9 Display of ML-Relevant Customizing Settings annotated — actual SAP GUI screenshot with five callout boxes drawn on top numbered 1 through 5, each pointing at a critical field; callout 1 in red highlights both Material Ledger Active and Material Ledger Mandatory checkboxes ticked meaning ML is ON and REQUIRED no orphan materials possible; callout 2 in amber highlights the ML Productive Since 22.04.2003 by SAPRCKMJ in Release 620 line showing this is an ECC-era productive valuation area migrated forward; callout 3 in green highlights Material Update Structure 0001 Standard noting if you see a custom Z-structure ask why it's the most common config-drift surface; callout 4 in indigo highlights Settlement Control 3 (Not Binding) meaning multi-level price determination is available but not forced so materials on indicator 2 are still allowed; callout 5 in copper highlights Late Lock for Goods Movements Active which is locking strategy 3 no exclusively locking that deprecates statistical moving average price per Notes 2277568 and 2618202; right-side legend panel explains each callout in detail with the troubleshooting implication

The four lines that tell the auditor's story:

  • Material Ledger Active + Mandatory — both ticked. ML is on AND required (you cannot create a material without an ML record).

  • ML Productive Since 22.04.2003 by SAPRCKMJ in Release 620 — this is an ECC-era productive valuation area, migrated forward. The release number tells you the upgrade history.

  • Settlement Control 3 (Not Binding) — Multi-level price determination is available but not forced. Materials with indicator 2 are still allowed.

  • Late Lock for Goods Movements Active — locking strategy. Don't change this casually; it has Performance Assistant implications.

  • ML Active / ML Mandatory flags

  • ML Type and ML Productive Since date

  • Material Update Structure (default 0001)

  • Currency Types in use, with their roles (legal, group, hard)

  • Assigned Company Code, Chart of Accounts, Fiscal Year Variant

  • Assigned Controlling Area and its currency

  • The full Settings for Actual Cost Component Split — main vs auxiliary CCS, the data scope key (0001 = SAP standard), per-cost-element rules

  • ML-Relevant Number Ranges with the current numbers (01 ML update, 02 ML closing, 03 ML price change, 04 ML settlement, 05 ML multi-level settlement)

  • Accounts Section ("Display Accounts" option) — every transaction key / valuation class combination mapped to its debit/credit GL account

If you're inheriting a system, the first three things to verify in CKM9:

  1. Is ML Productive Since set? If yes, when? (This tells you the data baseline.)
  2. Are the currency types in CKM9 a subset of what's defined in T000 / SCC4? (Mismatch causes the infamous C+039.)
  3. Are the number ranges (object 4 settlement, object 5 multi-level) maintained? (C+606 if not — Note 122391.)

The twelve errors you will hit — with the exact SAP Note

Some are configuration-induced (fix once, never again). Some are program errors (apply the Note, never again unless you regress). Some are inconsistencies in the data (run a Helpdesk repair).

ErrorWhen it firesFirst-line fixSAP Note / KBA
C+019 / C+065"ML flag not set in material master although ML active for plant"Activate value update for material type — OMS2 then CKMSTART1511937, 574730
C+039"Material ledger currencies are changed in CO"Currency mismatch between T000 / SCC4 / CKM91511335
C+606"Number range not maintained for ML object N"Maintain in OMX4122391, 1067678
C+704"Stock movement" — ACDOCA × MLDOC inconsistencyApply TopNote, then run consistency checkTopNote 2693824, 2646743
C+099Missing CCS data in MLDOCCCSImplement CCS notes2553586
C+135 / C+136 / C+137 / C+138"Not distributed price differences" in CKM3Price-limiter logic — switch off in Settlement params, or apply Note2898738, 2148759
ML4HRUN053"Differences in cost component split data" — in CKMLCP SettlementTopNote — usually CCS inconsistency. Implement 2691272 + 2607681, then FCMLHELP repairTopNote 2691272 / 2607681, KBA 2483516
ML4HRUN101"Valuation Area locked for period MM year YYYY"Another Post Closing is running, or didn't finish — wait or unlockKBA 2693194
ML4HMASTER 106 / 107"Close previous period for material/activity first"Previous period not closed. Either close it, or use the new "Allow Open Status" exceptional processing parameterKBA 2515611
MLCCS009 / MLCCS202CCS inconsistency or incorrect delta CCS for price changeApply TopNote 2691272 then FCMLHELP CCS check2691272, 2553586
ASSERTION_FAILED in CL_FINS_ML_CUSTOMIZING_UTIL (MIGO)Goods movement against missing customizingImplement note, verify CKM9 customizing2488876, collective KBA 2408467
DBSQL_DUPLICATE_KEY_ERROR in SAPLFML_ACDOCA_M_EXTRACTDuplicate key during ACDOCA extractApply Note 28823442882344
SPTA001 in CKMLCPParallel processing errorSpecific to 1610KBA 2739591

The pattern: when a CKMLCP step fails, the order is almost always:

  1. Note the error code from the message log.
  2. Search the Collective KBA for the release (2784741 for 1809, 2530890 for 1709, 2416935 for 1610).
  3. Implement the listed Notes — they're cumulative and usually fix more than the reported error.
  4. Run FCMLHELP consistency check (Note 2772395) to verify the data fixed itself.
  5. Re-run CKMLCP from the Settlement step (the previous Selection and Preparation are still valid).

The supportability toolbox

Eight transactions / reports every consultant should have bookmarked. These are the SAP help portal's own recommended diagnostic kit:

ToolWhat it doesGet it from
ANST — Automated Note SearchReplays a transaction, traces the ABAP, suggests Notes and customizing entriesStandard since release 740 — Note 1818192
MLHELP_SAPRCKMUTest-mode consistency check between material master and ML tablesNote 364368 (Material Ledger Helpdesk)
CKMDISPTABLists every ML table entry for a material/plant/period — including MBEW / MBEWHNote 364368
ML_DISPLAY_DOCUMENTTechnical view of a single material ledger documentNote 364368
MLCCS_KO88_TREATMENTRepairs missing actual CCS that breaks order settlementKBA 1501506, Note 632752
FCMLHELP — version 10The big consistency check across MLDOC / MLDOCCCS / ACDOCA — 10 separate reportsNote 2772395
MLHELP_CYCLE_ANALYSERAnalyses cyclic structures in multi-level price determinationNote 364368
ML4HVFM — Value Flow MonitorTrace value flow end-to-end for a material (available SP03+)Note 2482519, KBA 2681559
CKM3A — Activity Consumption AnalysisDrill activity consumption per cost centre / cost elementSP03+ or Note 2527222
Schedule Manager in CKMLCPTrace and analyse errors for each step in the Actual Costing CockpitStandard

A two-line rule: if the error mentions a code starting with ML4H, run FCMLHELP before anything else. If the error mentions a cost component split (MLCCS*, C+099), run MLHELP_CCS_CONS_CHECK in test mode first.

When you do need to investigate a specific run, the Display Object List filter screen on the new CKMLCP is your scoping tool — pick the costing run, the period, restrict to a flow step (Preparation / Settlement / Post Closing), and choose whether to see all materials, those with errors, those still open, or those processed successfully:

SAP Display Object List filter screen — actual SAP GUI screenshot showing the filter selection for results review on the new CKMLCP cockpit; Costing run section with costing run FBTEST, Period 6 2016, Application ACRU; Filter section with Plant from-to fields blank, Costing Level from-to fields blank, Cycle No. in Run from-to fields blank; Objects section radio buttons with All selected by default, Only materials, Only activities options; Flow step section radio buttons with All, Preparation, Settlement, Post Closing (highlighted as currently selected); Status section radio buttons with All, Processed with errors, Still open, Processed with errors or still open selected by default, Processed successfully

The two filters most people miss: Costing Level (drill to a specific BOM level) and Cycle No. in Run (drill to a specific iteration of the cycle solver). Combined with the Flow step filter, you can answer "which materials at level 3 failed in Settlement during cycle iteration 5?" in two clicks.

Quick check — operations

Q. A goods receipt fails with ASSERTION_FAILED in class CL_FINS_ML_CUSTOMIZING_UTIL. Where do you start? A. Collective KBA 2408467 — it lists every Note that touches this class. Implement the most recent in your support package, retry. If it persists, ANST trace on the MIGO replication.

Q. What's the difference between MLHELP_SAPRCKMU and FCMLHELP? A. MLHELP_SAPRCKMU checks for inconsistencies between the material master and ML tables (test mode). FCMLHELP runs ten separate consistency checks across MLDOC, MLDOCCCS, ACDOCA and the closing tables (period-end view).

ECC to S/4HANA — what the migration cockpit actually runs

ML is mandatory in S/4HANA whether or not you used it in ECC. The conversion path is fixed and documented:

Customising migration (one-off):

  • Currency type configuration must be reviewed before any migration step (Note 2555648).
  • Account modification key PRL must be configured for GBB-AUI.
  • Material update structure (default 0001) must be assigned per valuation area.

Data migration (in transaction FINS_MIG_STATUS):

StepWhat it doesCheck Note
M10Migrate ML Master Data2354768
M20Check ML Master Data2354768
M11Migrate ML Production Order and Purchase Order History1801449
M21Check ML PO and Purchase Order History2389581

The pre-check ladder (run these before the migration starts):

  • Note 2345739 — ML migration relevant SAP Notes & FAQ (the entry point).
  • Note 2129306 — Customizing settings prior to upgrade.
  • Note 2389581 — Resolve findings of core ERP CO-PC-ACT pre-checks.
  • Note 2307844 — Pre-Simple Finance customizing check.
  • Note 2245333 — Pre-Transition Checks for FIN: error messages.

Most frequent migration errors come back to: currency mismatch (C+039), missing customizing in T000 / SCC4, mismatch between Controlling Area and FI currency types. Note 2714344 is the "most frequent error messages" reference for FINS_MIG_STATUS.

A pragmatic rule from real conversions: if you weren't using ML in ECC, your conversion is simpler, not harder. There is no historical ML data to migrate — the M10/M20/M11/M21 steps still run but they have far less to do. The pain is currency type alignment, not data volume.

Special scenarios — what's documented but rarely explained

Three scenarios that come up at most manufacturers and have specific Notes:

Joint production / co-products. When a production order produces multiple finished goods (a chemical plant, a refinery, a meat-processing line), variances need to be distributed in proportion to apportionment structure, not BOM quantity. See KBA 2566647 — "How variances are distributed in a joint production scenario". The new architecture has reduced "Not Allocated" buckets here significantly.

Split valuation. A material valuated differently by valuation type (e.g. domestic vs imported batches at different prices). Note 2581465 — "Price differences distribution to materials with split valuation". The settlement now respects valuation type boundaries during multi-level rollup.

Stock In Transit / Cross-Company. Stock that has left a sending plant but not yet arrived at the receiving plant — the value sits in transit, valued at the sender's price until receipt. Composite Note 2748139 covers all the stock-transfer scenarios in ML.

WIP at Actual Costs (OMXW). If the IMG node "Activate WIP at Actual Costs" is set, the new CKMLCP Settlement step includes the WIP variances in its calculation and the multi-level rollup pushes them onto finished goods alongside material variances. The 1610 Push posting logic means WIP rollup now appears on the input activity's closing document, not the output material's — which is a reporting change to call out to your audit team.

Alternative Valuation Run (CKMLCPAVR). A second costing run that cumulates prices over several periods. The classic use case is LIFO valuation alongside FIFO. Run CKMLCP as the "main" closing, and CKMLCPAVR as the alternative — they don't interfere. Note 2559509 is the New ML Costing Cockpit for AVR. Note 2779567 introduces the "Run Reference for rolling run" concept that lets one AVR roll forward across periods without re-setup.

Movement Type Groups — what the IMG node actually configures

If you ever need to verify which goods movements trigger ML postings (and which don't), open CKMLMV009 in SE16N. This is the configuration table for movement-type groups and the corresponding ML behaviour:

SAP Data Browser Table CKMLMV009 Select Entries — actual SAP GUI screenshot showing the movement type group configuration table with 28 entries displayed; columns shown are PTYP (Posting Type), FLG_ZUGANG (Receipt flag), FLG_NSTOF (Stock-only flag), FLG_DEFVER (Default), FLG_MASK, PTYP_PAR (Parent posting type), KTEXT (Text description); selected rows highlighted in red box showing BUBM marked with X X, V+ with X X, VBUB-S with X X X with their PTYP_PAR mappings; key rows include B Procurement; B++ Manufacturing (procurement); B+ Purchase order (grp); BSK Purchase order; BSP Purchase order (change involving stocks); BF Production; BFV Production (grp); BFV+ Subcontracting; BL Subcontracting (inactive plant); BR Stock transfer; BU Internal transfer posting; BUBM Material transfer posting with X flag; BUM Transfer posting special stock; VBSK Consumption; VB Consumption (header); V+ Fixed assets; V Consumption (grp); VBSO Consumption for single-level orders; VEAU Cost project; VBV Cost order; VBN Subcontracting; VBN+ Consumption (inactive plant); VEN Project; VEN+ Project (grp); VV Stock transfer; VV+ Material transfer posting with red marker; VV+ Transfer posting special stock; VUBS Consumption; VUBS+ WIP Production

The columns to know: PTYP is the posting type, PTYP_PAR is what it rolls up into, KTEXT is the human-readable label. Movement types are mapped to one of these PTYPs in the IMG node "Define Movement Type Groups of Material Ledger". If a goods movement isn't generating an ML record, this is the first table to inspect — almost always the cause is that the movement type isn't linked to an ML-relevant PTYP.

MARV — last document timestamp per period

The MARV table (Material Master Period Closure) tells you exactly when the MM period was last closed per company code, and the timestamp of the last document posted. Critical for debugging period-shift issues:

SAP Display Material Ledger Document 1000000345 Header view alongside Display MARV Display table — actual SAP GUI screenshot showing two windows side-by-side; left window shows Display Material Ledger Document 1000000345 Header with Document Date 01.01.2016 Document Year, Entry Date 01.02.2016 Time of Entry 16:18:27 highlighted in red box at top, SAP Release 702; Transaction section showing Transaction Code MB1A, ML transaction type UP Material Ledger Update, Business Transaction RMWE MM Goods Movement, Revaluation Reason blank, Document Header Text blank; Source Document section showing Reference Document 1000000010, Reference Org Unit 2016 Reference Transact RKPF Logical System blank; below shows two annotation labels reading "Check MARV: date and time" and "Check CKM3 last posted document before MM period shift: which was the period?"; right window shows MARV Display table with MANI 60000 BUKRS LFGJA 2016 LFMON 2016 VMGJA 2015 V3GJA 2016 VOJA 2016 VOMON 2016 XAU 002 XEUEV blank XBUCH XEPER blank XEEEX blank LAEDA 01.02.2016 highlighted in red box LZEIT 05:00:26 in red box KZBNV LVMON VVMON VVMI3 VVMI3 G3A 60C G3A blank G3A 40C MON 60C MON 40C MON 40C fields

The two red-boxed fields are the diagnostic gold:

  • LAEDA / LZEIT — last change date/time. Last time someone touched the period closure.
  • XAU 002 and the V-prefixed fields — which periods are currently "open" for goods movements.

The most common period-shift problem is: an ML document was posted in period 2 (header date 01.01.2016 → entry date 01.02.2016) — meaning a backdated document landed in a closed period. Cross-reference the document header dates against MARV to see whether the period was open when the document hit. If not, you have a backdating exception that should appear in your control reports.

ML Drilldown reporting — what to point your BW / SAC at

If you need ML data outside CKM3, three CDS views are the canonical sources:

  • FCML_MAT_V — material-level summary (Note 2441212)
  • FCML_REP_V — report-level details (Note 2441212)
  • FCML_CCS_REP_V — cost-component-split reporting (Note 2467741)

These read from MLDOC and MLDOCCCS directly, so they pick up MALENA data automatically. Custom Z-reports against the old CKMLPP / CKMLCR tables will continue to work (the compatibility views are maintained) but will not reflect any new data after the 1610 migration. Migrate your reports.

For ad-hoc analysis you can also use the classical ML drill-down report (01MLREPORT / ML Template Report 01). Its characteristic selection screen shows everything you can slice by:

SAP Change Drill-Down Report Specify Characteristic Values screen — actual SAP GUI screenshot showing the configuration of report 01MLREPORT ML Template Report 01 with form 01ML_FORM displayed; Characteristics tab selected (Variables OutputType Options tabs also visible); left panel "Sel. characteristics" lists the available characteristics that can be used as filters with checkboxes for each: Currency with two checkboxes ticked, Company Code, Plant, Material, Year, Posting period, Material Group, Material Type, Division, Base UoM, Price determ., Profit Center, Sales Document, Item, Special Stock, CUST01, CUST02, CUST03, CUST04, Explanation, Valuation Class, Costing run, Application, CO Area, Valuation Type; right panel "Char. list" shows the active characteristics already on the report: Category, Period/year, Process cat., Prod.hierarchy, WBS Element; bottom buttons Sort fixed chars Sort user-def. char

What the screen tells you about ML's data shape: everything is sliceable — currency type, plant, material, posting period, profit centre, sales document, WBS element, even custom characteristics (CUST01-CUST04 are configurable hooks). This is the same data model your custom CDS views and BW extractors should reach into.

The output looks like this — a Profitability Report cut by Posting Period, showing Quantity, Preliminary valuation, Single-level price diff, Multi-level price diff, Actual values, and Single-level vs Multi-level Exchange Rate diff per period:

SAP Execute Profitability Report ML Template Report 01 — actual SAP GUI screenshot showing the running output of the ML drill-down report; selection data shows ML Template Report 01 Data from 12.01.2012 17:17:34, Selection data General Data Selection with Year 2011 and Base UoM KG; Navigation panel on left shows P N Text columns with selected dimensions including Currency US Dollar, Company Code, Plant, Material, Posting period highlighted yellow, Material Group, Material Type, Division, Price determ., Profit Center, Sales Document; right side table shows monthly results by posting period from 2011/001 through 2011/012 plus 2012/001 and 2012/002; columns Posting period, Quantity-Inv., Prelim. valuat., 1-lvl pr. d. (Single-level price difference), Multi. pr. dif. (Multi-level price difference), ActualVal. (Actual Value), Sing-leve ER (Single-level Exchange Rate diff), Multi. pr. d. (Multi-level price diff again); sample data row 2011/001 shows 8,367,000.00 Quantity 93,670.00 Prelim Val 0.00 1-level price diff 0.00 multi-level 93,670.00 Actual; row 2011/004 highlighted yellow shows 8,786,000.00 quantity 98,330.00 Prelim 2,340.00 1-lvl 0.00 multi 98,330.00 Actual; row 2011/005 8,465,000.00 95,750.00 Prelim 0.00 0.00 95,750.00 Actual; final Result row at bottom shows 116,586,500 quantity 1,343,765.00 Prelim 2,340.00 1-lvl 0.00 multi 1,346,105.00 Actual all in US Dollar

Look at the Result row at the bottom: 1,343,765.00 preliminary valuation + 2,340.00 single-level price difference + 0.00 multi-level = 1,346,105.00 actual value. That equation is the entire reconciliation between standard cost and actual cost for the year, summarised in one row. This is the report you put in front of the CFO when you need to answer "how much did our actual cost diverge from our planned cost this year, in plain numbers?".

When stock physically doesn't match the ledger — DUV

A common scenario nobody plans for: a physical inventory count finds more (or fewer) units than the ML balance. The Distribution of Usage Variances (DUV) is the mechanism that resolves the gap. CKM3 shows it as a specific section in the consumption tree:

DUV Distribution of Usage Variances with audit callouts — actual SAP GUI screenshot of CKM3 Material Price Analysis for material CHOCOLATE at plant W003 Hamburg showing the three-step DUV pattern with three numbered callout boxes drawn on top; callout 1 in red highlights the Original PI posting (Initial stock entry document 1000000050 in the Receipts section) — a physical inventory count was performed at warehouse 721 and found a discrepancy and without DUV this would hit P&L directly; callout 2 in amber highlights "DUV Getting stock back" (the GR.phys.inv. whse 721 documents 1000010255 in Other Receipts/Consumption) showing DUV re-classifies the discrepancy as a goods receipt back into stock replacing the raw P&L hit with an inventory adjustment; callout 3 in green highlights "DUV Difference to order" (the RE for order 1000265 and GI for order 1000265 sub-rows in the Consumption section) showing DUV simultaneously adjusts the consumption on the affected production order so the order's cost picture stays consistent with the variance allocated to the order that actually caused it; right-side legend panel explains each callout in detail with the end result noted as no mysterious P&L hit and the IMG node "Activate Distribution of Consumption Differences" identified as the on/off switch

Read the arrows on the right:

  • Original PI posting (red arrow 1) — the physical inventory adjustment that found the discrepancy.
  • DUV: Getting stock back (red arrow 2) — DUV re-classifies the discrepancy as a goods receipt from physical inventory.
  • DUV: Difference to order (red arrow 3) — DUV simultaneously adjusts the consumption for the affected production orders so the order cost picture stays consistent.

The end-to-end effect: the physical count gap doesn't show as a mysterious P&L hit. It shows as a re-classification between order-level consumption and PI adjustment — auditable, traceable, and quantitatively balanced.

The IMG node "Activate Distribution of Consumption Differences" is the on/off switch. Most manufacturers run it on. Without it, every physical inventory count gap lands as a pure P&L hit with no order-level traceability.

The Top Notes you must implement BEFORE go-live

If you are still on an old support package and seeing instability, this is the bedrock list. Implement these first, then layer the release-specific collective notes on top:

NoteWhy it's a TopNote
3141811 (HotNews)Fixes the program error in 3114903 that causes timeouts in CKMLCP and CKMM
2693824ML-FI inconsistency — closing reversal creates ACDOCA × MLDOC inconsistency (C+704)
2691272Actual cost component split: incorrect delta CCS for price changes, error MLCCS 202
2610889Document update C+704 with transaction incorrectly identified as prior-period
2607681Actual CCS 2 — error during settlement with periodic unit price fallback
2980434Incorrect MLDOC update during WIP calculation in collective processing
3136485TopNote for CCS startup and CCS change

For your release add the collective KBA:

  • 1809: KBA 2784741
  • 1709: KBA 2530890
  • 1610: KBA 2416935

These KBAs are living documents — SAP updates them with every new corrective Note. Bookmark and re-check before each support-package upgrade.

FAQ

Q. We're on S/4HANA 2024. Does the old 4-step CKMLCP architecture still apply to us? No. Anything 1610 or later runs the new Selection / Preparation / Settlement / Post Closing / Mark Prices flow. Your senior consultants' ECC muscle memory needs to be retrained.

Q. Can I deactivate ML? Not in production. Once CKMSTART flips a valuation area to productive, that's it. On test systems you can run SAPRCKMJX to deactivate — but it deletes all ML data (KBA 1511335). Note 2605071 is "Enable reset of ML — only for test systems".

Q. We get C+704 on every reversal. Is this a config or program error? Program error — it's the canonical case for TopNote 2693824. ACDOCA × MLDOC inconsistency on closing reversal. Apply the Note ladder, then run FCMLHELP repair for the affected period.

Q. ML4HRUN053 keeps coming back even after we apply the Notes. The Note ladder fixes new occurrences. Existing inconsistent CCS data needs FCMLHELP cleanup (Note 2772395), or a SAP incident if FCMLHELP can't resolve it. The error itself usually points to data created in an earlier (still-buggy) period — you can apply a "data defect repair" via collective Note 2633282.

Q. Our Post Closing is failing with ML4HMASTER 106 ("close previous period first"). Previous period is closed. Why? Common in conversion environments. KBA 2515611 documents the exception. The new "Allow Open Status for Previous Period" parameter on the Preparation step is your bypass — use it only in exceptional cases.

Q. Can we run Settlement in old periods? Yes. In the new CKMLCP, you can re-execute Settlement in old periods without the workaround that was needed pre-1610 (KBA 1523233 was the old workaround). For Post Closing in an old period, the FI period must be open — ML itself doesn't restrict.

Q. Where did "WIP Revaluation" go? Into the Settlement step. The IMG node "Activate WIP at Actual Costs" (OMXW) still controls whether it happens. The execution is now part of Settlement, not a separate button.

Q. We see "Not Distributed" price differences in CKM3. Is that an error? Not necessarily. KBA 2898738 explains the price-limiter logic — if the stock coverage check decides a price would push inventory below physically valid bounds, it parks the residual as "Not Distributed". Switch off the Stock Coverage Check on the Settlement step (parameter exists) to push the variance through anyway, or accept the Not Distributed as designed behaviour.

Q. Do CKM3 and CKM3OLD ever show different numbers for the same period? Yes — for periods spanning the migration. CKM3 reads only the new MLDOC tables, CKM3OLD reads only the old ones. A period created partly before and partly after the migration may have data in both — see KBA 2503684.

Key takeaways

  • The CKMLCP architecture changed in S/4HANA 1610: four old posting passes (Single-level, Multi-level, Revaluation of Consumption, WIP Revaluation) are now one Settlement step. The cockpit is now Selection → Preparation → Settlement → Post Closing → Mark Prices.
  • Push posting replaced pull posting: the multi-level rollup is posted in the input material's closing document, not the output's. New transaction key PRL holds activity price variances.
  • CKM3 was rewritten to read the new MLDOC tables. Use CKM3OLD for pre-migration periods, CKM3PH for price history regardless of migration status.
  • Currency type matrix: legal valuation supports 10/30/40 or 50; group supports 11/31; profit centre supports 12/32 — hard currency not available in group or profit-centre valuation.
  • The twelve common errors all have a documented SAP Note. The pattern: read message → look up the release-specific collective KBA (2784741/2530890/2416935) → implement the Notes → run FCMLHELP → re-run from Settlement.
  • FCMLHELP version 10 (Note 2772395) is the period-end consistency check. MLHELP_SAPRCKMU is the master-data vs ML-table consistency check. ANST is your first-line investigator for unknown errors.
  • Migration steps M10 / M20 / M11 / M21 run inside FINS_MIG_STATUS. The pre-check ladder (Notes 2345739 / 2129306 / 2389581 / 2307844 / 2245333) catches the configuration issues before the data migration starts.
  • The bedrock implementation list before go-live: HotNews 3141811 + TopNotes 2693824 / 2691272 / 2610889 / 2607681 / 2980434 / 3136485. Then layer the release-specific collective KBA on top.
  • The PRL account is the new home of activity "not allocated" variances. Re-point any custom report that summed GBB-AUI residuals.

That's the operator's manual. Pin the error table to the wall, keep the supportability toolbox in your favourites, and your next CKMLCP run will be eight minutes of clicking instead of three days of trial and error.


Screenshots: SAP Help Portal — Financials / Controlling / Actual Costing – Material Ledger CO-PC-ACT support content. Used here for educational illustration of the cockpit, customizing nodes and document structures. © SAP SE. Article content and worked examples by SAP Insiders.