Scenario 16 — Batch Management (Steel Grade & Heat Number Tracking)

TIER 6 · MASTER DATA ★★★★☆ ⏱️ Part A ~45 min · everything ~4 h OMCT → MM01 → MSC1N → MIGO → MMBE
← Previous
Scenario 15: Outline Agreements
Next →
Scenario 17: Split Valuation
🎯 Verified live on our IDES (DEV / 250)

Every step in Part A and most of Part B was run end to end on the real system, and the document numbers are printed in each step. Where something could not be completed here, the step says so plainly and gives the reason. Nothing on this page is guessed.

The tabbed "enjoy" screens (MM01, MSC1N, MIGO) are typed by you, marked ✋ your turn. Hit a snag? Troubleshooting Center.

📊 Business Case

Batch Management lets you track stock of a single material in distinct, traceable lots — by heat number, grade, purity, manufacture date or expiry. Iron ore quality varies shipment to shipment (different sulfur/phosphorus content), so PakSteel must know exactly which batch went into which finished product. The moment a customer's rebar fails QC, you trace it back to the exact iron-ore batch. The same pattern protects pharma (shelf life), food (production date), and chemicals (purity).

🕐 When to use it

Whenever a material's units are not interchangeable — different shipments carry different quality, expiry, or origin and must be tracked, picked, and recalled by lot.

❓ Why it matters

Traceability, expiry control, and recalls. Track each lot by heat/grade so a failed product traces back to its source batch, expiring stock is picked first, and a recall touches only the affected batches — not your whole inventory.

👤 Who triggers it

Storekeepers assign a batch on every goods movement; QC links test results to a batch; planners use batch determination (FEFO/FIFO) to pick the right lot at goods issue.

🔁 The key distinction

A plain material is one anonymous pile of stock. A batch-managed material is the same code split into identifiable lots — every movement asks "which batch?", and stock is reported per batch (MCHB) on top of the total.

💰 Financial Impact — The Easy-Money Example

PakSteel holds 200 TO of iron ore across two heats. HEAT-26-01 (high sulfur, suitable only for a 90-day window) and a fresher HEAT-26-02. Without batches the storekeeper grabs whichever pile is nearest. Here is what batch tracking saves:

🚫 No batch tracking
Write-off ↑ ₨2.5M
The 90-day heat is forgotten at the back of the yard, expires past spec, and 10 TO @ ₨250,000 must be scrapped.
→
🔢 Batch + FEFO picking
Oldest batch issued first
Batch determination sorts on expiry/manufacture date and auto-picks HEAT-26-01 before the fresh stock — it is consumed in spec.
→
📊 Result
₨2.5M write-off avoided
Plus: a customer complaint is traced to its source heat in minutes, so only that lot is recalled — not the entire warehouse.
💡 Lesson: the value of a batch isn't in the accounting entry — a GR still posts inventory the same way. The value is in knowing which units are which: you stop scrapping expired stock and you contain quality failures to a single lot instead of the whole material.

📖 These are story numbers — the business reason, not values you will type. And one honest note: iron ore has no expiry date, so on this system we sort lots by manufacture date (oldest made, first out). It is the same mechanism; a material with a real shelf life sorts on the expiry date instead — see B4.

🇵🇰 The business story: Iron ore quality varies by batch — different sulfur/phosphorus content per shipment. PakSteel must track each batch (called a "heat number" in the steel industry) for traceability. If a customer's rebar fails QC, they trace it back to which iron-ore batch was used. Same applies in pharma (shelf life), food (production date), chemicals (purity).

🧭 How this page works — read this before anything else

Batch management is not one setting. It is one small core plus a shelf of optional extras. Most people get lost because courses mix them together. This page keeps them apart:

PART A · MUST DO

The basic batch implementation. 5 steps. At the end, stock is stored and reported lot by lot. If you only ever do one thing, do Part A.

⏱️ ~45 min · every step proven live

PART B · OPTIONAL

Seven add-ons. Each one is separate and starts with "Use this when…". Do only the ones your business actually needs. Skipping all of them still leaves you with working batch management.

⏱️ 15–60 min each

PART C · CUSTOMISATION

What to do when configuration runs out. What we could not do here, why, and how a functional consultant takes it forward — no ABAP knowledge needed.

⏱️ reading, ~15 min · nothing to post

🛒 Which optional parts does MY business need? — find your question in the left column
If somebody asks for…Do thisNeeds first⏱️Status on our IDES
"Track our stock by delivery / lot"A Part A — the basic cycle—45 m🎯 proven live
"Record the lab test result on each lot"B1 Quality data per batchA30 m🎯 proven live (sulfur 0.05)
"Stop staff typing lot numbers by hand"B2 Automatic batch numbersA30 m🎯 proven live (0000000002)
"The number should show which product family it is"B3 Number bands per material typeB215 m🎯 proven live (HALB 2…, FERT 3…)
"Always use the oldest stock first"B4 FEFO auto-pickA + B1 + 2 batches with different dates60 m🎯 proven live (doc 4900423478)
"Every single roll / bundle must be identifiable"B5 One batch per pieceA25 m🎯 proven live (BDL-26-001/2/3)
"Track each individual machine, with its service history"B6 Serial numbers — not batch managementa material with base unit PC/EA45 m⛔ blocked here (error M3 419)
"How does the worker know which batch a roll is?"B7 Barcode labels → Scenario 27Aseparate pagesee Scenario 27
"The batch number must literally read RM-LL-00001"C1 read C1 first — config already gets you 90% thereB2, B3read📐 analysed live
"Block a purchase order that breaks our rule"📘 MM Customisation Guide—read📐 verified live

Reading the status column: 🎯 proven live = we ran it end-to-end here and the real document numbers are on this page · ⛔ blocked = tested and it genuinely cannot run here, with the reason · 📐 analysed = investigated live, but the final step needs a developer.

📇 Your live codes — quick reference card (verified on DEV / 250)
Batch material (you create it in A2)RM-IRON-HEAT-01new ROH, copy of RM-IRON-01, Batch Management ✓
Blocked material — do NOT useRM-IRON-01has 105 TO stock → batch flag can't change (M3 530)
Plant · Purchasing orgPK01 · PKLOsame org as PakSteel raw materials
Storage locationRAWM ("Raw material")⚠️ RMT is NOT a storage location — a common mix-up. PK01's real ones are BLKD · FNGD · QHLD · RAWM · RTRN · VPK1 · WIPS (verified in T001L)
Purchasing groupRMT ("Raw Materials")⚠️ RMT is the purchasing GROUP, not a store. Verified in T024 and on our real PO 4500032789
Vendor · info recordMUGHAL21 · 5300079965supplier, and the info record that prices the PO
Batch level t-codeOMCT= Material level here. OMCD is the WRONG code
Batch class type023the "batch" flavour of classification (CT04 / CL02)
Our characteristic · class · sort rulePS_SULFUR_PCT · PS_IRON_BATCH · PS_FEFObuilt in B1 and B4
Example batch numbersHEAT-26-01 · HEAT-26-02the two heats in the money example (max 10 characters)
Key tables (check via SE16)MARC-XCHPF · MCH1 · MCHB · TCUCHbatch flag · batch master (material level) · batch stock (CLABS) · batch level
📦 Want the theory first? The Batch Management deep dive covers batch levels, classification, FEFO and determination strategy in concept form — this scenario is the hands-on run of that page.

PART A · MUST DO  The basic batch implementation

Five steps, in this exact order. Each one depends on the one before it. When you finish A5 you have working batch management — you can stop there and still be correct.

🧭 Part A at a glance
StepT-codeWhat it doesWhy this step must existWho does it
A1OMCTCheck how wide a batch number is unique (ours = Material level)the whole system needs one rule before any batch can exist👁️ look only
A2MM01Create a fresh zero-stock material with Batch Management tickedeach material must opt in — and only an empty material may✋ your turn
A3MSC1NCreate the lot HEAT-26-01stock needs a named lot to land in✋ your turn
A4ME21N → MIGO 101Buy the ore and receive it into that exact lotgoods must be filed by lot, not as one pile✋ your turn
A5MMBE / SE16See stock reported per lotproof that it worked👁️ check
✅ Prerequisites — three things that must be true before A1, or Part A will stop halfway

① A material with ZERO stock

② A vendor AND a purchasing info record, so the material can actually be bought

③ The batch level is already decided (and on our system, frozen)

A1 · MUST DO  Check the batch level · OMCT 👁️ LOOK ONLY here

⚡ This step will: show you the one system-wide rule — how wide an area a batch number counts as unique in. On a brand-new project you set it once; on our IDES it is already fixed at Material level and locked, so you only look. 📄 paper: — · 📦 stock: no change · 💰 money: no posting

⚠️ The transaction is OMCT, not OMCD. On this system OMCD opens the unrelated "Delivery-Completed Indicator" screen. Run OMCT → press the "Batch level" button → the Define Batch Level screen shows three radio buttons.

What you'll see: OMCT opens with 6 buttons, which is where newcomers freeze. You need only the first one. The other five belong to batch STATUS management, a different feature (Quality Management — Scenario 18), or are migration tools that are greyed out.

Button on OMCTWhat it does — in plain wordsWhen it's usedWhat YOU do here
1. Batch levelSets how wide a batch name must be unique — one plant, all plants (material), or the whole company (client).Once, at project start.✅ Click it → just LOOK. Ours = Material level, locked. Press Back. This is the only button Part A needs.
2. Batch status managementA switch: may batches be marked unrestricted (OK to use) or restricted (blocked)? A traffic light on each lot.Quality scenarios where stock waits for a lab test.Leave OFF (Inactive).
3. Plants with batch status managementPicks which plants use that traffic light.Only when button 2 is on.Nothing. (Live message: "Batch status management is not defined at plant level".)
4. Initial status of a new batchDecides if a brand-new batch is born "OK to use" or "blocked — wait for test".Quality scenarios (with button 2 on).Nothing.
5. Batch level → conversionA big tool that changes the level later and re-labels every existing batch.Rare — a data-migration project.Nothing — it is greyed out.
6. Batch status management → conversionA big tool to turn the traffic light on/off across all existing batches.Rare — migration only.Nothing — greyed out.

Inside button 1 — the three levels, and what each means for the batch number B-500:

Radio buttonOursWhat it means — in plain wordsWhy it matters — and the impact
Batch unique at plant level—B-500 in Karachi and B-500 in Dubai are two different, unrelated lots. Like a house number: the same number on another street is a different house.Simplest; good when plants run independently. Move stock to another plant and it becomes a fresh batch record there. Batches live in table MCHA.
Batch unique at material level✅ selected (locked)B-500 of iron ore is one single lot everywhere — same quality data in Karachi and Dubai, and it keeps its identity when transferred. (You could still reuse B-500 for coal.)Best for company-wide traceability and recalls — the usual real-project choice. Batches live in table MCH1. This one detail decides several later steps (B1 uses MSC2N not CL20N; B2 uses object BATCH_MAT).
Batch unique at client level—B-500 can exist only once in the whole system — if iron ore uses it, coal cannot.Strictest, rare, heavy to run.

✅ How you'll know: the radio "Batch unique at material level" is filled. (Stored as TCUCH-KZDCH = 1. Trust the radio button on screen, not the raw table value.)

A2 · MUST DO  Create the batch-managed material · MM01 ✋ YOUR TURN

⚡ This step will: create a brand-new material RM-IRON-HEAT-01 that is batch-managed from birth — from its very first movement, every receipt and issue demands a batch number. 📄 paper: new material master · 📦 stock: no change · 💰 money: no posting

Fastest way: copy an existing material so every view is pre-filled, then change the number and tick one box.

Where on screen · FieldFillWhat it asks — in plain wordsWhy — and the impact if wrong
Initial screen · MaterialRM-IRON-HEAT-01The new material's name.A fresh code with no stock, so batch management is allowed. Impact: reuse an existing code and MM01 becomes an "extend", inheriting the stock block
Initial screen · Industry sector / Material typeIndustry M (Mechanical) · type ROH (raw)What kind of material is it? ROH = raw material, bought not sold.Same family as RM-IRON-01. Impact: the type controls which views exist — the wrong type can hide the Accounting view you need in a moment
Initial screen · Copy from… (reference)RM-IRON-01Which existing material to copy all settings from?Pre-fills units, purchasing, MRP so you change only what differs. Impact: skip it and you fill every view by hand
Select View(s) popuptick Basic Data 1, Purchasing, General Plant Data / Storage 1, Accounting 1Which "pages" of the material do you want to fill?The batch tick lives on Purchasing; the price lives on Accounting 1. Impact: miss Purchasing → no batch box; miss Accounting 1 → error ME047 when you try to buy it
Organizational Levels popupPlant PK01 · Storage location RAWM · Purch org PKLOWhich plant / store / buying team does this data belong to?Same org as PakSteel raw materials. Impact: the wrong plant creates the data where nobody will find it
⭐ Purchasing view → Batch management ("Purchasing view" = one page of the material master. It is not the purchase order.)✓ tickShould THIS material be tracked lot by lot? A switch on one product only.This single tick is the whole scenario. Impact: forget it and every later step does nothing — the batch field never appears
Accounting 1 view · Valuation class · Price control · Moving price · Price unit3000 · V · 250000 · 1How is this material valued in the books?Mirrors RM-IRON-01. Impact: leave it blank and the purchase order stops with ME047 — "not maintained by accounting department"
Save (Ctrl+S)—Commit the new material.SAP returns "Material RM-IRON-HEAT-01 created". Impact: from now on its POs, GRs and issues all carry a batch field — a place to write the lot number. (A number only. The lot's measured values are a separate thing and live on the batch record — see B1.)
❓ "Can I not just switch batch management ON for a material I already have?"

Yes — but only if the material is completely empty. This is prerequisite ① in practice:

✅ You CAN tick it in MM02 when the material has…❌ You CANNOT (M3 530) when it has…
Zero stock now (current period)Stock on hand now (our RM-IRON-01 = 105 TO)
Zero stock in the previous period tooStock in the previous period (SAP checks 2 periods — you can still post to last month)
No special stockConsignment, sales-order, project or subcontracting stock
No open documentsOpen PO, PR, reservation, production/PM order, delivery, RFQ, WM transfer order

Best practice: decide batch management when you first create a material. Converting a used one means emptying it for two periods and closing every open document — a lot of work for no benefit.

⚠️ Immediately after saving, create the purchasing info record (prerequisite ②) or A4 will fail: ME11 → Vendor MUGHAL21 · Material RM-IRON-HEAT-01 · Purch. org PKLO · Plant PK01 → Net price 250000 / TO · Standard qty 100 · Planned deliv. time 5 days → Save.

✅ How you'll know: SE16 → table MARC → material RM-IRON-HEAT-01 → field XCHPF = X. Or re-open MM03 → Purchasing and see the box ticked.

A3 · MUST DO  Create the batch (the lot itself) · MSC1N ✋ YOUR TURN

⚡ This step will: create the lot — after saving, HEAT-26-01 exists as a record with its dates and supplier, ready to receive stock but holding none yet. 📄 paper: batch master record · 📦 stock: no change · 💰 money: no posting

🖥️ The screen, verified live — so nothing surprises you

Initial screen: 4 fields — Material · Batch · Plant · Storage Location (storage location may stay blank). Press Enter and the batch record opens with 5 tabs: Basic Data 1 · Basic Data 2 · Classification · Material Data · Changes.

📌 These 5 tabs belong to the batch record only. A "tab" is one page inside a screen, and every SAP screen has its own tabs. The purchase-order screen has completely different ones, and Classification is not among them — see the note in A4. Two different papers in one folder: the order says what you buy; the batch record says what the lot is like. Lab values live on the batch record.

⚠️ There is no "description" field for a batch. The text you see under the material number is the material's description, and it is read-only. A batch is identified by its number alone.

Where on screen · FieldFillWhat the field asks — in plain wordsWhy we choose this — and the impact if wrong
Initial screen · MaterialRM-IRON-HEAT-01Which material is this lot an instance of?Ties the batch to the ore. Impact: a wrong material creates the lot under the wrong product and A4 will not find it
Initial screen · BatchHEAT-26-01The lot's name. Maximum 10 characters — so "HEAT-2025-001" will not fit.The mill's heat number IS the batch id. Impact: at Material level (A1) this number must be unique for this material across all plants
Initial screen · PlantPK01WHERE will this lot's stock sit?The receiving plant. Impact: the wrong plant shows the batch stock in the wrong location
Initial screen · Storage Locationleave blank (or RAWM)Which store inside the plant?Optional — the batch record itself is not per storage location. Impact: none for this exercise
⭐ Basic Data 1 → box Shelf Life Expiration/Best Before Date · Date of Manufacturethe date the lot was made, e.g. 22.07.2026WHEN was this lot produced?⭐ This is the date FEFO reads (B4). Impact: a wrong date makes batch determination pick the wrong lot first — exactly the ₨2.5M saving lost. Give your two batches different dates or B4 has nothing to sort
Basic Data 1 · SLED/BBDoptional — the expiry date, e.g. 26.07.2026Shelf Life Expiration Date / Best Before Date — when does this lot go out of spec?Used instead of manufacture date when you sort by true expiry. Impact: only fills automatically if the material master carries a shelf-life setting; otherwise type it
Basic Data 1 · Available From · Period Indicatore.g. 24.07.2026 · D (days)From when may this lot be used, and in which time unit is shelf life counted?Housekeeping fields. Impact: low — but "Available From" in the future can hide the batch from determination
Basic Data 1 → box Batch Statusleave UnrestrictedIs this lot free to use, or held pending a test?The "traffic light" from OMCT button 2 — switched off on our system, so Unrestricted is the only real option. Impact: none here; it becomes live in Scenario 18 (QM)
Basic Data 1 → box Trading Data · SupplierMUGHAL21WHO supplied this lot?The recall and audit trail. Impact: blank here and a failed lot cannot be traced back to its mill
Basic Data 1 · Supplier Batchthe mill's own lot number, if differentWhat did the supplier call this lot on their certificate?⭐ Keep the supplier's number here when SAP generates your own number (B2). Impact: this is how you get speed and traceability at the same time
Basic Data 1 · Ctry/Reg of Originthe origin countryWHERE did this lot come from?Customs and imported-ore traceability. Impact: a wrong origin misreports customs data
Classification tab (this tab belongs to the batch record)skip for nowThe lot's measured values — for example "sulfur 0.05 %".This tab stays empty until you build the class in B1. ⭐ Where to come back to: MSC2N → the same Material · Batch · Plant → Classification tab. Not the purchase order — a purchase order never shows this tab. Impact: nothing now; the batch saves fine without it
Save—Commit the batch master.The lot now exists and can receive stock. Impact: without it the GR in A4 has no pre-made lot (SAP can still create one on the fly, but with empty data)
💡 "Do I have to create a batch by hand before every single delivery?" — No. Three ways exist, and you choose per business:
  • Pre-create it (this step) — when the number comes from outside (a mill's heat number on a test certificate) and you want the lot's data ready before the truck arrives.
  • Type it at the goods receipt — SAP creates the batch on the fly. Fastest, but the lot's data starts empty.
  • Let SAP invent the number — see B2. No typing at all.
A4 · MUST DO  Buy it and receive it into the batch · ME21N → MIGO 101 ✋ YOUR TURN

⚡ This step will: bring the ore IN and file it under one exact lot — the shelf fills at PK01 AND the first money document posts. 📄 paper: purchase order, then material + accounting document · 📦 stock: ↑ at PK01 inside batch HEAT-26-01 · 💰 money: Dr Inventory / Cr GR-IR

Part 1 — the purchase order (ME21N)

Where · FieldFillWhat it asksWhy — and the impact if wrong
Top bar · Document type · SupplierNB · MUGHAL21What kind of order, and from whom?Standard PO from our ore supplier. Impact: the supplier must match the info record or the price will not be found
Header → Org. Data tab · Purch. Org · Purch. Group · Company CodePKLO · RMT · PSPKWhich buying team is ordering?Karachi local buying team. RMT here is the purchasing group "Raw Materials" — do not confuse it with the storage location RAWM. Impact: the Purch. Org must match the info record's, or the price will not be found
Item line · Material · PO Quantity · PlantRM-IRON-HEAT-01 · 100 TO · PK01What, how much, where to?100 TO is the money example. Impact: the plant must be the one you batch-enabled
Item line · Net Pricedo not type it — it fills itself (250,000)What does one tonne cost?Comes from info record 5300079965 via condition PB00. Impact: if it stays 0, your info record is missing or its org data does not match — see prerequisite ②
Item detail → Invoice tab · Tax codeI0Which VAT rule applies?⚠️ Mandatory on this system. Impact: the PO will not save without it
Item detail → Material Data tabnothing to fillThis is where a purchase order keeps batch information: Batch, Supplier Batch, and a Create Batch button.ℹ️ A number only — never the lab values. ⭐ Verified live on our system: the PO item has exactly 15 tabs (Material Data · Quantities/Weights · Delivery Schedule · Delivery · Invoice · Conditions · Texts · Delivery Address · Confirmations · Condition Control · Retail · Pricing History · Spec2000/SC · Incoterms · Custom Fields) and the PO header exactly 11 (Delivery/Invoice · Conditions · Texts · Address · Communication · Partners · Additional Data · Org. Data · Status · Payment Processing · Incoterms). Neither list contains Classification, and the Environment menu has no batch or classification entry either. Impact: none — leave this tab alone
Save—Commit the order.Answer Yes to "No message record found… Save anyway?" — harmless. Note the PO number.

Part 2 — the goods receipt (MIGO)

Where · FieldFillWhat it asks — in plain wordsWhy — and the impact if wrong
Top bar · Action · Reference · Movement typeGoods Receipt · Purchase Order · 101 → type the PO number → EnterStart a normal receipt against the order.Referencing the PO copies quantity, price and account assignment. ⚠️ Check the small box beside the movement type is EMPTY — a leftover P (pipeline) from another scenario silently breaks everything
Item detail → Where tab · Storage LocationRAWMWhich store inside the plant?The line must be valid before the batch field accepts input. Impact: skip it and the batch field misbehaves
⭐ Item grid · Batch column (mandatory)HEAT-26-01WHICH lot is this stock landing in? Like a parcel that cannot be shelved until you write the shelf on it.Compulsory now, because the material is batch-managed (A2). Impact: SAP will not post without it. This one answer is what makes later tracing possible
Header → Head.data · Delivery Notee.g. DN-26-001The supplier's delivery-note number.⚠️ Mandatory on this system. Impact: posting fails with "Enter Delivery Note"
Item line · Item OK tick✓Confirm this line is ready to post.Impact: an unticked line is silently skipped — the most common reason a post "does nothing"
Post 💾—Commit the receipt.Stock is booked into that specific batch, not just the material total. Impact: MMBE now shows quantity per batch on top of the overall figure
🎯 Proven live: goods receipt 5000047744 — 100 TO of RM-IRON-HEAT-01 posted into batch HEAT-26-01 at PK01 (verified in MCHB: CLABS = 100.000).
A5 · MUST DO  Prove it — stock is now reported per lot · MMBE 👁️ CHECK

⚡ This step will: show you the difference batch management made. Nothing is posted — you are only reading. 📄 paper: — · 📦 stock: no change · 💰 money: no posting

🏁 Part A is complete. You now have working batch management. Everything below this line is optional. Pick from Part B only what your business actually asks for — a real project often ships with Part A plus one or two add-ons and nothing more.

PART B · OPTIONAL  Add-ons — do only what you need

Seven independent extras. Each begins with "Use this when…" and lists what it needs first. They can be done on different days, in almost any order — the only hard rule is that B4 (FEFO) needs B1 (quality data).

B1 · OPTIONAL  Quality data on every lot · CT04 → CL02 → MSC2N 🎯 PROVEN LIVE
👉 Use this when a lot is not just a number — when you need to record its test results (sulfur %, purity, moisture), its production date, or any fact you later want to search, sort or report on. Needs first: Part A. Required for: B4 (FEFO). ⏱️ ~30 min.

⚡ This step will: build the blank label that every lot will carry, then write real values onto one lot. 📄 paper: characteristic + class (master data) · 📦 stock: no change · 💰 money: no posting

The idea in three words: a characteristic is one blank on a form ("sulfur ___ %"). A class is the whole form. Classifying a batch is filling that form in for one lot.

📍 Where you will see this — and where you will NOT

✅ You WILL see it in: MSC2N → Classification tab (to type the values) · MSC3N → Classification tab (to read them) · CL30N or BMBC (to search lots by value).

❌ You will NOT see it in the purchase order. ME21N / ME22N / ME23N have no Classification tab — not on the item, not on the header. This is normal SAP, not a fault, and no setting turns it on. The order is the order letter: what, how much, what price. The batch record is the lab report for one lot.

⭐ At the goods receipt you CAN type the values too — and on our system it is already switched on. MIGO item detail has a Batch tab with a Classification button, and SAP can also open the Classification screen by itself as you post. That behaviour is controlled per movement type by the field Classif.batches (V_156_VC-KZCLA), which lives in OMJJ → movement type → box Entry Control — right beside Create New Batch.

Classif.batchesWhat SAP does at the goods receipt
blankNo Branching to Batch Classification — you never see the screen
1Classification Carried Out in Background (All Batches)
2Classific. Only in Foreground for Mand. Chars (All Batches)
3 ← ours for 101Classification Always Invoked in Foreground (All Batches)
4Classification Invoked in Foreground for New Batches Only

⭐ Because ours is 3, MIGO opens a Classification screen for EVERY batch on the receipt, one after another — even batches that already exist. That is not a fault, and it is the single most confusing thing about batch classification at a goods receipt. Set it to 4 if you only want to be asked about brand-new batches, or leave it blank to be left alone completely.

So what is the right moment to type the values? Whenever the number becomes known and you trust it: at the goods receipt if the supplier's mill certificate arrives with the truck (controlled by Classif.batches in OMJJ — ours is 3, so it already asks), or after the goods receipt in MSC2N if your own lab must test first. ⚠️ One hard deadline either way: classify the batch BEFORE it is used, because an unclassified batch has no value to sort on and B4's FEFO rule pushes it to the bottom of the list with a ?.

Step 1 — create the characteristic · CT04 (type the name, press the Create button — do NOT just press Enter, or you get "not yet created")

Where on screen · FieldFillWhat it asks — in plain wordsWhy — and the impact if wrong
Initial screen · CharacteristicPS_SULFUR_PCTThe internal name of this blank.Start custom names with your own prefix. Impact: SAP's own names begin LOBM_ — never overwrite one
Basic data tab · DescriptionSulfur content %The label a user reads on screen.This exact text is what appears on the batch's Classification tab. Impact: cosmetic, but this is the only text the storekeeper sees
Basic data · Status1 ReleasedIs this blank ready to be used?⚠️ Impact: any other status and the characteristic cannot be put into a class — a very common beginner block
Basic data · Char. Group · Auth.Groupleave blankOptional grouping / authorisation.Housekeeping only. Impact: none
Format box · Data TypeNUM (Numeric Format)What kind of answer goes in this blank — number, text, date, time or currency?Sulfur is a measured number. Impact: pick CHAR and you can never sort or compare it numerically
Format · Number of Chars · Decimal Places5 · 2How long is the number, and how many digits after the point?5 characters incl. 2 decimals gives 0.05 up to 99.99. Impact: too small and the lab value will not fit
Format · Unit of Measure%In what unit is the value measured?Shows as "0.05 %" everywhere. Impact: a missing unit makes the value ambiguous on reports
Format · Template · Exp. displayfills itself (___.__ · 0 No exponent)How the number is displayed.Leave the defaults. Impact: none
Value assignment boxSingle-valueCan a lot have one answer, or several?A lot has one sulfur reading. Impact: "Multiple Values" is for things like "colours available", and it breaks sorting
Value assignment · Entry Requiredleave untickedMust every lot answer this blank?Tick it only if a lot without the value is genuinely invalid. Impact: ticking it blocks saving a batch that has no reading yet
Save—Commit."Characteristic PS_SULFUR_PCT saved"
⭐ The other kind of characteristic — SAP's own, which fill themselves

You will need a date characteristic for FEFO in B4. Do not build one. SAP ships LOBM_HSDAT — "Date when Batch Was Produced". Open it in CT04 → Addnl data tab and you see why it is special:

Field on Addnl dataValue on LOBM_HSDATWhat that does
Reference to Table Field → Table NameMCH1reads straight from the batch master table — and MCH1 is the material-level table, matching our batch level from A1 (on a plant-level system it would be MCHA)
Reference to Table Field → Field NameHSDATthe Date of Manufacture you typed in A3 — so the value copies itself onto the batch
Procedure for Value Assignment → Not Ready for Input✓ tickedyou cannot type into it, on purpose — the batch master is the single source of truth

💡 The lesson: a characteristic with a table reference is a window onto a real field, not a place to store data twice. Other useful ones: LOBM_VFDAT (expiry / SLED), LOBM_LFDAT (goods receipt date), LOBM_LWEDT (last GR), LOBM_ZUSTD (batch status).

Step 2 — create the class · CL02 (again: type the name and class type, then press Create)

Where on screen · FieldFillWhat it asks — in plain wordsWhy — and the impact if wrong
Initial screen · ClassPS_IRON_BATCHThe form's name.One class can serve many materials. Impact: none if you rename, but keep it obvious
⭐ Initial screen · Class type023 (SAP shows "Batch")What kind of object is this form for?SAP has dozens of class types for different objects; 023 is the one for batches. Impact: any other type and the class will simply not attach to a batch — you will get "class type not allowed"
Basic data tab · DescriptionIron ore batch qualityPlain-words name for the form.Appears in F4 help. Impact: cosmetic
Basic data · Status1 (Released)Is the form ready for use?⚠️ Impact: an unreleased class cannot be used to classify anything
Basic data · Valid From / Valid totoday / 31.12.9999For how long is this form valid?Defaults are fine. Impact: a Valid From in the future hides the class
Basic data → box Same classificationWarning message (the default)What if two lots end up with identical values?Warn, don't block — two heats can legitimately test the same. Impact: "Check with error" would refuse to save the second lot
⭐ Char. tabrow 1 PS_SULFUR_PCT · row 2 LOBM_HSDATWhich blanks belong on this form? One characteristic per row.SAP fills Description / Data type / Length / Unit automatically once you press Enter — that is your confirmation the name was right. Impact: ⚠️ add every characteristic you will ever need BEFORE you start classifying batches. Add one later and every already-classified batch shows ? for it (see the Errors table)
Save—Commit the class."Class PS_IRON_BATCH created"

Step 3 — write the values onto a lot · MSC2N

⚠️ Do NOT use CL20N here. It tries to classify the batch as the plant-level object MCHA and fails with "Object type MCHA not defined as classifiable object". Our system is at Material level, where a batch is the MCH1 object. MSC2N uses the right object — and no config change is needed. (This is the single most useful consequence of knowing your batch level from A1.)
Where on screen · FieldFillWhat it asksWhy — and the impact if wrong
MSC2N initial · Material · Batch · PlantRM-IRON-HEAT-01 · HEAT-26-01 · PK01Which lot are you filling in?Same keys as A3. Impact: —
Classification tab → box Classification of Batch · ClassPS_IRON_BATCHWhich form applies to this lot?Type it and press Enter — Class Type fills itself with 023. Impact: until you name a class, the value grid stays empty
Grid "Values for Class … " → General tabSulfur content % = 0.05 · Date when Batch Was Produced = fills itselfThe real measured values for THIS lot.The grid shows the Characteristic Description, not the technical name. The date is greyed out because it mirrors the batch's Date of Manufacture. Impact: wrong readings mislead every later pick and trace
Bottom-right status buttonwatch itSAP tells you the health of this classification.It reads "Inconsistent" when the class gained a characteristic after this batch was classified. Impact: ⭐ pressing Save re-syncs it — this is the fix for the FEFO ? problem in B4
Save—Commit.The lot now carries its own facts

✅ Proven live: characteristic PS_SULFUR_PCT (NUM, 5, 2, %) + LOBM_HSDAT in class PS_IRON_BATCH (type 023, status 1) → batch HEAT-26-01 classified with Sulfur = 0.05 % and produced date 22.07.2026. Check it any time in MSC3N → Classification.

B2 · OPTIONAL  Let SAP invent the batch number · OMCZ → SNRO → OMJJ 🎯 PROVEN LIVE
👉 Use this when the lots are yours — your own production, high volume — and you just need a unique id fast with no typing errors. Do not use it when the number must match a supplier's certificate (keep typing it, or store theirs in Supplier Batch). Needs first: Part A. ⏱️ ~30 min.
⚠️ Do B5 BEFORE this one if you want to practise typing your own batch names. Setting OMJJ → Create New Batch = C (row 3 below) means "automatic, no manual creation" — after that, SAP will not let you type BDL-26-001 by hand on that movement type any more. It is a one-field change you can undo (set it back to blank), but it surprises people. Blank = automatic OR manual · C = automatic only.

⚡ This step will: make the Batch field optional at goods receipt — leave it blank and SAP creates the batch itself. 📄 paper: customizing · 📦 stock: no change · 💰 money: no posting

⚠️ It takes THREE settings. Miss any one and SAP keeps asking you for a batch — this is the single most common failure in this whole scenario.
#Where on screen · FieldFillWhat it asks — in plain wordsWhy — and the impact if wrong
1 OMCZ
screen: "Activate Internal Batch Number Assignment" — it opens straight onto one box, no popup
in box Automatic Batch Number Assignment pick radio Active (only other option: Inactive) → Save (Ctrl+S) Should SAP invent batch numbers when you don't supply one? Turns the feature on. Impact: it is client-wide — every batch-managed material is affected, so treat it as a project decision, not a personal preference. ✅ Ours is already Active
2 SNRO
screen: "Number Range Object Maintenance"
field Object Name = BATCH_MAT → then press the Display button (the three buttons are Display · Change · Create — there is no Enter-and-go) Which pool of numbers should SAP draw from? SNRO asks for an "object" name. ⚠️ The object depends on your batch level (A1): BATCH_CLT = client · BATCH_MAT = material ← ours · BATCH_PLT = plant. Impact: maintain the wrong object and nothing happens at all, with no error to tell you why
2b the screen that opens: "Number Range Object BATCH_MAT: Display"
two tabs: Intervals | Customizing
nothing to fill — just read it What kind of numbers does this object hold, and what splits them into groups? ⭐ This screen proves what the "subobject" is. On the Intervals tab: Number Length Domain = CHARG, % Warning = 10.0, and Subobject Data Element = MTART — and MTART is the material type. That one field is the whole answer to "what is a subobject here?"
⭐ 2c press Interval editing (F7) in the button row just under the title — How do I get from the object to the actual number bands? ⭐ The step that gets everybody lost. There is no button called "Number Ranges" — it is called Interval editing and it is an icon with no text, so it is easy to miss. Pressing it jumps you into a different transaction, SNUM. (The other icon there is Change documents (F6) — not what you want.)
2d screen: "Edit Intervals: Batch Number Assgnmt, Object BATCH_MAT" field Material Type = ROH → press the Intervals button with the pencil (change) Which kind of material are these numbers for? ⭐ The field is labelled "Material Type", not "Subobject". SAP renames it using MTART's own text, so the word "subobject" never appears — which is exactly why people cannot find where to type ROH. ⚠️ There are two buttons both called Intervals: the one with glasses only displays, the one with a pencil lets you edit. A third, NR Status, sets the counter
2e screen: "Edit Intervals: … Object BATCH_MAT, Subobject ROH"
columns: Number Range No. · From No. · To Number · NR Status · External
press Insert Line (F6) → fill 01 · 0000000001 · 9999999999 · leave External unticked → Save Which numbers, for which kind of material? ⚠️ The button is "Insert Line", not "Insert Interval", and it only appears after you press Display <-> Change (Ctrl+F1) — in display mode there is nothing to press and Save is greyed out. Each material type gets its own counter. Impact: our BATCH_MAT already had 38 intervals for custom Z* types but none for ROH, so a receipt with a blank batch failed until we added it. ⭐ NR Status is the live counter — ours read 6 right after SAP handed out batch 0000000006, which is how you prove the range is really being used
⭐ 3 OMJJ → answer two short popups → you land on Change View "Movement Type": Details, header 101 GR goods receipt
the field is in box Entry Control, left column, third row down
Popup 1 "Field Selection" → tick Movement Type → Enter.
Popup 2 "Determine Work Area: Entry" → From: 101 → Enter.
Then field Create New Batch: leave blank for normal use, or C only to forbid typing a batch by hand → Save (Save asks for a customizing transport request)
For THIS movement type, may the user type a batch, or must SAP generate one?
⭐ Why 101? The setting is per movement type, not a global switch. 101 is simply the movement you are testing with. The decision block below shows how to work out your own list.
⚠️ Two traps here, and each one costs hours.
Trap 1 — where the field is. The tree on the left has a node called Update control / WM movement types, and the name sounds exactly right. It is the wrong place. Create New Batch is in the Entry Control box on the main Details screen. Impact: you search the tree, decide the field does not exist in your release, and abandon automatic numbering that was available all along.
Trap 2 — what blank means. Blank is "Automatic / manual without check", so automatic is already switched on. Verified here: 101 is blank and SAP still generated 0000000006. Impact: people set C thinking that is what turns automation on. It is not — it only removes the users' ability to type a supplier's heat number, which in steel, food and pharma is the number that must appear on the certificate. Pick C only when you have a reason to forbid manual entry.
Full list from F4 — blank Automatic/manual without check · A + check against external number range · B + check in USER EXIT · C Automatic / no manual creation · D Manual without check · E Manual + external range check · F Manual + USER EXIT · G No creation
4 Test: MIGO goods receipt 101 against a PO leave the Batch field blank → tick Item OK → Post Does it work? SAP assigns the number at posting, so the field stays blank while you work — there is nothing to see on screen. Impact: people think it failed. Check afterwards in MMBE, MB51 or MCHB, and watch NR Status in step 2e tick up by one. ⚠️ In MIGO the button is called Post, not Save — and it stays greyed until Item OK is ticked
🧭 Those two popups are not red tape — and the second one has a much more useful setting

They cannot be skipped. OMJJ maintains a view cluster, so it must first ask which key you want to work by. Press Enter on popup 1 without ticking anything and SAP answers SV 032 "Position the cursor on a valid entry" — it simply will not move on. So this is two Enters, not a procedure.

⭐ Popup 2 gives you a choice, and it changes where you land:

In popup 2, From:You land onUse it when
type 101 Details — the single-movement screen with all three boxes (Entry Control, Updating Control, Internal Control) You know which movement you want and you want to read or change its fields. This is the route the table above uses.
⭐ leave it blank Overview — a grid of all 322 movement types, 27 rows at a time, with the settings as columns ⭐ You want to SEE the pattern. Both batch fields are columns here — Classif.batches and Create New Batch — so you can read 101, 102, 121, 201 … side by side and watch which movements SAP switched on and which it left blank. Double-click any row to open its Details.

💡 Do the blank one once. It is the fastest way to understand that these settings are a delivered pattern you are auditing, not a blank form you must fill in — the point the decision block below is built on. The Overview also shows the other 14 fields as columns, which is a quick way to compare any movement type against another.

⚠️ STOP — read this before you change anything on the OMJJ screen

What this screen actually is. OMJJ is the rule sheet for one movement type. Movement 101 is "goods receipt against a purchase order" — the single most used movement in the whole system.

💡 Everyday picture: it is like the settings on the company's main gate. Every delivery for every plant comes through that gate. Change a setting and you have changed it for everybody, not just for your practice material.

⚠️ The blast radius: these settings are not per plant, not per material, not per user. They apply to every company code and every plant in the client. Saving asks for a customizing transport request, because SAP treats it as a change that must travel to the production system. In a real project this is a change request with an approval, not something a consultant edits on a whim.

✅ The good news — for batch work only TWO of the ~20 fields matter: Create New Batch and Classif.batches. Everything else on this screen belongs to other topics (printing, costing, statistics, physical inventory). Look at them, understand them, change nothing else.

👀 Safest way to practise: reach the screen, read the fields against the table below, then leave with F3 — do not press Save. On our system everything needed for auto-numbering is already set, so you lose nothing by only looking.

🔍 The whole screen, field by field — every value list below was read from the live F4 help on this system, and the "Ours" column is what movement 101 actually holds today.

The screen has three boxes plus a tree on the left. The tree nodes (Short Texts · Allowed Transactions · Help Texts · Field selection · Update control / WM movement types · Account Grouping · Reversal/follow-on movements · Reason for Movement · Deactivate QM inspection · LIS Statistics Group) are separate sub-screens, and none of them holds the batch fields. The node called Update control / WM movement types is the one that misleads everybody, because the name sounds like where batch behaviour would live. Everything this step needs is in the three boxes on the main screen.

Box 1 — Entry Control (what the user may type, and what SAP checks, while the document is being entered)

FieldOursWhat it does — plain wordsWhat to choose, and when
Print item
KZDRU
1 Which paper slip SAP offers to print for this movement. 8 options: blank No Document Printout · 1 Material Document Printout · 2 Return Delivery · 3 GR/GI Slip for Subcontracting · 4 Inventory List W/o Sales Price · 5 Inventory List w. Sales Price · 6 Matl Doc. Printout for GR/GI · 7 Transfer Posting. Leave it. Nothing to do with batches
Selection parameter
SELPA
WE101 Which screen layout / default profile MIGO uses for this movement. Never change. SAP ships one per movement (WE101 = the goods-receipt layout). Changing it makes MIGO look wrong for everyone
⭐ Classif.batches
KZCLA
3 Does SAP ask you for the batch's characteristic values while you post? blank No Branching to Batch Classification · 1 Background (All Batches) · 2 Foreground only for Mandatory Chars · 3 Always Invoked in Foreground (All Batches) ← ours · 4 Foreground for New Batches Only.
When to pick what: use 4 in a real plant — you only want to be asked about batches nobody has valued yet. Use 3 for training, so you always see the screen. Use blank if the lab enters values later in MSC2N instead. ⚠️ 3 is why MIGO opens one Classification screen per batch, existing batches included
⭐ Create New Batch
CHNEU
blank May the user type their own batch number, or must SAP generate it? blank Automatic / manual without check · A + check against external number range · B + check in USER EXIT · C Automatic / no manual creation · D Manual without check · E Manual + external range check · F Manual + USER EXIT · G No creation.
When to pick what: keep blank for a steel plant — the storekeeper types the mill heat number when there is one, and SAP invents a number when there is not. Pick C only when numbers must be machine-generated with no exceptions (audit or pharma discipline). Pick G to forbid creating batches on this movement altogether
Ext. Classific.
XKCFC · tick box
☐ Hands classification to a program instead of a person — "extended classification" via a customer function. Leave unticked unless a developer has actually written that function. Ticking it with no code behind it means values are simply never filled
Copy Chars
MILL_CPCONF
blank Copies characteristic values from a configurable material into the batch automatically. blank Do not copy characteristics · 1 Copy only classification characteristics · 2 Copy only configuration characteristics · 3 From configuration (priority) and classification · 4 From classification (priority) and configuration.
Leave blank — it only helps if you use variant configuration (made-to-order products). Our iron ore is not configurable
Check SLExpir.date
KZMHD
1 Shelf-life expiry date — must the storekeeper enter it, and should SAP refuse goods that are already too old? blank No check · 1 Enter and check ← ours · 2 Enter only · 3 No check at goods issue.
Genuinely batch-related. Use 1 for food, chemicals, paint, medicine — anything that expires. Iron ore does not expire, so the field only appears if the material master has a minimum remaining shelf life filled in
Account control
KZKON
blank Forces the movement to a particular kind of account assignment. FI/CO territory. Leave it. Wrong value here posts your goods receipt to the wrong account
Control Reason
KZGRU
- Whether a reason for movement may or must be entered (e.g. "damaged in transit"). - means not used here. Turn it on for scrapping and returns, where you want the why recorded. The reason codes themselves live in the tree node Reason for Movement
Stck Determation Rule
RULES
blank Which stock determination rule applies — SAP choosing which stock to take (own vs consignment, which plant). Only 0001 exists on this system. Different feature from batch determination (B4), which is chosen by the search procedure in OMCG. Leave blank
RevGR despite IR
XWSBR · tick box
☐ May a goods receipt be reversed after the supplier's invoice has already been posted? Leave unticked to keep goods and invoices in step. Tick it only if your finance team accepts reversals out of order

Box 2 — Updating Control (what else SAP updates in the background when the document posts)

FieldOursWhat it does — plain wordsWhat to choose, and when
Create SLoc. automat.
XLAUT
☑If you receive into a storage location that has never been used for this material, SAP creates the storage-location record for you instead of erroring.Keep ticked. Untick it and receipts fail with "storage location not maintained" until somebody extends the material by hand
Ind. rqmts reduction
XPBED
☑Reduces the planning requirement when the goods actually arrive, so MRP stops asking for them again.Keep ticked. Planning field, not a batch field
Generate ph.inv.doc.
XINVB
☐Creates a physical-inventory (stock count) document automatically.Leave unticked — it belongs to cycle counting, not goods receipt
Automatic PO
XNEBE
☐Lets SAP invent a purchase order for a receipt that arrived without one.Leave unticked. Tick it only for the deliberate "goods receipt without PO" process, which needs its own controls
Statistically relev.
KZSTR
2Whether this movement feeds reporting / analytics.blank Not relevant · 2 Document evaluations and standard analyses ← ours · 3 Standard analyses only. Leave it — changing it silently breaks reports
Consumption posting
KZVBU
GWhether the movement counts as consumption (used up) for planning and costing.blank No consumption update · G Planned withdrawal (total consumption) ← ours · R Planned if there is a reservation, otherwise unplanned · U Unplanned withdrawal. Leave it
Store
XOARC
☐Archives the document image (optical archive link).Leave unticked unless your project uses document archiving

Box 3 — Internal Control — and SAP labels this box, in its own words, "(Please Do Not Change)"

Do not touch any of these. They define what the movement fundamentally is, and two of them (Rev. mvmnt type ind. XSTBW, CostElem account XKOKO) are greyed out so you cannot. The rest — Mvt type category, Debit/Credit Ind. (ours S = debit, stock going up), Reserv. cat., GR Blocked Stock, Direction Indicator — are how SAP itself recognises movement 101. Changing one does not "customise" the movement; it breaks it, and the damage shows up as wrong accounting months later.

🧠 How to actually DECIDE these values — not just where to type them

Knowing where a field lives is the easy half. The half that makes you a consultant is knowing which value to pick, on what basis. Here is the honest answer, and it starts with something reassuring.

⭐ Start here: SAP has already decided for you — 153 times

We read table T156 on this system for every movement type from 101 to 565 — 153 movement types — and looked at what SAP shipped:

FieldWhat SAP shipped across 153 movement typesWhat that tells you
Create New Batch
CHNEU
Blank on 152 of 153. The only non-blank row is 561 = C — and that one was changed by us, experimenting. SAP's own delivered value is blank everywhere. ⭐ You almost never touch this field. Blank already means "automatic or manual", so automatic numbering works out of the box. If your instinct is to change it, that instinct is usually wrong
Classif.batches
KZCLA
31 movement types = 3 (always ask, foreground) · 2 = 4 (ask for new batches only: 310, 501) · 1 = 1 (background) · 119 = blank (never ask) SAP already asks for quality data on the movements where a batch typically arrives, and stays quiet on the rest. Your job is to check whether that matches your process — not to fill in 153 rows

💡 The lesson: this screen is not a blank form waiting for you. It is a sensible default you audit. A consultant who changes nothing here, and can explain why, has done the job correctly.

Decision 1 — Create New Batch: ask one question about your business

Ask yourself…If the answer is…ChooseReal exampleWhat it costs you
"Is the batch number ever supposed to come from OUTSIDE my company?"
i.e. printed on a supplier's certificate, a mill heat number, a customer's lot id
Yes, sometimes — a supplier's heat number must be kept blank PakSteel buying iron ore: Mughal Steel's certificate says heat H-4471. The storekeeper must be able to type it. Nothing. Staff may type, and if they leave it empty SAP still invents one. This is the right answer for us.
Never — every lot is created inside our own factory, and nobody outside names it C A dairy bottling plant: every batch is one shift's production. No outside party ever supplies a lot number. Staff lose the ability to type a batch on that movement. If a supplier certificate ever needs recording, you are stuck.
Never, AND an auditor must be able to prove no human invented a number C + tell the auditor Pharma: the regulator wants proof that lot ids are machine-generated and unbroken. Same as above, and now the number range itself becomes an audited object.
⭐ The trap this table exists to stop. People read "automatic batch numbers" and set C because it sounds more automatic. It is not — blank is already automatic. C only removes a freedom from your users. Ask "do I need to forbid manual entry?" — if you cannot name a reason, leave it blank.
💡 Best of both worlds: leave it blank, let SAP number the batch, and record the supplier's number in the batch's Supplier Batch field (see A3). Speed and traceability, no lost freedom.

Decision 2 — Classif.batches: who knows the quality number, and when?

Ask yourself…If the answer is…ChooseReal exampleWhat goes wrong if you pick another
"At the exact moment the stock is booked in, does the person at the keyboard already KNOW the quality values?" Yes — the certificate is in their hand, and it is a new lot 4 (new batches only) Ore arrives with a mill certificate. Storekeeper types sulfur as they book it in. Existing batches are not re-asked. This is the best real-plant setting. With 3 they get nagged about batches that were already valued weeks ago
Yes, and I want to see it every single time while learning 3 (always) Our system, movement 101. Good for practice because the screen never hides from you. ⚠️ In production this is irritating: one Classification screen per batch on every receipt, existing lots included
No — our own lab tests it a day later blank PakSteel testing ore in-house. The storekeeper knows nothing yet, so asking them is pointless. QC types it later in MSC2N. With 3 or 4 the storekeeper meets a screen they cannot fill, and learns to press past it — which is how empty classifications happen
No — a program fills it from a lab system 1 (background) An interface posts results automatically; no human should be interrupted. A foreground value stops an automated posting dead, waiting for a human who is not there
🎯 The one question that decides it: does the person posting the document already know the numbers? If yes → ask them (4). If no → don't (blank), and collect the values later. Everything else follows from that.

Decision 3 — which movement types do I even have to look at?

This is the question the step table cannot answer for you, because the answer is your process. You do not configure 153 movement types. You configure the handful your material will actually experience. Build the list like this:

  1. Draw the life of one batch, from the gate to the customer. Where does it come in? Where does it move? Where does it leave?
  2. Write down the movement type for each arrow. If you do not know it, post the movement once in a test client and read it off the material document in MB51.
  3. Only the arrows where a batch is BORN need Create New Batch thinking — a batch cannot be created on a movement that only takes stock away.
  4. Only the arrows where somebody knows the quality values need Classif.batches thinking.
PakSteel's batch lifeMovementBatch born here?SAP's shipped Classif.batchesIs that right for us?
Ore arrives from Mughal Steel against a PO101✅ yes3 — always ask⚠️ ask, but 4 would be kinder in production
Ore issued into the furnace261❌ no — stock leaves3Values already exist; nothing to type. Harmless
Ore issued to a cost centre201❌ noblank — never ask✅ correct. This is also the movement B4's FEFO rule runs on
Billets received from production101 / 531✅ yes3 on both✅ correct — a new lot with new quality data
Transfer Karachi → Lahore301 / 311❌ no (at material level the batch keeps its identity — see A1)blank / 3✅ fine either way
Scrap an out-of-spec lot551❌ no3✅ fine — and a good place to record why it failed
Load opening stock at go-live561✅ yesblank⚠️ the one to watch — see below
⭐ A worked example of choosing wrong — and how to avoid it

Auto-numbering does not work on movement 561 (loading opening stock). The natural reaction is "a setting must be missing", and the natural fix is to set Create New Batch to C on 561. That does not work either — and now the movement type carries a changed value that nothing needs.

The real reason is a known SAP limitation, KBA 3604498: 561 simply does not auto-generate batches, whatever you set. A goods receipt against a PO (101) does — and 101 is still sitting on blank to this day.

Two habits to take from that:

  1. Before changing a field, check what SAP shipped and ask why. If 152 of 153 rows are blank, blank is probably correct and your problem is somewhere else.
  2. When a setting "does not work", search for a KBA before you keep turning knobs. A leftover C on 561 is now permanent noise in this system — a small mess left behind by guessing.
🎯 Proven live — SAP generated batch 0000000002 by itself

A goods receipt (mvt 101) against a PO for RM-IRON-HEAT-01 with the Batch field empty → SAP created batch 0000000002 holding 10 TO (verified in MCHB). A purely numeric batch number is the giveaway that the system, not a person, produced it.

📌 Where to see the number afterwards: MMBE (own line) · MB51 (Batch column) · MSC3N · SE16 → MCHB. The counter NRIV-NRLEVEL also ticks up — proof the number came from your interval.

⚠️ Known SAP quirk: movement 561 in MIGO does not auto-generate a batch even with all three settings right (SAP KBA 3604498). Use a normal PO receipt (101) to test. Impact: test on 561 and you will conclude your three settings are broken when they are correct — hours lost chasing configuration that was never the problem.

📌 A harmless popup you WILL see in SNRO: "The intervals are not included in automatic recording of customizing changes…" — an information notice, not an error. Press the green ✓ and carry on.

⚠️ Which is "better", manual or automatic? Neither — it is a business choice. Manual keeps the supplier's real lot number (vital in steel, pharma and food, where a certificate must match the lot). Automatic is fast and typo-free. Best of both: use automatic numbering and record the supplier's number in the batch's Supplier Batch field (A3) — speed plus traceability.
B3 · OPTIONAL  Make the number reveal the product family · SNRO 🎯 PROVEN LIVE
👉 Use this when somebody says "I want to look at a batch number and know what kind of product it is." Needs first: B2. ⏱️ ~15 min. No ABAP.

⚡ This step will: give each material type its own number band, so the first digit of any batch number tells you the product family. 📄 paper: number-range intervals · 📦 stock: no change · 💰 money: no posting

Where · FieldFillWhat it asksWhy — and the impact
SNRO → BATCH_MAT → Interval editing (F7) → Material Type → Insert LineSubobject HALB · From 2000000001 To 2999999999Which band for semi-finished goods?Every semi-finished batch now starts with 2. ✅ exists live — verified in NRIV
same, next intervalSubobject FERT · From 3000000001 To 3999999999Which band for finished goods?Starts with 3. ✅ exists live — verified in NRIV
⚠️ same, fix the ROH intervalchange ROH from 0000000001–9999999999 to 1000000001–1999999999Which band for raw materials?⚠️ Live finding: our ROH interval is still the full 0000000001–9999999999, which overlaps the HALB and FERT bands and is why B2 produced 0000000002 instead of 1000000002. Narrow it and the first digit becomes meaningful. Impact: leave it wide and the scheme only half works
❓ "Can I have a letter prefix, like RMLL000001?" — tested live: no, not by configuration

We tried it: SNRO → BATCH_MAT → Interval editing → Material Type ROH → interval RMLL000001–RMLL999999 → rejected with NR 560: "Specify numeric interval limits." Batch number ranges are numeric only, even though the batch field itself is a 10-character text field.

And the grouping is by material TYPE, not by individual material: table TNRO shows BATCH_MAT's subobject data element is MTART — hard-wired by SAP. There is no per-material option.

👉 A true text prefix needs an enhancement. Read C1 before you promise it to anyone — including why we advised against it.

B4 · OPTIONAL  FEFO — let SAP pick the oldest lot · CU70 → MBC1 → MIGO 🎯 PROVEN LIVE
👉 Use this when stock goes out of spec with age — food, pharma, chemicals, or our high-sulfur heat. This is the add-on that earns the ₨2.5M in the money example. Needs first: Part A, B1 (the date characteristic), and two batches with different manufacture dates. ⏱️ ~60 min.

⚡ This step will: hand the choice of lot from the storekeeper to SAP — at goods issue the oldest heat is proposed automatically. 📄 paper: material + accounting document · 📦 stock: ↓ from the oldest batch · 💰 money: Dr Consumption / Cr Inventory

🔗 The whole chain — why strategy types exist, and how SAP gets from a movement to a batch

The problem SAP had to solve. "Pick the oldest batch" is not one rule. A warehouse picks differently from a factory, which picks differently from a sales delivery. And even inside the warehouse, one material may need a special rule while everything else follows the default. SAP could not hard-code that, so it reused the same machinery it uses for pricing: the condition technique — a chain of four layers where each layer answers one question.

The four layers, top to bottom:

LayerAnswers the questionOursWho creates itWhere
1. Search procedure "For this movement type, should SAP even try to find a batch — and using which rulebooks?" ME0001 SAP delivers it; you assign it to a movement type OMCG
2. Strategy type "Which kind of rule is this, and what may it be keyed by?" ME01 SAP delivers it. You select it. chosen on the first screen of MBC1
3. Access sequence (the key combinations) "In what order should SAP look — most specific rule first, most general last?" ME01, 6 steps SAP delivers it. You pick which step to write on. the Key Combination popup in MBC1
⭐ 4. Condition record "For THIS movement, THIS plant, THIS material — which batches qualify, and in what order?" 201/PK01/RM-IRON-HEAT-01 + class PS_IRON_BATCH + sort PS_FEFO ⭐ YOU create this. It is the only layer you build MBC1 · change MBC2 · display MBC3

💡 An everyday picture. Think of a company phone directory. The search procedure says "when a call comes in, look people up". The strategy type says which directory to open. The access sequence is the order you search it — try the person's direct line first, then their team, then the switchboard. The condition record is one actual line in the book. You do not print the directory; you add your own entry to it.

🏫 The example that makes all four click: a school's emergency contact list.

A child is unwell. The office must reach somebody. Watch how the school does it — it is the same four layers, in the same order.

At schoolWhich SAP layerIn our scenario
1. "Is this the kind of situation where we phone anyone?" A grazed knee → no. A fever → yes, follow the illness procedure. A fire → the emergency procedure.
The situation decides whether to look at all, and which rulebook to open.
Search procedure
attached to the movement type
Movement 201 has ME0001, so SAP looks. A movement with none simply never searches — and says nothing.
2. Which list do we use — the family list, or the class-teacher list? Each list is organised by different things. Strategy type
you choose it in MBC1
ME01 — the list organised by movement, plant and material. An SD list is organised by customer, so it is no use here.
⭐ 3. In what order do we ring? Mother's mobile → father's mobile → grandmother → neighbour. Stop at the first one who answers.
Most specific first, most general last. This is the fallback.
Access sequence
the Key Combination popup
⭐ 6 steps. SAP tries MovType/Plant/Material first. No record? It tries a looser key. Still none? Looser again — down to a rule for the movement type alone.
⭐ 4. The actual line in the book: "Ahmed Khan → mother → 0300-1234567." Somebody had to write that line. Without it the list is empty no matter how good the rules are. ⭐ Condition record
what MBC1 creates
⭐ Your line: 201 / PK01 / RM-IRON-HEAT-01 → class PS_IRON_BATCH, sorted by PS_FEFO.

Now the failures make sense too — and notice none of them is an error message:

  • Nobody attached a procedure to "fever" → the office never phones anyone. = no search procedure on the movement type: the button does nothing.
  • No line in the book for this child → they work down the list and reach the end. = no condition record: nothing is proposed.
  • The line exists but has no phone number → you found the entry and still cannot call. = record with no Selection criteria: empty batch list, and the Log… button says "Strategy contains no selection specifications".
  • No agreed order → the office rings the neighbour before the mother. = no Sort: batches come back in random order and FEFO quietly fails.

💡 And the reason SAP built it this way: the school does not write a new rulebook for every child — it writes one set of rules and then one line per child. That is exactly why you never create a strategy type: you add your line to a book SAP already wrote. Same machinery runs pricing, so learning this once teaches you two things.

All 11 strategy types SAP delivers (read live from T685T, usage H = batch determination — every one is SAP standard, there are no custom ones on this system)

AreaTypeKeyed bySearch procedureA business example
Goods movements
application ME
ME01MovType / Plant / MaterialME0001⭐ Ours. "When issuing iron ore to production at Karachi, take the oldest heat." Precise — one movement, one plant, one material
ME02Plant"At the Lahore plant, always take the oldest batch of anything." One rule for a whole site
Production
application CO
CO01OrdType / Plant / MaterialCO0001"For rework orders, use the returned batches first, not fresh stock"
CO02Production material"Whenever billets are consumed by any order, take the oldest heat"
Sales & delivery
application V
SD01Customer / MaterialSD0001"This customer's contract says minimum 6 months shelf life remaining"
SD02Customer / Matl / PlantSame, but only when shipped from one specific plant
SD03CountryOfDest / MatGrp⭐ "Anything going to the EU must be a batch that meets EU spec" — export rules by destination
SD04Customer hierarchy"All companies in this buying group get the same batch rule"
SD05Cust. hierarchy / materialSame, narrowed to one product
Warehouse
application WM
WM01Warehouse NumberWM0001"In this warehouse, picking always takes the nearest expiring pallet"
WM02WarehouseNo. / MovTypeWM0002Same, but only for certain movements — e.g. picking, not stock transfers

⭐ Read the pattern: the four areas exist because the question "which batch?" is asked at four different moments — when stock moves, when production consumes, when a customer is served, and when a picker walks the aisle. Each moment knows different facts. A sales delivery knows the customer and destination country; a goods issue knows only the movement, plant and material. That is why the keys differ — and it is the reason you cannot use an SD strategy for a goods movement.

What actually happens when you press "Stock Determination" in MIGO — the chain running, in order:

#SAP asksWhere it looksOn our system
1"Is this movement type set up for batch determination at all?"the movement type's search proceduremvt 201 → ME0001 ✅ already assigned
2"Which strategy types does that procedure contain?"the procedure's step listME01
3"For ME01, in what order do I search?"access sequence ME01 — 6 steps, most specific firsttries MovType/Plant/Material first, then progressively looser keys
4"Is there a record for these exact values?"your condition record201/PK01/RM-IRON-HEAT-01 — found at the first step, so it stops there
5"Which batches qualify?"the record's Selection criteriaclass PS_IRON_BATCH, values empty = any batch of that class
6"In what order do I list them?"the record's SortPS_FEFO → LOBM_HSDAT ascending = oldest first
7"Show the list or pick silently?"Dialog batch determin. on the recordticked → the window appears so you can see it work

⚠️ Break any link and the whole chain goes quiet — with no error. No procedure on the movement (step 1) → the button does nothing. No record (step 4) → nothing proposed. No selection criteria (step 5) → empty list, and the Log… button says "Strategy contains no selection specifications". No sort (step 6) → batches come back in random order and FEFO silently fails. That is why this scenario builds them bottom-up and tests at the end.

🛠️ Can you create your own strategy type? Yes — they are condition types, so a new one can be built in customizing (condition table → access sequence → strategy type → search procedure), exactly like a new pricing condition. In practice almost nobody does: the 11 delivered types already cover the four moments above. If you need a wider or narrower rule, change the key combination, not the strategy type.

🧩 The three pieces, and what each one is for

People get lost here because two of the pieces sound the same. They are not:

  • Sort rule (CU70) — says HOW to order the batches. "Oldest date first."
  • Selection criteria (inside MBC1) — says WHICH batches qualify at all. "Any batch carrying our class."
  • Search strategy (MBC1) — the record that says WHEN to apply them: for this movement, this plant, this material.

⚠️ A sort rule with no selection criteria selects nothing, so there is nothing to sort and the batch list comes back empty. That is the #1 FEFO failure.

🔢 Step 0 — you need a SECOND batch first, with a different date

FEFO means "pick the oldest". With only one batch there is nothing to compare, and you will never see it work. So before anything else, create HEAT-26-02 with a later manufacture date:

  1. MSC1N → material RM-IRON-HEAT-01 · batch HEAT-26-02 · plant PK01 → Date of Manufacture = a date a few days LATER than HEAT-26-01's (ours: 25.07.2026 vs 22.07.2026) → Save.
  2. Put stock in it: repeat A4 with a small purchase order (e.g. 50 TO) and enter HEAT-26-02 as the batch on the goods receipt.
  3. Classify it: MSC2N → HEAT-26-02 → Classification → class PS_IRON_BATCH → Save. Both batches must be classified or the unclassified one drops to the bottom of the list.

⚠️ Do not use movement 561 as a shortcut to load the second batch. It looks easier (no PO needed) but on our system it fails with "G/L account 399999 does not exist in company code PSPK", and it also never auto-numbers. A small PO plus a 101 receipt is what a real plant does anyway.

Step 1 — the sort rule · CU70 (display later with CU72, change with CU71)

Where on screen · FieldFillWhat it asksWhy — and the impact if wrong
Initial screen · Sort SequencePS_FEFOThe rule's name.There is also a Copy Template button if you want to clone an existing rule. Impact: —
Basic Data · descriptionFEFO by manufacture datePlain-words name.Cosmetic
Basic Data · Status1Is the rule released for use?⚠️ Impact: an unreleased sort rule is ignored silently
toolbar → Characteristics buttonpress itWhich facts do we sort on?The Basic Data screen has no list — the list is behind this button. Impact: people save an empty rule and wonder why nothing sorts
⭐ Characteristics screen · row 1Characteristic LOBM_HSDAT · Ascending ✓Sort on the batch's production date, smallest (oldest) first.The grid has exactly two tick columns, Ascending and Descending. Ascending = oldest first = FEFO/FIFO. Impact: tick Descending and you consume the freshest stock first — the exact opposite, and the write-off comes back
Save—Commit the rule.💡 Sort on LOBM_VFDAT (expiry) instead if your material has a real shelf-life date

Step 2 — the search strategy · MBC1 (display with MBC3, change with MBC2)

Where on screen · FieldFillWhat it asks — in plain wordsWhy — and the impact if wrong
Initial screen · Strategy TypeME01Which area of SAP is this rule for?ME01 = Inventory Management (goods movements). Sales deliveries use a different type. Impact: the wrong type never fires in MIGO
⭐ Key Combination popup — 6 choicespick Movement Type/Plant/MaterialHow precisely do you want to target the rule? The other five are: Matl Type · Plant/Material · Movement Type/Material · Movement Type/Plant · Movement Type.Most precise = safest while learning: it only ever fires for one movement, one plant, one material. Impact: choose "Movement Type" alone and your rule applies to every material in the company on that movement
Selection screen · Movement Type · Plant · Material201 · PK01 · RM-IRON-HEAT-01Exactly when should this rule apply?201 = goods issue to a cost centre, the movement we test with. Impact: the rule is silent on any other movement type
Fast Entry grid · No. batch splits0How many different batches may one line be split across? 0 = no limit.Set 1 if a line must come from a single lot. Impact: too low a number and SAP cannot fill the quantity
Fast Entry · Changes allowed✓May the user overrule SAP's proposal?Keep it on while learning. Impact: unticked, the storekeeper cannot correct a bad proposal
Fast Entry · Dialog batch determin.✓Should the proposal be shown on screen for confirmation?⭐ This is what makes the batch-selection window appear. Impact: unticked, everything happens invisibly and you cannot see FEFO working
Fast Entry · Quantity proposal1Should SAP propose quantities as well as batches?1 = propose the full quantity from the chosen batches. Impact: blank means you type quantities yourself
Fast Entry · DisplayUoM · Overdelivery allowedB · untickedWhich unit to show; may it propose more than asked?Defaults are fine. Impact: low
⭐ toolbar → Selection criteria (F7)enter Class PS_IRON_BATCH, class type 023 · leave all characteristic values emptyWhich batches are even allowed to be considered?Empty values = "accept any value" = every batch of this class qualifies. Impact: ⚠️ skip this and the batch list is empty, with the log saying "Strategy contains no selection specifications". The grid column Selection shows ✓ once it is set
⭐ toolbar → Sortenter sort sequence PS_FEFOIn what order should the qualifying batches be listed?Links Step 1 to Step 2. Impact: without it batches come back in random order. The grid column Sort seq. shows ✓ once it is set
Save—Commit the strategy.—

Step 3 — check the procedure is assigned · OMCG (usually already done)

Search procedure ME0001 must be assigned to your movement type. On our system it already was, for movement 201 — verified live. If it is missing, nothing will ever be proposed no matter how good your strategy is.

Step 4 — see it fire · MIGO goods issue 201

Where · ActionDo / seeWhat it asksWhy — and the impact if wrong
Top barAction Goods Issue · Reference Other · movement 201 · the small box beside it EMPTYWhat kind of movement?⚠️ A leftover P (pipeline) in that box makes SAP search pipeline stock, which has no batches. The header text must read "GI for cost center", not "GI pipel.for cst cnt"
Item line · Batch columnleave blank on purposeWhich lot leaves?Leaving it empty is the whole test. Impact: type one and you have skipped the exercise. ⚠️ Do not type * — that gives error MIGO046
⭐ Button row under the item table · Stock Determination for all itemspress it — the last of the three small icons just after ContentsAsk SAP to apply the rule now.MIGO never runs batch determination by itself. By design: typing a batch = "I choose", pressing the button = "SAP, you choose". Impact: the per-item icon in the grid is often greyed out — use the "for all items" one
Batch determination windowSAP lists HEAT-26-01 first and proposes its quantityDid the rule pick the oldest lot?Check the Characteristic Sorting column shows real dates. A ? means that batch has no value for the sort characteristic and it drops to the bottom — fix by re-saving it in MSC2N (see Errors table)
Log… (F6) buttonpress it whenever the list is emptyWhy did nothing come back?⭐ The best diagnostic on this screen — it names the exact reason in one line
Post—Commit the issue.Stock leaves the oldest lot, in spec, before it can expire
🎯 FEFO proven live end to end

Sort rule PS_FEFO (LOBM_HSDAT ascending) + strategy type ME01, key Movement Type/Plant/Material = 201/PK01/RM-IRON-HEAT-01, selection criteria = class PS_IRON_BATCH. In MIGO, SAP listed HEAT-26-01 FIRST (date 22.07.2026) ahead of HEAT-26-02 (25.07.2026) and proposed its quantity. Posted as material document 4900423478 — the older batch consumed, the newer untouched.

Full chain on this material: GR 5000047744 (101 → HEAT-26-01, 100 TO) · 4900423477 (561 → HEAT-26-02, 50 TO) · GI 4900423478 (201 → HEAT-26-01, FEFO).

✅ Verify: MMBE → the HEAT-26-01 line has dropped while HEAT-26-02 is untouched.

B5 · OPTIONAL  One batch per piece / bundle · MIGO → Distribute Quantity 🎯 PROVEN LIVE
👉 Use this when each physical item — a steel roll, a bundle, a drum — must be identifiable on its own, but the material is bought and stored by weight or volume so serial numbers are impossible. Needs first: Part A. ⏱️ ~25 min. No config at all.

⚡ This step will: receive 3 TO of ore as three separate bundles, each with its own batch — per-item identity without changing the base unit or creating a new material. 📄 paper: 1 material + 1 accounting document (3 batch lines) · 📦 stock: 3 batches × 1 TO · 💰 money: Dr Inventory / Cr GR-IR

Step 1 — a purchase order for the total quantity (ME21N) — exactly as in A4, but quantity 3 TO. Note the PO number.

Step 2 — the goods receipt, split into 3 batches (MIGO)

  1. MIGO → Action Goods Receipt · Reference Purchase Order → the PO number → Enter. ⚠️ Check the small box beside the movement type is empty.
  2. Where tab → Storage Location RAWM → Enter. The line must be valid before the batch fields work.
  3. Click the item line, then press Distribute Quantity — ⭐ the FIRST of the small icons immediately after "Contents" in the button row under the item table. (2nd = Expand BOM, 3rd = Stock Determination. Hover to confirm the tooltip.)
  4. A popup opens: "Distribute Quantity: 3 TO for Item 0001". Fill three rows:
    RowQty in UnEBatch
    11BDL-26-001
    21BDL-26-002
    31BDL-26-003
    ⚠️ Batch names are max 10 characters. 💡 If you have already done B2: leave the Batch cells empty and SAP numbers them itself — and note that with OMJJ set to C you can no longer type these names by hand at all.
  5. Press Check ("Already distributed" should total 3 TO) → then Adopt.
  6. Back on the item list you now see 3 lines, 1 TO each. ⚠️ Tick "OK" on ALL three — they come back unticked after Adopt, and a missed tick is the most common reason the post fails.
  7. Expand Head.data → field Delivery Note → e.g. DN-26-001. Mandatory on our system.
  8. Post 💾 → "Material document … posted".

Step 3 — check, and (optionally) give each bundle its own quality data

🎯 Proven live: PO 4500032789 (3 TO) → GR split via Distribute Quantity → 3 batches of exactly 1 TO: BDL-26-001 · BDL-26-002 · BDL-26-003 (verified in MCHB). Base unit stayed TO throughout.
⚠️ The honest cost: 3 bundles is easy; 3,000 bundles means 3,000 batch master records — reports slow down and the batch list becomes unreadable. For high volume prefer serial numbers (B6, needs a PC-based material) or Handling Units. Use B5 when volumes are modest, or when you genuinely need batch features (characteristics, FEFO, shelf life) on each piece.
B6 · NOT BATCH MANAGEMENT  Serial numbers — where batches stop · OIS2 ⛔ BLOCKED on our system
👉 Use this when you must know where each individual piece is, who received it, and its repair history — machines, motors, transformers, laptops. Do not use it for anything you weigh or pour. Needs first: a material whose base unit is countable (PC/EA). ⏱️ ~45 min.
⚠️ First, be clear: serial numbers are NOT part of batch management

They are a completely separate SAP function. They share no tables and no configuration with batches:

Batch managementSerial numbers
ModuleMM — Materials ManagementPM/CS — Plant Maintenance
Switched on bythe "Batch management" tickthe Serial Number Profile field
Data lives inMCH1 / MCHBequipment records (EQUI)
TransactionsMSC1N MSC3N MMBEIQ01 IQ03 IQ09
ConfigOMCT OMCZOIS2
Answers the question"which delivery is this from?""which exact piece is this?"

So why is it on this page? Because it marks the boundary where batch management stops. The moment somebody asks "can each single unit have its own identity and history?", batches are the wrong tool and you must recognise it. A material can have batches, serial numbers, both, or neither.

Rule of thumb: if you can weigh or pour it → batch. If you can count it and it has a nameplate → serial number.

⛔ Why this cannot be run on our IDES — the base unit must be DISCRETE (hit live)

Putting profile 0001 on FERT-REBAR-01 failed with M3 419: "Serial numbers can be managed only if base unit of measure is discrete."

Why: a serial number identifies one countable thing. FERT-REBAR-01's base unit is TO (tonnes) — a weight, divisible into kg and grams. Half a tonne is still ore; half a serial number is meaningless. SAP only allows dimensionless units: PC, EA, PAL.

Checked live — no existing PakSteel material qualifies: FERT-REBAR-01 & FERT-REBAR-GALV-01 = TO · PIPE-GAS-01 = M3 · RM-IRON-01 / RM-IRON-HEAT-01 = TO · PAPER = KG. Only OFFC-PAPER-01 is EA, but its type NLAG holds no stock. → To practise this you must create a new material with base unit PC. Plan serialisation before creating a material — the base unit is very hard to change later.

💡 This error IS the lesson: SAP itself enforces "batches for bulk, serial numbers for countable pieces."

✅ Checked live: OIS2 already contains 9 ready-made profiles — no config needed to start: 0001 Integrated serial no · 0002 Serial numbers in SD · 0003 Stock check ⭐ (closest to "find each piece in the warehouse") · 0004 HU processing · 0005 Purchasing · plus GG00, GG01, J001, SPL.
Where · FieldFillWhat it asksWhy — and the impact
OIS2 · pick a profile0003 (Stock check)Which rulebook do serial numbers follow — when are they required, is stock validated?The profile decides how strict SAP is. Impact: a stock-validating profile refuses movements when serial records don't match stock — strong control, but it blocks sloppy data
Material master · MM02 → Work Scheduling or General Plant Data / Storage 2 → Serial Number Profile0003Should THIS material be tracked piece by piece?Like the batch tick, but for individual pieces. Impact: ⛔ fails with M3 419 unless the base unit is PC/EA
Goods receipt · MIGO → Serial Numbers tabtype or scan one serial per pieceWhich exact pieces arrived?10 pieces = 10 serial numbers. Impact: SAP creates an equipment record per piece and will not post until the count matches the quantity
Check it · IQ03 / IQ09—Where is this exact piece, and what happened to it?Full history per piece. Impact: a warranty claim is traced to one unit, not a whole lot

🎯 Which for PakSteel? Iron ore = batches. Motors, weighbridges, forklifts = serial numbers. Many plants use both: the batch says which heat the steel came from, the serial number says which machine is on which line.

B7 · OPTIONAL  Barcode labels — so the worker can read the batch off the item → Scenario 27
👉 Use this when your question is "the system knows the batch, but how does the man in the yard know which physical roll is which?" Needs first: Part A.

Batch management only pays off if the number is readable on the item itself. That is barcode labelling, and it is big enough to have its own page: Scenario 27 — Barcode Labels & Scanning covers SAP's built-in barcodes (SE73), printing a label automatically at goods receipt (NACE application ME + MN21), and scanning it back in — which needs no configuration at all, because a scanner is just a very fast keyboard.

Scenario 27 also marks clearly which steps belong to MM, which to Basis, and which to ABAP — useful when you have to tell a client who does what.

PART C · WHEN CONFIG IS NOT ENOUGH

Nothing here is needed to make batch management work. It is the part most courses skip — and the part interviewers ask about. Read it once; there is nothing to post.

C1  What configuration could NOT do — and what happens next
🗣️ The request that configuration could not fully meet
"Our batch numbers should show what the product is — RMLL000001 for Rebar LL, RMAA000001 for Rebar AA — with the serial running automatically." A completely normal request from a warehouse manager.

We tested three standard options on the real system before saying "no" to any of them:

IdeaHow we tested itResult
Letters inside the number range — RMLL000001–RMLL999999SNRO → typed it → Enter❌ NR 560 "Specify numeric interval limits" — batch ranges are numeric only
A separate range per individual materialSE16 → TNRO❌ the range is keyed to material TYPE (MTART), hard-wired by SAP — there is no per-material option
⭐ Numeric bands per material typeSNRO → intervals✅ Works, no code — 2… = semi-finished, 3… = finished. This is B3, and it delivers about 90% of the value at zero risk
🎯 The consultant's answer
Only the letters themselves are missing, and that part needs an enhancement. So the honest advice to the business is: take the numeric bands today at zero risk, and pay for custom logic only if the letters are genuinely required — on a printed certificate, a customer contract, or by law. "The manager prefers it" is not a good enough reason to add permanent custom code.

One more finding worth saying out loud: we checked, and the hook does not currently work on this system. It exists on paper, but a missing piece of technical plumbing means nobody could build it here today without Basis help first. Confirming that before promising a date is exactly the kind of check that separates a careful consultant from an optimistic one.

🔧 Yes — this IS possible with customisation. Here is how you take it forward.

You do not write the code. You do these five things, then hand the result to a developer:

  1. Prove configuration cannot do it — exactly as in the table above. Always first.
  2. Find the official hook and read what it offers. For batch numbers there is one, and SAP even built a movement-type setting to switch it on.
  3. Check the hook really works on your system — not just that it exists. This is the step everybody skips, and it is what caught us out here.
  4. Write a short functional spec: when it fires, what data it receives, what it must return, and what it must not touch.
  5. Agree the cost — testing at every upgrade, forever.

👉 All five steps, the exact searches, and the real batch hooks are on one page:

📘 MM Customisation Guide → Batch management — including two hooks you have not met yet, which fill batch data and propose batch numbers automatically at goods receipt.

Also there: the 6-step test for "can this be customised?" · what must be in place before any code is written · the full catalogue of MM hooks (purchase orders, goods movements, invoices, material master, release strategy, output).

C2  Which layer solves which requirement — the decision you actually make

A consultant's real skill is not knowing every setting. It is knowing which layer a requirement belongs to, and stopping at the cheapest layer that works.

If the business asks for…LayerCode?Where
"Track our stock by delivery / lot"Configuration + master data❌ nonePart A
"Record test results per lot"Master data❌ noneB1
"Stop staff typing lot numbers"Configuration❌ noneB2
"The number should show the product family"Configuration❌ noneB3
"Always use the oldest stock first"Configuration❌ noneB4
"Every roll must be identifiable"Master data❌ noneB5
"Track each individual machine"Master data — but a different module❌ noneB6
"Block a purchase order that breaks our rule"Enhancement✅ small📘 Customisation Guide → Purchase orders
"Refuse to save a material that breaks our data rules"Enhancement✅ small📘 Customisation Guide → Material master
"The number must literally read RM-LL-00001"Enhancement ⚠️✅ yesC1 above — and ask whether it is worth it
🎯 The headline lesson from this whole scenario
Nine of the ten things we wanted were achieved with configuration and master data — no code at all. Only the cosmetic text prefix needed an enhancement, and it turned out to be the hardest, riskiest and least valuable item on the list. That ratio is normal in real projects — and recognising it is what makes a consultant useful rather than expensive.
🗣️ How to answer this in an interview
"Before writing code I test configuration first. On a batch-prefix requirement I proved the number range is numeric-only and keyed to material type, checked every batch enhancement on the system, and confirmed the only route was a classic user exit that was not even usable there. I advised the client that numeric bands per material type met about 90% of the need at zero risk, and that the custom prefix would add a permanent upgrade cost for a cosmetic benefit."

That shows config knowledge, enhancement knowledge, and commercial judgement.

🐞 Errors we hit live — and how to fix them

These are the real blocks we met running this scenario on our IDES (DEV / 250). Each one teaches you to read SAP's "error language" and tie it back to a cause.

Step · WhereWhat SAP showsWhat it means & why it happensHow to fix it
A1 · OMCD Opens a screen titled "Default: 'Delivery-Completed' Indicator" — nothing about batches On S/4HANA OMCD is not the batch-level transaction (older notes used it). Wrong code → wrong screen. Use OMCT → button "Batch level".
A1 · OMCT The batch-level radios are effectively fixed; a change won't stick Once any batches exist, SAP locks the batch level — changing it is a data-conversion project. Our system has 200+ batches, so it is frozen at Material level. Nothing to fix — check, don't change. Only a brand-new sandbox with zero batches can pick freely.
A2 · MM02 on RM-IRON-01 "Batch management requirement cannot be changed" — M3 530 (with a 'Display errors' button) You tried to turn batch management on for a material that has stock (105 TO). SAP blocks the flag unless stock is zero for two consecutive periods — old stock has no batch to belong to. Create a fresh, zero-stock material that is batch-managed from birth — step A2. (Or empty the old one for two periods first.)
A4 · ME21N "Material RM-IRON-HEAT-01 not maintained by accounting department" — ME047 The new material has no Accounting view (no valuation class / price). A PO needs a price to value the goods. Copying from another material does not always carry the accounting data across. Add Accounting 1 in MM02 for plant PK01: Valuation class 3000, Price control V, Moving price 250000, Price unit 1. Then create the PO again.
A4 · ME21N "Net price must be greater than 0", and the price field won't keep a typed value ("No condition record found for PB00") PakSteel's purchasing pricing schema takes the base price only from PB00 (automatic), which reads a purchasing info record. With no info record PB00 = 0, and a manually typed price is not retained. Create the info record (ME11): MUGHAL21 / RM-IRON-HEAT-01 / PKLO / PK01 → Net price 250000/TO, Std Qty 100, Planned deliv. 5 days. (Ours: 5300079965.)
A4 / B5 · MIGO Post does nothing, or "Enter Delivery Note" Two separate causes: the item's OK tick is missing (it clears itself after Adopt in B5), or the mandatory Delivery Note header field is empty. Tick OK on every line, and expand Head.data → fill Delivery Note.
B1 · CT04 / CL02 "Class type 023: Class PS_IRON_BATCH not yet created" You typed the name and pressed Enter. Enter means "open the existing one" — and it does not exist yet. Type the name, then press the Create button (the blank-page icon), not Enter.
⭐ 16.7 · OMJJ — cannot get started OMJJ opens on a tick-box list titled "Field Selection", not on a movement type. Pressing the green tick without ticking anything goes nowhere. Not an error. OMJJ maintains a view cluster, so it first asks which key do you want to filter by. There are two popups: "Field Selection", then "Determine Work Area: Entry". Popup 1: tick Movement Type → green tick. Popup 2: From: 101 → green tick. Now you land on Change View "Movement Type": Details.
⭐ 16.7 · SNRO — no "Number Ranges" button, nowhere to type ROH You reach "Number Range Object BATCH_MAT: Display" and there is no button with that name, and no field called "Subobject". Two naming problems. The button is Interval editing (F7) and it is an icon with no label. And on the next screen (transaction SNUM) the subobject field is relabelled "Material Type", because SAP borrows the text of the data element MTART. Press Interval editing (F7) → field Material Type = ROH → the Intervals button with the pencil → Display <-> Change (Ctrl+F1) → Insert Line (F6) → Save. "Insert Interval" does not exist either.
⭐ B1 · MIGO Classification screen — Save is greyed out You type the characteristic values, and there is no way to save. The Inconsistent button is red and cannot be clicked, and the status bar shows no message. Nothing is wrong. This screen is a sub-screen MIGO borrows from Classification (SAPLCLFM/SAPLCTMS), and a borrowed sub-screen has no Save of its own — the owner document saves it. Inconsistent is a display-only status label, not an error. Press F3 (Back). ⚠️ F3 does not exit — it moves to the NEXT batch's classification screen (watch the Batch field change). Keep pressing until MIGO reappears. Then tick Item OK and press Post — the classification is written together with the material document. Clear the Inconsistent flag afterwards with MSC2N → Classification → Save.
⭐ A4 / B1 · ME21N (not an error — a misunderstanding, and a very common one) "I created the characteristic, the class and the batch. Now I make the purchase order and there is no Classification tab on it." Nothing is wrong. A purchase order never had one. ⭐ Checked live on our system: the PO item has 15 tabs, the PO header has 11, and Classification is in neither; the Environment menu has no batch or classification entry; and the one batch button that does exist on the item's Material Data tab is Create Batch, which answered "Batch … for material … in plant PK01 already exists" — it only creates a batch, it never classifies one. Why: a purchase order is a buying document. At order time the goods do not exist yet, so there is nothing to measure. Classification describes real stock, so it lives on the batch. Open MSC2N (change) or MSC3N (display) → Material · Batch · Plant PK01 → Classification tab → Class PS_IRON_BATCH → your values are there. To search many lots by value use CL30N (class type 023) or BMBC → Classification tab. To type values at the goods receipt instead, that is the Classif.batches field in OMJJ → movement type → Entry Control — ours is 3 = "Classification Always Invoked in Foreground", so MIGO already asks, once per batch.
B1 · CL20N (wrong tool) "Object type MCHA not defined as classifiable object" CL20N tried to classify the batch as a plant-level object (MCHA). Our system is at Material level, where a batch is the MCH1 object — and class type 023's object list here contains MCH1, not MCHA. Wrong tool, not broken config. Use MSC2N → Classification tab. It uses the correct MCH1 object, and needs no config change. (On a plant-level system it would be MCHA.)
B2 · SNRO A popup: "The intervals are not included in automatic recording of customizing changes…" An information notice, not an error. Number-range intervals are data, not customizing, so they are not auto-transported. Press the green ✓ and carry on. To move them later use Interval → Transport.
B2 · MIGO still asks for a batch Batch field remains mandatory although OMCZ is Active Only 1 of the 3 settings is done. Most often the missing one is OMJJ → Create New Batch = C; sometimes the SNRO interval for your material type is missing. Work through all three rows of the B2 table in order. Then test with 101, not 561.
B2 · SNRO — letters in the interval NR 560 "Specify numeric interval limits" Batch number ranges are numeric only, even though the batch field itself is 10 characters of text. Use numeric bands per material type (B3), or take the enhancement route (C1).
B4 · MIGO — typing * in the Batch field "Use button for stock or batch determination" — MIGO046 MIGO never runs batch determination by itself. The old MB1A accepted *; MIGO deliberately does not. Typing a batch = "I choose"; pressing the button = "SAP, you choose". Click Stock Determination for all items — the last of the three small icons just after Contents. (The per-item icon in the grid is often greyed out.)
B4 · determination returns an empty list Batch Selection is blank; Log… (F6) says "Strategy contains no selection specifications" The strategy had a Sort rule but no Selection criteria. The sort rule only says how to order; the selection criteria say which batches qualify. With none, nothing is selected, so nothing can be sorted. MBC2 → select the material line → Selection criteria (F7) → enter class PS_IRON_BATCH (type 023) → leave the characteristic values empty → Back → Save. 💡 The Log… button is the best diagnostic on that screen.
B4 · wrong batch proposed (newer instead of older) The older batch shows ? in the Characteristic Sorting column and is listed last ? means that batch has no value for the sort characteristic. It happens when the batch was classified before LOBM_HSDAT was added to the class — its classification is stale, and the batch master shows status "Inconsistent". Batches with no sort value drop to the bottom. Open the batch in MSC2N → Classification (the date auto-fills from Date of Manufacture) → Save. Best practice: define all characteristics before classifying any batch.
B4 · MIGO mvt 201 — wrong movement text Header reads "GI pipel.for cst cnt" instead of "GI for cost center", and no batches are ever found The Special Stock indicator (the small box next to the movement type) still held P = pipeline, left over from Scenario 11 — MIGO remembers it. SAP was searching pipeline stock, which has no batches. Clear the small box next to the movement type → Enter → the text must read "GI for cost center". Always check that box when a movement behaves oddly after a special-stock scenario.
B4 · MIGO mvt 561 "G/L account 399999 does not exist in company code PSPK" Movement 561 posts Dr Inventory / Cr an offsetting account, and SAP's default initial-stock account 399999 was never created in PSPK. Nothing wrong with the batch steps. Either bring the 2nd batch in the normal way (small PO → MIGO 101) — what a real plant does anyway — or have FI create G/L 399999 (FS00, copy from company code 0001).
B6 · MM02 serial number profile M3 419 "Serial numbers can be managed only if base unit of measure is discrete" You cannot serialise something measured by weight or volume. Half a serial number is meaningless. Create a material whose base unit is PC / EA. Or use B5 (one batch per piece) instead — that works on a tonne-based material.
C1 · trying to build the batch-number prefix DS027 — SAP refuses to create the place where the custom logic would live The enhancement exists on paper, but a piece of technical plumbing behind it was never generated on this system. "The hook exists" does not mean "the hook is usable." Not something you fix as an MM consultant — it is a Basis/developer task, and it often needs an access key from SAP. Check this before you promise a date. Full explanation: Customisation Guide → step 5.

📖 Words and codes used on this page

Every term is explained where it first appears, but here they are all in one place. Look anything up without losing your spot.

WordWhat it means — in plain words
Batch (= lot)One delivery, or one production run, of the same material — kept separate so you can tell it apart from the next one. In steel it is called a heat number.
Batch levelHow wide a batch number must be unique: one plant, one material everywhere, or the whole system. Set once, system-wide (A1).
CharacteristicOne blank on a form — "sulfur ___ %". Built in CT04.
Class / class type 023The whole form that holds the blanks. Class type says what kind of object the form is for; 023 is the batch kind.
ClassificationFilling that form in for one particular lot. Typed in MSC2N, read in MSC3N — never in a purchase order.
Batch determinationLetting SAP choose which lot leaves the warehouse, instead of the storekeeper choosing.
FEFO / FIFOFirst Expired First Out / First In First Out — two rules for "use the oldest stock first".
Unrestricted / restrictedStock that is free to use / stock that is held back, e.g. waiting for a lab test.
"Enjoy" screenA modern SAP screen with tabs — MM01, MIGO, MSC1N, ME21N. Older screens have no tabs. ⚠️ Every screen has its OWN tabs — same word, different pages. MSC1N has a Classification tab; ME21N does not.
Number range / subobjectA pool of numbers SAP hands out one at a time. The subobject divides that pool — for batches it is the material type.
Movement typeA 3-digit code saying what kind of stock movement it is: 101 receive against a PO · 201 issue to a cost centre · 261 issue to a production order · 561 load opening stock.
TO · UnE · PC/EATonnes (how ore is weighed) · unit of entry (the unit you are typing in) · piece / each (countable units).
Info recordThe agreed price of one material from one supplier. Without it, our purchase orders cannot find a price.
Valuation classDecides which general-ledger accounts a material posts to. Ours is 3000 for raw materials.
KBASAP Knowledge Base Article — a support note on SAP's own website.
EnhancementAn official place SAP leaves open so you can add your own logic without changing SAP’s program. Two kinds: BAdI (modern) and user exit (older). See the Customisation Guide.
T-codeWhat it doesT-codeWhat it does
OMCTbatch level (A1)CT04characteristic (B1)
MM01/MM02/MM03create / change / display a materialCL02/CL03class — change / display (B1)
ME11create a purchasing info recordCU70/CU71/CU72sort rule — create / change / display (B4)
MSC1N/MSC2N/MSC3Nbatch — create / change / displayMBC1/MBC2/MBC3batch search strategy — create / change / display (B4)
ME21Ncreate a purchase orderOMCGwhich movements run batch determination
MIGOpost a goods movementOMCZswitch automatic batch numbers on (B2)
MMBEstock overview, per batchOMJJmovement-type settings (B2)
MB51list of material documentsSNROnumber ranges (B2, B3)
SE16look inside any tableOIS2serial number profiles (B6)

✅ Verification

🎯 Proven live on our IDES (DEV / 250)

🎓 Interview-Ready Answers

Q: What is the absolute minimum to get batch management working?

Four things: (1) know your batch level (OMCT — plant, material or client; it is system-wide and locked once batches exist); (2) tick Batch management on the material's Purchasing view — only possible while the material has zero stock in the current and previous period; (3) have a batch to receive into, either pre-created in MSC1N or typed at the goods receipt; (4) post the goods movement with the batch filled. Everything else — classification, FEFO, automatic numbering — is optional.

Q: What are the three batch levels and which is most common?

Set/checked in OMCT → "Batch level": Plant (unique only within one plant; batches live in MCHA), Material (unique per material across all plants; batches live in MCH1), Client (unique across the whole client). Material level is the most common — and it is what our IDES uses. The choice is system-wide and hard to reverse: once batches exist SAP locks it, so it is decided up front. It also decides practical things later — at material level you classify a batch with MSC2N (object MCH1), not CL20N (object MCHA), and the number-range object is BATCH_MAT.

Q: What is the difference between a batch and a batch characteristic?

The batch is the identifier for a physical lot (e.g. HEAT-26-01), and SAP tracks stock per batch in MCHB. Characteristics (sulfur %, manufacture date, expiry) are classification values attached to the batch via class type 023 — they describe the lot and drive batch determination. Some characteristics are yours (created in CT04); others are SAP's, like LOBM_HSDAT, which is a window onto the batch master field MCH1-HSDAT and fills itself.

Q: How does FEFO picking actually work — what are the moving parts?

Three pieces. A sort rule (CU70) says how to order batches — e.g. LOBM_HSDAT ascending. Selection criteria inside the search strategy say which batches even qualify — typically "any batch carrying our class". A batch search strategy (MBC1, strategy type ME01 for inventory management) ties them to a key combination such as Movement Type/Plant/Material. At goods issue you leave the batch blank and press Stock Determination; SAP proposes the oldest qualifying lot. The classic mistake is a sort rule with no selection criteria — the list comes back empty because nothing was selected to sort.

Q: A client wants each individual roll tracked, but the material is in tonnes. What do you propose?

Serial numbers are impossible — SAP rejects them unless the base unit is discrete (PC/EA), error M3 419. The workaround that needs no new material and no configuration is one batch per roll: receive with MIGO's Distribute Quantity and give each physical piece its own batch. You then get per-piece identity, per-piece characteristics and per-piece FEFO while still buying and reporting in tonnes. The honest caveat: thousands of pieces means thousands of batch master records, so for high volume propose Handling Units or a redesign with a countable base unit instead.

Q: Does activating batch management change the accounting of a goods receipt?

No — the FI posting (Inventory Dr / GR-IR Cr at 101) is unchanged. Batch management adds a mandatory batch on every movement and splits the stock record per batch (MCHB) on top of the material total. Value is still held at valuation-area level unless you combine it with split valuation.

← Previous
Scenario 15: Outline Agreements
Next →
Scenario 17: Split Valuation