Setup Step 19 — Controlling Area & Cost Centers
🎯 Why this setting exists
K), an asset (A), an internal order (F), a project WBS (P) — that cost object only exists if a Controlling Area is active, your company code is assigned to it, and Cost Center Accounting is switched on. If any of that is missing, the account-assigned PO and the goods issue to a cost center simply fail.
CO configures it, but an MM consultant must understand it: you enter the cost object on every non-stock PO line, so you depend on this setting daily.
FINS_ACDOC_CUST116 and forces a journal-entry mass-data repair project. We document that full recovery chain below — but in a real greenfield, sequence CO right after the company code (Step 1) to avoid it entirely.
💡 Easy example
Think of a cost center as a bucket for spending that isn't inventory. Services, consumables that go straight to use, and overheads all fall into a bucket owned by some department. No controlling area = no buckets = nowhere for the consulting cost to go = the PO is blocked.
🔗 How this connects to everything else
The controlling area is the bridge between MM's account-assigned procurement and the world of CO/FI cost accounting. Here's the web of settings and modules that hang off it.
⬆️ Depends on (must exist first)
- Step 1 — Company Code: the controlling area is assigned to the company code, and (in the simplest model) shares its key, currency, chart of accounts and fiscal year variant. The CC must exist first — and ideally CO is assigned before any posting in it.
⬇️ Enables (what this unlocks)
- Account-assigned procurement: services (Scenario 4), consumables (Scenario 5), assets (Scenario 6), pipeline (Scenario 11).
- Cross-module procurement: MM↔PM (Scenario 25), MM↔PS (Scenario 26).
- Goods issue to a cost center — Scenario 3, movement type 201.
🧩 Who owns it & why MM cares
CO configures the controlling area and cost centers. But MM enters the cost object (cost center / order / WBS) on every non-stock PO — if the controlling area or cost center is missing, those POs and the GI to a cost center fail. You must understand the model even when you don't own it.
🔮 Links to other modules (now & later)
- CO Cost centers and internal orders live here; the standard hierarchy is the root of all cost centers.
- FI Every CO posting now writes the Universal Journal (
ACDOCA) — CO and FI share one line-item table in S/4HANA, which is exactly why late CO assignment forces the journal repair.
🔧 Configuration — fields & steps
OKKP · OX19 · KS01 · OKB9 · KS03 · ~45 min · do this BEFORE postings ideally · enables cost center / order / asset / WBS on PO lines
📋 Step 19 sub-steps (real values from the PakSteel build)
19A. Create the Controlling Area — OKKP (Basic Data)
What: The "container" for cost objects — like the Company Code is for FI. We use the simplest model: controlling area = company code (1:1).
- Run OKKP → select/maintain controlling area → New Entries (or Details on PSPK)
- Fill Basic Data:
| Field | Value | Why |
|---|---|---|
| Controlling Area (key) | PSPK | ⚠️ MUST equal the company code key for the "same as CC" model |
| Name | PakSteel Controlling Area | |
| CoCd → CO Area | Controlling area same as company code | 1:1 simplest. (Use "Cross-company-code cost accounting" only to group PSPK+PSAE — needs currency type 30 since PKR≠AED) |
| Currency Type | 10 (Company Code Currency) | forced by "same as CC" |
| Currency | PKR (auto) | derived from CC |
| Curr/Val Prof. | blank | only for transfer pricing / parallel valuation |
| Chart of Accts | INT | must match the CC's operating chart |
| Fiscal Year Variant | K4 | must match the CC's FYV (Cal Year, 4 special periods) |
| CCtr Std. Hierarchy | PSPKHIER | mandatory — root node of all cost centers; say "Yes" when asked to create it |
| Reconciliation Ledger | greyed — leave | obsolete in S/4HANA (Universal Journal replaces it) |
Ctrl+S → if prompted "standard hierarchy PSPKHIER does not exist, create?" → Yes.
19B. Activate Components — OKKP → "Activate components/control indicators"
What: Switches ON the CO functions per fiscal year. Select the PSPK row first (the left-tree folders stay greyed until a row is selected), then double-click "Activate components/control indicators" → New Entries.
| Field | Value | Why (MM relevance) |
|---|---|---|
| Fiscal Year (from) | 2020 (covers 2026, leave "to" blank) | active from this year onward |
| Cost Centers | Component active | ⭐ enables cost centers on POs (acct assignment K) |
| Order Management | Component active | ⭐ internal orders (acct assignment F) |
| Commit. Management + tick "W. Commit. Mgt" | Components Active | ⭐ PR/PO commitment values post |
| ProfitAnalysis / Acty-Based Costing | not active | CO-PA / ABC — separate projects |
| All Currencies | ✓ tick (optional) | safe |
Ctrl+S.
19C. Assign Company Code to Controlling Area — OX19 (or OKKP) + the FINS_ACDOC_CUST116 trap
What: Links PSPK (company code) ↔ PSPK (controlling area). Without it: error KI105 "No company code assigned to controlling area" when you try to create a cost center.
- OX19 (or OKKP → select PSPK → "Assignment of company codes") → New Entries → Company Code
PSPK
- CUST116 "Check if postings already exist in CC / ledger 0L" blocks the assignment. Fix: SPRO → FI → FI Global Settings → Tools → Change Message Control → app area
FINS_ACDOC_CUST, msg116→ set toW→ Save →/nrestart OX19 → re-assign → green ✓ through the warning. - S/4 pops "Create a New Project for Updating Existing Journal Entries" → enter Project ID (e.g.
PSPKCO01) + description → Create Project. ⚠️ This only CREATES the project — it is NOT yet run, and until it COMPLETES, ALL postings in PSPK/0L are blocked (CUST412).
- The "Update Existing Postings: Assign Company Code to Controlling Area" IMG activity is runnable directly as transaction FINS_CCD2COA_COCKPIT ("Update Postings: Assign CCode to COArea"). (Note:
FINS_MIG_STATUSdoes NOT exist in 2023 — use the cockpit tcode.) - FINS_CCD2COA_COCKPIT → select project
PSPKCO01→ Show Cockpit → select the first activity row → Execute ("run all activities up to and including…") → confirm → background jobs scheduled. - Refresh (circular arrow) every 30–60s until the blue diamonds turn to green checkmarks (0 errors).
- Formally close it: FINS_CD2CA_COMPLETE ("Complete Project") for
PSPKCO01→ status = Completed. (Status overview: FINS_CD2CA_STAT_OVW.) → this clears CUST412.
- CUST205 "no entry in FINSC_CMP_VERSNC, version 000" → SPRO → "Define Ledger for CO Version" (a.k.a. "Ledger From Which CO Reads Actual Data") → New Entries → CO Area
PSPK· Version0· Ledger0L→ Save. Then FINS_UPD_CMP_VERSN. - CUST326 "Default values for postings in Controlling not defined for PSPK" → SPRO → Financial Accounting → Financial Accounting Global Settings → Ledgers → Integration of Controlling with Financial Accounting → Check and Define Default Values for Postings in Controlling → New Entries → CoCode
PSPK· Valid From e.g.01.01.2026· Doc. Type Mapping VariantSAP_CO(standard) · Default Ledger Group blank/0L → Save. - CUST201 "Correct the Customizing settings for ledgers…" = umbrella message — clears automatically once CUST205/326/412 are fixed.
Verify: FINS_CUST_CONS_CHK_P (PSPK / 0L) all green · SE16N → TKA02 shows PSPK ↔ PSPK. Then MIGO/account-assigned POs post. (The greyed "CoCd → CO Area" on OBY6 auto-displays PSPK — don't set it there.)
🔧 Doc-splitting errors can surface alongside this chain (GLT2076, GLT2201, GLT2153) — see the Troubleshooting Center for the document-splitting fixes.
19D. Create Cost Centers — KS01
Initial screen: Controlling Area PSPK · Cost Center PKKHI-PROD · Valid From today · To 31.12.9999 · Reference fields = leave BLANK (only for copying an existing CC) → press Enter (no Save button here — click Master Data / Enter to reach the detail screen).
Basic Data screen (✓ = mandatory):
| Field | Value |
|---|---|
| Name | Production CC Karachi |
| Description | Production cost center – Karachi factory |
| Person Responsible ✓ | Plant Manager (any text) |
| Cost Center Category ✓ | 1 (Production — F4: 1=Production, 2=Service, 3=Admin, 4=Sales) |
| Hierarchy area ✓ | PSPKHIER |
| Currency ✓ | PKR (auto) |
| Profit Center | blank (fill only if PCA active & it prompts) |
Ctrl+S → "Cost Center PKKHI-PROD created". Verify with KS03.
Minimum cost-center set for the scenarios:
| Code | Name | Category | Used in |
|---|---|---|---|
PKKHI-PROD | Karachi Production | 1 Production | 5, 11, 25 |
PKKHI-MAINT | Karachi Maintenance | 2 Service | 5, 25 |
PKADM-IT | IT Department | 3 Admin | 4 |
PKADM-FIN | Finance Department | 3 Admin | 4 |
19E. S/4HANA: G/L = Cost Element (no KA01 needed) — FS00
In ECC you ran KA01 for separate cost-element masters. In S/4HANA's Universal Journal, G/L accounts ARE cost elements — set the Cost Element Category on the expense G/L in FS00 → "Edit cost element" / Control Data.
| Cat | Type | For |
|---|---|---|
1 | Primary cost / cost-reducing revenue | Expense G/Ls (consumables 410000, services 470000) — most common ⭐ |
11 | Revenue | Revenue G/Ls |
22 | External settlement | Order/project settlement |
Expense G/Ls used by account-assigned POs need Cost Element Category 1, else the PO can't post to a cost center.
19F. Default Cost Center per G/L (optional) — OKB9
Safety net: if a user leaves the cost center blank on a PO line, SAP auto-fills the default set here. OKB9 → New Entries → CC PSPK + Cost Element 470000 + Cost Center PKADM-IT → Save.
⚠️ Use sparingly — silent defaulting hides user errors. Often better to make the cost center mandatory via field status.
💡 Account Assignment Categories — what each cost object is
| AAC | Cost object | Needs | Scenario |
|---|---|---|---|
| blank | Stock (inventory G/L) | material with stock view | 1,2,7,8,9 |
K | Cost Center | this step (19) | 4,5,11 |
F | Internal Order | Order Mgmt active (19B) | — |
A | Asset | AA configured (FI) | 6 |
P | Project (WBS) | PS configured | 26 |
C | Sales Order | SD | 12 |
🚨 Issues & fixes
FINS_ACDOC_CUST116blocks OX19. → Change Message Control: app areaFINS_ACDOC_CUST, msg116→ W (warning). Restart OX19 and re-assign CC ↔ CO area (OX19) through the warning.- This creates a mass-data project (e.g.
PSPKCO01). Until it completes, all PSPK/0L postings are blocked (CUST412). - Complete it via FINS_CCD2COA_COCKPIT ("Update Postings: Assign CCode to COArea") → Show Cockpit → run all activities → refresh until green.
- Formally close with FINS_CD2CA_COMPLETE → clears
CUST412. CUST205("Define Ledger for CO Version") → CO Area PSPK · Version0↔ Ledger0L→ Save → FINS_UPD_CMP_VERSN.CUST326(SPRO → Integration of Controlling with Financial Accounting → Check/Define Default Values for Postings in Controlling) → CoCodePSPK+ Doc Type Mapping VariantSAP_CO→ Save.CUST201(umbrella) clears automatically once 205/326/412 are fixed.
GLT2076, GLT2201, GLT2153 → see the Troubleshooting Center.
⛓️ IRON RULE: assign the controlling area BEFORE any postings (greenfield) to avoid this entire chain.
| Symptom | Cause | Fix |
|---|---|---|
KI105 "No company code assigned to controlling area" when creating a cost center | OX19 assignment not done | Run OX19 → assign PSPK ↔ PSPK |
FINS_ACDOC_CUST116 blocks the OX19 assignment | Postings already exist in PSPK/0L (CO assigned late) | Set msg 116 → W, then run the full recovery chain above |
CUST412 — all PSPK/0L postings blocked | Mass-data project created but not completed | FINS_CCD2COA_COCKPIT → run all → FINS_CD2CA_COMPLETE |
| PO can't post to a cost center | Expense G/L has no Cost Element Category | FS00 → set Cost Element Category 1 (19E) |
✅ Verification
| Check | Expected |
|---|---|
SE16N → TKA01 | row for controlling area PSPK |
SE16N → TKA02 | PSPK ↔ PSPK company-code assignment |
SE16N → CSKS | your cost center rows (KOKRS = PSPK) |
| KS03 → PKKHI-PROD | displays the cost center |
| FINS_CUST_CONS_CHK_P (PSPK / 0L) | all green (if you ran the recovery chain) |