Scenario 15 — Outline Agreements (Contracts & Scheduling Agreements)

TIER 5 · PROCESS CONTROL ★★★☆☆ ⏱️ ~2 hours ME31K (contract) → ME21N (release order) · ME31L (sch agr) → ME38 (sch lines)
← Previous
Scenario 14: Source Management
Next →
Scenario 16: Batch Management
✅ Verified live on our IDES (DEV / client 250) — 23-Jul-2026: contract 4600000032 & scheduling agreement 5500000000 created live

Every master-data code below is the real one on our PakSteel IDES (client 250, company code PSPK) — the material, the vendor, and Mughal's info record are all confirmed live, so there is nothing to translate. The contract (ME31K) and the scheduling agreement (ME31L) were created live — their real numbers are shown below. The release order (ME21N, step 15.2) and the delivery-schedule lines (ME38, step 15.4) are the parts you create while running it, so those appear as neutral placeholders like (your release-order PO number) — we never invent them.

WhatLive value on the system
MaterialRM-IRON-01 "Iron Ore Lump Grade A 50-100mm" (type ROH)
VendorMUGHAL21 "Mughal Steel Industries Ltd" (Business Partner)
Info record5300079940 (net price ₨250,000 / TO)
Contract (ME31K, type MK)4600000032 — created live (1000 TO @ 250,000, valid 23.07.2026–22.07.2027)
Scheduling agreement (ME31L, type LP)5500000000 — created live (1000 TO @ 250,000)
Release order (ME21N)(your release-order PO number) — you create this during the run

Honesty note — the two framework documents (contract 4600000032, SA 5500000000) were built live; the release order (15.2) and schedule lines (15.4) are done by you during the run. ⚠️ Because Scenario 14 switched on source-list enforcement for RM-IRON-01, the SA's schedule lines throw 06 722 until the SA is added to the source list — see the Errors box (we hit this live). Hit a snag? Troubleshooting Center.

📊 Business Case

An outline agreement is a long-term purchasing arrangement with a vendor — a commitment to buy a target quantity or value over a period at agreed terms, instead of negotiating every order from scratch. The two flavours are contracts (a price/quantity framework you call off against with release orders) and scheduling agreements (the delivery schedule is built into the agreement itself). Both lock pricing and commit volume, which protects you from spot-market volatility and cuts the paperwork on every shipment.

🕐 When to use it

Repeated buying of the same material from the same vendor over months: a yearly raw-material supply deal, or a steady JIT delivery cadence into production.

❓ Why it matters

It locks the price for the whole period and secures capacity. You're insulated from price swings, and each call-off auto-fills terms from the agreement — faster, consistent, and auditable against the committed volume.

👤 Who triggers it

Strategic purchasing negotiates and creates the agreement (ME31K / ME31L). Operational buyers then raise release orders (ME21N) or the schedule lines (ME38) drive deliveries automatically.

🔁 The key distinction

Contract = framework + separate release orders. Scheduling agreement = framework with the delivery schedule embedded (no separate PO per shipment). Contracts suit volume guarantees with flexible timing; scheduling agreements suit predictable JIT cadence.

💰 Financial Impact — The Easy-Money Example

This is a control scenario — the win is the cost it avoids. PakSteel locks 1000 TO of iron ore at PKR 250,000/TO for a year. Now imagine the spot price climbs mid-year. Here is the money story:

📜 Contract locked
PKR 250,000/TO
1000 TO committed for 12 months. Price fixed in the agreement, regardless of the market.
→
📈 Spot price jumps
Market → 290,000/TO
A spot buyer now pays PKR 40,000 more per TO. PakSteel still pays the locked 250,000.
→
💰 Saving banked
~PKR 40M avoided
40,000 × 1000 TO of volatility sidestepped — plus guaranteed supply when others are scrambling.

The big idea: a contract converts an unknown future price into a known one. The agreement doesn't move the P&L by itself — it's the release orders (or schedule lines) that drive the actual GR and invoice — but it caps your input cost and guarantees the volume, which is exactly the protection a steel mill needs against commodity swings.

💡 Lesson: Lock price + commit volume up front, then call off against it. You trade a little flexibility for price certainty and secured supply — avoiding spot-market volatility on a material you know you'll keep buying.

🇵🇰 The Business Story

PakSteel signs a 1-year contract with Mughal Steel for 1000 TO at PKR 250,000/TO. Throughout the year, they release smaller POs (release orders) against the contract — 100 TO this month, 80 TO next, etc. The contract guarantees price + capacity. Alternative: a Scheduling Agreement with the delivery schedule built-in (less paperwork per shipment).

🎯 What you'll learn — Contract vs Scheduling Agreement

AspectContract (ME31K)Scheduling Agreement (ME31L)
What it isLong-term price/qty agreementLong-term delivery schedule
Release Order needed?Yes (ME21N referencing contract)No — delivery schedule embeds releases
Document TypeMK (quantity) or WK (value)LP (with release docs) or LPA (without)
Use whenVolume guarantee + flexible schedulingJIT, predictable cadence
✅ Before you start — what this scenario assumes
📦 Material needed — create first (just-in-time)

RM-IRON-01 (ROH, raw) — create steps. New to MM01? the why behind every field.

📋 Prerequisites — what must be in the system (and why)

These are the records and settings an outline agreement needs before ME31K / ME31L will save and before a release order will draw on the deal. All master data is confirmed live (client 250, company code PSPK). Each item is a link in the chain — miss one and SAP throws a message from the Errors box. Read this first; the steps stand on it.

① Master data — the records the steps use

RecordLive valueWhat it is · why needed
MaterialRM-IRON-01 "Iron Ore Lump Grade A 50-100mm" (ROH), plant PK01, SLoc RMT, unit TOThe ore the contract and SA are written for. Needs a Purchasing view (see ③) so the agreement item has purchasing data to read.
VendorMUGHAL21 "Mughal Steel Industries Ltd" (Business Partner), extended to PKLO + PSPKThe mill we signed the year deal with — the partner on both the contract and the SA.
Info record5300079940 (₨250,000 / TO)Gives the agreement item a saved price so the net price defaults instead of being keyed by hand.
② Vendor MUGHAL21 extended to purchasing org PKLO

🎯 In plain words: a supplier is only usable by a buying team once that team's purchasing org is switched on for it — like a shop being registered with your branch before you can order from it.

🧭 Real-world note — where you actually create the vendor: BP, not XK01/MK01
③ Material RM-IRON-01 with a Purchasing view

🎯 In plain words: an outline agreement is a purchasing document, so the material must have its Purchasing side filled in before it can go on an agreement line.

④ A price for the agreement item — info record 5300079940 or a manual net price

🎯 In plain words: the agreement line must carry a rate; either it pulls one from a saved price page (the info record) or you type it in.

⑤ Org structure — purch org PKLO + purch group RMT + plant PK01

🎯 In plain words: the deal has to be owned by a buying desk and delivered to a real plant — these codes say who buys and where it lands.

⑥ Agreement document types MK and LP active

🎯 In plain words: SAP has to recognise the kind of deal you're making — a quantity contract (MK) and a scheduling agreement (LP) are two separate document types that must be switched on.

🔧 Step-by-Step

🧭 The route at a glance — read this first
StepT-codeWhat it doesWhy this step exists
15.1ME31KCreate quantity contract: 1000 TO at a locked yearly pricea year-long promise needs its own document
15.2ME21NRaise a release order pulling 100 TO from the contracteach pickup against the deal still needs an order
15.3ME31LCreate scheduling agreement: same locked deal, built for a calendarregular deliveries deserve a deal that carries dates
15.4ME38Add delivery dates + quantities inside the agreementeach calendar line replaces a whole PO
📇 Your live codes — quick reference

Material RM-IRON-01 "Iron Ore Lump Grade A 50-100mm" (ROH) · Vendor MUGHAL21 (Mughal Steel Industries Ltd) · Info record 5300079940 (₨250,000 / TO) · Plant PK01 · SLoc RMT · Purch org PKLO · Purch group RMT · Company code PSPK · UoM TO · Quantity contract type MK, target 1000 TO · Scheduling agreement type LP · Contract # (your contract number) · SA # (your scheduling-agreement number) · Release PO # (your release-order PO number) · Transactions ME31K/ME33K · ME21N · ME31L/ME33L · ME38 · Tables EKKO/EKPO (agreement header/item), EKET (schedule lines).

🔄 Contract Flow

15.1 — Create Quantity Contract · ME31K

⚡ This step will: create the year-long framework promise itself — after saving, a contract exists that locks 1000 TO at 250,000/TO, ready for release orders to draw from. 📄 paper: quantity contract (outline agreement) · 📦 stock: no change · 💰 money: no posting

Do: ME31K → fill the fields below → Save → note the contract number. Ours came out as 4600000032 (created live on our IDES).

A contract is like a yearly rate deal with your atta wholesaler: agree the rate and the year's total once — then take a little whenever you need it, always at the agreed rate. Saving it moves no goods and no money — it is only the promise.

ME31K walks through three screens in order: ① the initial screen (agreement type, vendor, and the buying org — purch org + group), ② the header data screen (the validity period the whole deal runs for), then ③ the item overview (one row per material — target quantity, net price, plant). The first column below names the screen each field sits on.

Where on screen · FieldFillWhat the field asks — in plain wordsWhy we choose this — and the impact if wrong
Initial screen · Agreement TypeMK (Quantity Contract)What KIND of promise is this? Like choosing "prepay 10 haircuts" vs "prepay a rupee balance".MK = commit to a total QUANTITY (our 1000 TO). Impact: pick WK (value contract, a money cap) by mistake and the system counts down a rupee limit, not tonnes — releases won't consume your 1000 TO the way you expect
Initial screen · VendorMUGHAL21 (Mughal)WHO are you locking this deal with?Mughal is the mill we negotiated the year rate with. Impact: a wrong vendor writes the contract against a supplier who never agreed to it, so no release can legitimately draw on it
Header data screen · Validity Fromstart of the contract yearFrom WHEN does the promise run?Marks when call-offs may begin drawing the locked price. Impact: a release dated before this can't use the contract — it reverts to ordinary, unprotected pricing
Header data screen · Validity Toend of the contract yearUntil WHEN does the promise run?Closes the locked-price window. Impact: set it short by mistake and the deal expires early — later releases lose the price protection you negotiated
Initial screen · Purch Org (Purchasing Org)PKLOWHICH buying company/desk owns this deal? The purchasing org is the entity that legally places the orders.PKLO negotiated it and will release against it. Impact: owned by the wrong org, PKLO's buyers can't call it off
Initial screen · Purch Group (Purchasing Group)RMTWHICH buyer / buying desk is responsible day-to-day? A smaller unit inside the purchasing org.RMT = the raw-materials buying desk that manages this ore. Impact: mainly reporting and work-item routing — the wrong group sends follow-ups and reports to the wrong team
Item overview · MaterialRM-IRON-01WHICH material is the promise for?The iron ore we're committing to buy. Impact: a wrong material means releases for the ore never find this contract
Item overview · Target Qty1000 TOHOW MUCH do you promise to buy in total? Not a delivery — just the counter releases draw down.1000 TO is the year's commitment; future releases (100 now, 80 next month…) count against it. Impact: set it too low and you can't call off the volume you actually agreed
Item overview · Net Price250,000/TOAt WHAT locked rate? The rate every release will carry.A fixed rate that cannot drift for a year is the whole reason to sign a contract. Impact: a wrong rate here is applied to every single release order, silently over- or under-paying on all of them
Item overview · PlantPK01WHERE will the released goods be delivered?PK01 is the receiving steel plant. Impact: a wrong plant sends releases to the wrong location and breaks stock/valuation for the plant that actually needs the ore
15.2 — Create Release Order · ME21N referencing contract

⚡ This step will: turn one slice of the contract into a binding order to the vendor — the plant starts showing 100 TO as On-Order (a promise, not stock), and the contract counter ticks down by 100. 📄 paper: release order (PO) · 📦 stock: no change · 💰 money: no posting

Do: ME21N → pull the contract in → enter only the quantity → Save. A release order = one "pickup" against the yearly deal.

The release order is a normal ME21N PO — the same three zones as Scenario 6: the Header (top), the Item overview grid (middle), and the Item detail tabs (bottom). The one extra move is the Document Overview side-panel on the left, used to pull the contract in.

Where on screen · Field / ActionFillWhat it asks — in plain wordsWhy we choose this — and the impact if wrong
Header · Doc TypeNB (standard PO)What KIND of purchase order is this?A release order is just a normal PO (NB); its special power comes from pointing at the contract, not from its type. Impact: none special here — the linking in the next row is what makes it a call-off
Header · VendorMUGHAL21WHO is the order going to?Must be the contract's own vendor. Impact: a different vendor cannot consume Mughal's deal — you'd just raise an ordinary, unprotected PO
Document Overview panel (left) → My Contracts → drag the contract line—Buying against WHAT? This action tells SAP "this PO draws from your contract."Linking the PO to the contract is what makes the call-off count. Impact: skip it and you create an ordinary PO that never touches the contract — no locked price, and the contract counter never moves
Item grid · Qty100 TO (this call-off)How much do you call off NOW?Only what you currently need; the rest of the 1000 TO stays available for later. Impact: over-ordering here eats the remaining contract quantity faster than planned
Item grid · Pricecomes in at 250,000/TO — you do NOT type itWhat rate applies to this call-off?A locked rate the buyer cannot key freely is exactly the protection the contract exists to give. Impact: if this rate is ever overtyped, that line loses the price guarantee you negotiated for the year
Item grid · PlantPK01 — already setWHERE is it delivered?The call-off should land where the deal's goods are needed — the receiving plant on the contract. Impact: point it elsewhere and this receipt goes to the wrong location, breaking stock and valuation for the plant that actually needs the ore

Save → the release order gets number (your release-order PO number). The contract's released quantity updates (now 100/1000 consumed) — the counter ticking down.

Track contract usage: ME33K → display contract → release qty visible.

🔄 Scheduling Agreement Flow

15.3 — Create Scheduling Agreement · ME31L

⚡ This step will: create the second flavour of deal — a scheduling agreement that locks price and volume AND is built to carry its own delivery calendar (added in 15.4), so no release POs will ever be needed. 📄 paper: scheduling agreement · 📦 stock: no change · 💰 money: no posting

Do: ME31L → same shape as the contract → Save → note the SA number. Ours came out as 5500000000 (created live on our IDES).

ME31L has the same three screens as the contract (15.1): ① the initial screen (agreement type LP, vendor, buying org), ② the header data screen (the validity window), then ③ the item overview (material, target quantity, price, plant). The delivery dates themselves come later in ME38 (15.4).

Where on screen · FieldFillWhat the field asks — in plain wordsWhy we choose this — and the impact if wrong
Initial screen · Agreement TypeLPWhat KIND of agreement? Here the DELIVERY CALENDAR lives inside the document itself (see the LP vs LPA note in the comparison table above).LP = scheduling agreement with release documentation. Choose it over a contract when deliveries follow a predictable rhythm. Impact: pick a plain contract type instead and you're back to raising a separate PO per shipment (15.2) — you lose the paperwork saving
Header data screen · Valid Fromstart of the agreement periodFrom WHEN does the deal run?Schedule lines must fall inside this window. Impact: a delivery date before it is not covered by the agreement
Header data screen · Valid Toend of the agreement periodUntil WHEN does the deal run?Closes the agreement window. Impact: set it too short and later schedule lines fall outside the deal and lose its locked terms
Initial screen · VendorMUGHAL21 (Mughal)WHO is the agreement with?Same promise frame as the contract. Impact: a wrong vendor writes the schedule against the wrong mill
Item overview · MaterialRM-IRON-01WHICH material is scheduled?The ore whose deliveries the calendar will drive. Impact: a wrong material schedules the wrong stock
Item overview · Target Qty1000 TOHOW MUCH in total over the period?The volume the schedule lines will add up to (same meaning as 15.1). Impact: too low and you can't schedule the full year's need
Item overview · Price250,000/TO (locked)At WHAT locked rate?A fixed rate protects every delivery from market swings. Impact: a wrong rate is applied to every delivery the calendar generates
Item overview · PlantPK01Delivered WHERE?The receiving plant. Impact: a wrong plant misroutes every scheduled delivery
15.4 — Add Delivery Schedule · ME38

⚡ This step will: fill the delivery calendar — each date + quantity row you save acts as its own mini-order, so the vendor now owes those deliveries without any PO being raised. 📄 paper: schedule lines saved inside the SA (no new document) · 📦 stock: no change · 💰 money: no posting

Do: ME38 → SA # → select the line → Delivery Schedule tab → add the rows → Save.

ME38 opens on an initial screen (type the SA number), shows the item overview, and once you select the line and choose Item → Delivery Schedule you land on the delivery-schedule grid — a list of schedule lines, each one a date plus a quantity. Both fields below live on that grid.

Where on screen · FieldFillWhat the field asks — in plain wordsWhy we choose this — and the impact if wrong
Delivery-schedule grid · Delivery Date15-Jan, 15-Feb, …WHEN should each lot arrive? Like a doodh-wala's delivery calendar written once.Each date is itself an "order" — nobody phones in a PO per delivery. Impact: a wrong date makes the vendor deliver early or late, and MRP plans your stock around that date
Delivery-schedule grid · Scheduled Quantity100 (against each date)HOW BIG is the delivery due on that date?The amount owed on that date, counted against the 1000 TO target. Impact: a wrong quantity over- or under-delivers and drifts the running total against the agreement

The system treats each schedule line as a "release" — GR/IV is done against the SA + schedule line directly. That is the paperwork saving: contract = one PO per call-off (15.2); scheduling agreement = zero POs, the calendar does it.

✅ Verification

#T-codeCheck
1ME33KDisplay the contract → target qty 1000 TO and net price 250,000/TO are stored; released qty updates after each release order
2ME21NThe release PO auto-fills price + plant from the contract; you cannot exceed the target without a warning
3ME33LDisplay the scheduling agreement → header + line target qty present
4ME38Schedule lines (15-Jan, 15-Feb …) are saved against the SA line and drive GR/IV directly

🐞 Errors we hit live — and how to fix them

These are the standard outline-agreement messages. On a fresh setup, a missing prerequisite throws one of them, so each row names the message, what it really means, and the Prerequisite that clears it. The columns are: where it appears, the message SAP shows, what it means & why, and how to fix it. The ★-marked row is one we actually hit during our live run; the other message IDs are the standard/typical ones — confirm the exact number and wording against your live screen when you run it.

Where it appearsThe message SAP showsWhat it means & whyHow to fix it
ME31K / ME31L — item overview, on Enter/SaveME 083 "Enter net price"The item has no rate: no info record defaulted a price and none was typed.Confirm info record 5300079940 exists for RM-IRON-01 / MUGHAL21 / PKLO, or type 250,000 in the Net Price column. → Prereq ④
ME31K / ME31L — item, on save"Make an entry in all required fields" / "Enter tax code"A mandatory item field (commonly Tax Code, or plant) is blank — usually because the material's Purchasing view is thin.Fill the flagged field (tax code, plant PK01); if tax code keeps recurring, maintain it on the material Purchasing view. → Prereq ③
ME21N — release order, on entering the item06 xxx "Delivery date lies outside the validity period of the outline agreement"The release/delivery date is before Valid From or after Valid To of the contract, so the call-off can't draw on it.Use a delivery date inside the validity window, or extend validity in ME32K. → step 15.1 / Prereq ⑥
ME21N — release order, on entering the quantity06 xxx "Target quantity exceeded" (warning)The running total of release orders would push past the contract's 1000 TO target. It is a warning, not a hard stop — press Enter to continue.Reduce this call-off, or raise the contract target in ME32K if the extra volume is agreed. → step 15.2
ME31K / ME31L — partner screenME 329 "Role VN not defined for …" (warning)Harmless partner-determination warning — the vendor's partner schema has no explicit VN (vendor) role row. Does not block the save.Press Enter through it; if it recurs on every agreement, maintain partner roles in the vendor's purchasing partner schema.
ME21N — release order (the silent trap, no error)(no message) — "the contract counter never moved"You created an ordinary NB PO by typing the vendor directly instead of pulling the contract in, so the PO is unlinked: no locked price, and the contract's released quantity stays at 0.In ME21N use Document Overview → My Contracts → drag the contract line (step 15.2), or key the agreement number + item on the PO line. Verify in ME33K that released qty went up. → step 15.2
ME38 — schedule line, on save06 xxx "Schedule line date outside validity period"A delivery date on a schedule line falls outside the SA's Valid From/To.Keep every ME38 schedule-line date inside the SA validity window (set in 15.3), or extend it in ME32L. → step 15.4
★ hit live: ME38 — schedule line, on save (same block hits an ME21N release order)06 722 "Material RM-IRON-01 not included in source list despite source list requirement"A real cross-scenario catch we hit: Scenario 14 switched on source-list enforcement (the "Source list" flag on this material). SAP then requires the outline agreement itself to be a listed source before its releases/schedule lines are allowed — a plain vendor row is not enough.Add the agreement to the source list: ME01 → RM-IRON-01 / PK01 → a row with vendor MUGHAL21 and the Agreement field set to your contract/SA number (+ item 10). That is exactly the source-list↔outline-agreement link described in the Interview answers below. → Scenario 14

🎓 Interview-Ready Answers

Q: What's the difference between a contract and a scheduling agreement?

A contract (ME31K) is a long-term price/quantity framework — you call it off with separate release orders (ME21N) whenever you need stock, so timing is flexible. A scheduling agreement (ME31L) embeds the delivery schedule in the agreement itself (ME38), so deliveries are driven by schedule lines with no separate PO per shipment — ideal for predictable JIT cadence.

Q: What's the difference between a quantity contract (MK) and a value contract (WK)?

An MK quantity contract commits to a target quantity (e.g. 1000 TO) — releases consume against that quantity. A WK value contract commits to a target value (a money cap, e.g. ₨50 crore) and is useful when you'll buy many different items from one vendor up to a spend limit rather than a single fixed quantity.

Q: How does a release order know the price?

When you create the release order in ME21N referencing the contract (via Document Overview → My Contracts), SAP copies the net price, plant, and conditions from the contract line. The buyer only enters the call-off quantity; the agreement guarantees the locked price, and the contract's released quantity is updated so you can track consumption (visible in ME33K).

Q: How does an outline agreement link to source determination?

You can reference the agreement in the source list (ME01 — see Scenario 14): set the Agreement number and item on the vendor's row. Then PRs/POs auto-pull that contract as the source, so call-offs consume the agreement automatically and invoice verification validates against its terms.

← Previous
Scenario 14: Source Management
Next →
Scenario 16: Batch Management