Scenario 4 — Service Procurement (Consulting Hours)
D, acct assignment K) → service entry sheet (ML81N, accepted) → invoice (MIRO). Every first-run gotcha is captured in the steps and the fixes table below — service number range (error 30042), item category D vs account assignment K, the G/L "post automatically only" trap (use 470000), the Tax Code, the greyed ML81N screen, and the MIRO balance / BD-tolerance behaviour.
📊 Business Case — When & Why You Use This
Service procurement is how you buy work, not goods — consulting, maintenance labour, transport, security, audits. There is nothing to put on a shelf, so SAP uses a different flow: an item category D purchase order, a Service Entry Sheet (ML81N) instead of a goods receipt, and the cost lands directly on a cost center with no inventory in between.
🕐 When to use it
Any time you pay an outside party for effort rather than a physical item — SAP implementation hours, machine servicing, freight, legal/audit fees, housekeeping contracts.
❓ Why it matters
It gives Procurement control over services the same way as goods: a real PO, a quantity/price commitment, and a formal acceptance step (the SES) before any rupee is invoiced — so you only pay for hours actually delivered.
👤 Who triggers it
The requesting department (here, IT) raises the need; Purchasing cuts the service PO; the department head approves delivered hours by accepting the SES; AP runs MIRO against the accepted sheets.
🔁 The key distinction
No material, no MIGO, no inventory. The Service Entry Sheet (ML81N) is the goods receipt for services, and account assignment K is mandatory — the cost is an expense from the very first acceptance.
💰 Financial Impact — The Easy-Money Example
PakSteel engages Lucky Consulting for 120 hours @ ₨5,000 = ₨600,000 of SAP support. The consultants bill weekly, so the cost arrives in slices. Take one week of 40 hours = ₨200,000 and follow the money — notice the expense hits the moment you accept the sheet, long before the vendor is paid:
The big idea: unlike stocked material, a service is never an asset — it is expense from the instant you accept it. The SES acceptance is the cost-recognition event (Consulting Expense Dr / GR/IR Services Cr); MIRO only swaps GR/IR for the vendor payable. The IT cost center carries the full ₨600,000 once the engagement closes.
🇵🇰 The Business Story
🎯 What you'll learn
- No material master needed — use Service Master (AC01) or short text
- Item Category D (Service) in PO — different flow from blank (standard stock)
- No MIGO — use ML81N Service Entry Sheet instead
- Cost goes directly to a cost center (no inventory) → CO must be set up
- Account Assignment
Kmandatory - Two-step acceptance: SES creation + approval (release)
📋 Prerequisites
- CO setup complete — Setup Guide Step 19 (Controlling Area + cost centers)
- Cost Center
PKADM-ITcreated in KS01 - G/L 470000 (Consulting Expense) exists in INT chart, marked as Cost Element Cat = 1
- Vendor VEN-LCK-CON (Lucky Consulting) created via BP with FLVN00/01/02 roles
SVC-CONSULT-01 is a service master (not a material) — this scenario creates it below with AC01. Full field reference: Create the service.
🔧 Step-by-Step
4.1 — Create Service Master · AC01
What: Service Master = the "material" for services. Optional but reusable. Alternative is to type service description directly in PO each time. (AC01 create · AC02 change · AC03 display.)
Action:
- Run AC01
- Service No.: leave blank (SAP auto-numbers — services are internally numbered by default) · Service Category: pick
Service: purchasing(the procurement category — turns on Purchasing data; not "Basis service" or "Complete service") - Description (required):
SAP Functional Consulting Hour— use this as your "SVC-CONSULT-01" label - Base Unit (required):
HR/HUR(Hour) - Optional defaults — Valuation Class
3200(lets the G/L auto-determine; skippable), Material/Service Group007(reporting), Tax Indicator, Purchasing Org Data (Purch Org PKLO, Group SRV) - Save
SVC-CONSULT-01 is rejected. Easiest: leave the Service No. blank (above) and SAP numbers it. To keep the alphanumeric key, define an external interval in ACNR (SPRO → MM → External Services Management → Service Master → Define Number Ranges) and assign it to the category.4.2 — Service PO · ME21N with Item Category D
Action:
- Run ME21N
- Doc Type:
NB— shown in the dropdown as "Standard PO" (services use NB + item cat D; no special service doc type) · Vendor: any supplier — reuse an existing one likeMUGHAL21, or a dedicated services vendor (see note) - Header → Org Data: Purch Org PKLO · Purch Group SRV
- Line 1:
- Item Category (column I):
D(Service) — this is what makes the Services tab appear - Account Assignment Category (column A):
K(Cost Center) - Heads-up: I and A are two adjacent columns in the item row — easy to swap. If you set only
Kand leaveIblank, you get a normal cost-center line with no Services tab. - Material: leave blank — a service has no material number on the item line; the service master goes in the Services tab below (do not type
SVC-CONSULT-01here) - Quantity: leave the item default (shows
1, unitAU) — the real quantity is entered on the service line - Plant:
PK01 - Short Text: SAP MM Implementation Support
- Item Category (column I):
- Click line → Services tab (bottom) — this is where the service number, quantity & price go, not the item line above. (Tab blank? Press Enter or toggle to another tab and back to render the grid; drag the splitter above the tabs up if it has no height.) Enter service line:
- Service No:
SVC-CONSULT-01(or short text) - Quantity:
120HR - Gross Price:
5000PKR/HR - Cost Center:
PKADM-IT - G/L Account:
470000(Consulting Expense) — must allow direct posting. Don't use400000(consumption): it's "Post automatically only" → error "No direct postings can be made to G/L acct 400000." If 470000 doesn't exist, create it in FS00 as a P&L expense, G/L type "Primary Costs/Revenue" (cost element), with "Post automatically only" off.
- Service No:
- Item Invoice tab → enter a Tax Code (e.g.
V0= input 0%, or your PK input-tax code) — required, else you get "Enter Tax Code" - Save → PO # assigned
MUGHAL21; the only requirement is it's extended to the PO's purchasing org. Easiest: use the same purch org the vendor already has (from Scenario 1); if you use a different one and hit "not created for purchasing organization," add that purch-org view via the BP guide. Creating a dedicated services vendor (e.g. Lucky Consulting) is identical to any vendor.Tables: EKKO + EKPO (item D) + ESLL (service lines) + ESLH (service header).
4.3 — Service Entry Sheet · ML81N
What: Equivalent of GR for services. Records "service delivered." Vendor performs the work weekly; you create an SES for hours delivered.
Action:
- Run ML81N
- Click Create · enter PO # → Enter
- SES line: pulls service from PO → enter Actual Quantity (e.g., 40 hours this week)
- Header: External Number (e.g., timesheet ref), Period
- Save (creates SES, status = "Created")
- Click Accept (green tick) → status = "Accepted" → FI/CO posted
Accounting on Acceptance:
| Consulting Expense (470000) | Dr 200,000 | Cost Center: PKADM-IT |
| GR/IR Services (191200) | Cr 200,000 | — |
Repeat SES weekly until all 120 hours delivered.
4.4 — Invoice Verification · MIRO
Same as Scenario 1's MIRO — reference PO, system pulls in accepted SES quantities, balance 0, post.
| GR/IR Services (191200) | Dr 600,000 |
| Vendor (160000 via VEN-LCK-CON) | Cr 600,000 |
🚨 Common Errors
| Step | Error | Fix |
|---|---|---|
| ME21N | "Item category D not allowed for doc type NB" | OMG0 → allow item cat D for NB; or use service doc type FO |
| ME21N | "Cost center PKADM-IT not assigned" | KS01 → check valid-from date covers today |
| ME21N | "Enter Tax Code" | Item → Invoice tab → Tax Code (e.g. V0 input 0%); create in FTXP if none exist |
| ME21N | "No direct postings to G/L 400000" | Use a direct-postable expense G/L (470000), not the auto-only consumption account |
| ME21N | "Role VN not defined for supplier" | Warning only — vendor missing the VN partner function for this purch org; maintain in XK02/BP, or proceed (it allows save) |
| ML81N | Fields greyed — can't type the PO | The PO field is display-only: click "Other Purchase Order" (top-left) → enter the PO → then the Create Entry Sheet icon; switch to Change mode if still greyed |
| ML81N | "No message record could be found for output… Save anyway?" | Harmless — no print/output type configured; click Yes, then Accept (green flag) to post the cost |
| ML81N | "Service entry sheet not released" | Click Accept (green tick) — required before invoicing |
| MIRO | "Service-based invoice verification — no quantity" | SES must be accepted first; check Header → "Service-based IV" flag |
| MIRO | "Balance not zero (debits X / credits 0)" | Enter the invoice Amount in the header (the vendor's total) — the PO only supplies the expected/debit side |
| MIRO | "Maintain tolerance limits for tolerance key BD" | Side-effect of the unbalanced amount → enter the header amount first. If it persists, maintain BD for the CoCode in OMR6 (same place as the PE tolerance) |
💼 How this runs in a real company
Set up once at implementation: FI builds the expense G/Ls (as cost elements, direct-postable) + account determination; the MM consultant builds service categories, number ranges, document types and release strategies. After that, the recurring cycle is just:
| # | Step | T-code / app | Who |
|---|---|---|---|
| 1 | Raise Purchase Requisition (service, est. value, cost center) | ME51N | Requisitioner (dept) |
| 2 | PR approved via release strategy | release code | Budget owner |
| 3 | Source: existing service contract, or RFQ → pick vendor | ME41 / contract | Buyer |
| 4 | Create service PO by adopting the PR (cost center + G/L flow in); PO approved | ME21N | Buyer → Approver |
| 5 | PO sent; vendor performs the work | output | Vendor |
| 6 | Service Entry Sheet records delivered hours | ML81N | Vendor / dept |
| 7 | Accept the SES → cost posts to the cost center (Dr expense / Cr GR-IR) | ML81N | Approver |
| 8 | Invoice verification — 3-way match PO ↔ SES ↔ invoice | MIRO | AP clerk |
| 9 | Pay the vendor | F110 | AP / Treasury |
So steps 4.1–4.4 here = the buyer/AP slice of this cycle. The G/L creation you did is the one-time FI setup — do it once and every future service PO just works, exactly like a real company after go-live.
✅ Verification — Confirm Scenario 4 Worked
- ML84 → list of SES for PO → all accepted
- S_ALR_87013611 → Cost Center PKADM-IT → debit 600,000
- FBL1N vendor cleared after F-53 payment
🎓 Interview-Ready Answers
Q: How does service procurement differ from buying stock material?
A service has no material master and no inventory. You use a PO with item category D, record delivery through a Service Entry Sheet (ML81N) rather than MIGO, and the cost posts directly to a cost center via mandatory account assignment K. There is never an inventory posting — it is expense from acceptance onward.
| Stock material (iron) | Service (consulting) | |
|---|---|---|
| Goes where | Warehouse = asset | Straight to expense |
| At receipt (GR vs SES accept) | Inventory Dr / GR-IR Cr — not a cost yet | Expense 470000 Dr (cost center) / GR-IR Cr — cost now |
| Stock tables (MARD/MBEW) | Updated — qty + value ↑ | Not touched — no stock |
| Cost center needed? | No (it's an asset) | Yes — account assignment K |
| Becomes an expense | Later, when consumed (261/201) | Immediately, at acceptance |
| Invoice (MIRO) | Same for both → GR-IR Dr / Vendor Cr | |
In short: material = asset now, cost later (stock tables move, no cost center); service = cost now (no stock tables, must name a cost center).
Q: What is a Service Entry Sheet and why does it matter?
The SES (ML81N) is the goods-receipt equivalent for services — it records the actual hours/work delivered against the PO. It is a two-step control: you create it, then accept it. Acceptance is the event that posts the FI/CO document (Consulting Expense Dr / GR/IR Services Cr). No accepted SES means no expense and no valid invoice.
Q: Which tables store service data on the PO?
EKKO and EKPO hold the PO header and item (item category D), while the service specifications sit in ESLH (service package header) and ESLL (individual service lines — quantity, price, account assignment).
Q: Why is account assignment K mandatory on a service PO?
Because a service can't be stored, SAP must know immediately where to charge the cost. Account assignment K forces a cost center (here PKADM-IT) and a consumption/expense G/L on the line, so the value is recognised as a CO-relevant expense at SES acceptance rather than parked in inventory.