Setup Step 19 — Controlling Area & Cost Centers

NEEDED FOR ACCOUNT-ASSIGNED Layer 5 · owned by CO ⏱️ ~45 min OKKP OX19 KS01
← Previous
Step 18: BP Master Data Configuration
Next →
Back to Setup Guide Hub

🎯 Why this setting exists

Stock POs (Scenarios 1-3) don't need CO — the cost lands in inventory. But the moment a PO posts to a cost object — a service to a cost center (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.
🚨 THE IRON RULE — do this BEFORE any postings
The controlling area must be set up and assigned to the company code before the first goods receipt / invoice / payment. If you configure it AFTER posting (easy to do by accident), S/4HANA blocks the assignment with 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

When PakSteel buys 120 consulting hours, there's no stock to put it in — you can't add "120 hours" to a warehouse shelf. But the money still left the company, so the cost has to land somewhere. It's charged to the IT-department cost center (PKADM-IT), which Controlling tracks so the business can later answer "how much did IT spend this quarter?"

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)

🧩 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).

  1. Run OKKP → select/maintain controlling area → New Entries (or Details on PSPK)
  2. Fill Basic Data:
FieldValueWhy
Controlling Area (key)PSPK⚠️ MUST equal the company code key for the "same as CC" model
NamePakSteel Controlling Area
CoCd → CO AreaControlling area same as company code1:1 simplest. (Use "Cross-company-code cost accounting" only to group PSPK+PSAE — needs currency type 30 since PKR≠AED)
Currency Type10 (Company Code Currency)forced by "same as CC"
CurrencyPKR (auto)derived from CC
Curr/Val Prof.blankonly for transfer pricing / parallel valuation
Chart of AcctsINTmust match the CC's operating chart
Fiscal Year VariantK4must match the CC's FYV (Cal Year, 4 special periods)
CCtr Std. HierarchyPSPKHIERmandatory — root node of all cost centers; say "Yes" when asked to create it
Reconciliation Ledgergreyed — leaveobsolete 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.

FieldValueWhy (MM relevance)
Fiscal Year (from)2020 (covers 2026, leave "to" blank)active from this year onward
Cost CentersComponent active⭐ enables cost centers on POs (acct assignment K)
Order ManagementComponent active⭐ internal orders (acct assignment F)
Commit. Management + tick "W. Commit. Mgt"Components Active⭐ PR/PO commitment values post
ProfitAnalysis / Acty-Based Costingnot activeCO-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.

  1. OX19 (or OKKP → select PSPK → "Assignment of company codes") → New Entries → Company Code PSPK
⚠️ If postings already exist (you configured CO late) — the FULL recovery chain (verified live on S/4HANA 2023)
  1. 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, msg 116 → set to W → Save → /n restart OX19 → re-assign → green ✓ through the warning.
  2. 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).
✅ COMPLETE the mass-data project (the step that's hard to find — here are the exact transactions)
  1. 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_STATUS does NOT exist in 2023 — use the cockpit tcode.)
  2. FINS_CCD2COA_COCKPIT → select project PSPKCO01Show Cockpit → select the first activity row → Execute ("run all activities up to and including…") → confirm → background jobs scheduled.
  3. Refresh (circular arrow) every 30–60s until the blue diamonds turn to green checkmarks (0 errors).
  4. Formally close it: FINS_CD2CA_COMPLETE ("Complete Project") for PSPKCO01 → status = Completed. (Status overview: FINS_CD2CA_STAT_OVW.) → this clears CUST412.
🧩 Then clear the remaining consistency errors (run FINS_CUST_CONS_CHK_P for PSPK/0L to see which remain)
  • 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 · Version 0 · Ledger 0L → 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 Variant SAP_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 · SE16NTKA02 shows PSPK ↔ PSPK. Then MIGO/account-assigned POs post. (The greyed "CoCd → CO Area" on OBY6 auto-displays PSPK — don't set it there.)

🎯 The real lesson
All of this (CUST116 → project → CUST205/326/201) exists ONLY because the controlling area was assigned AFTER postings. In a greenfield, configure + assign the controlling area in the Realize phase, before the first posting — and none of this recovery chain ever appears.

🔧 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):

FieldValue
NameProduction CC Karachi
DescriptionProduction 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 Centerblank (fill only if PCA active & it prompts)

Ctrl+S → "Cost Center PKKHI-PROD created". Verify with KS03.

Minimum cost-center set for the scenarios:

CodeNameCategoryUsed in
PKKHI-PRODKarachi Production1 Production5, 11, 25
PKKHI-MAINTKarachi Maintenance2 Service5, 25
PKADM-ITIT Department3 Admin4
PKADM-FINFinance Department3 Admin4
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.

CatTypeFor
1Primary cost / cost-reducing revenueExpense G/Ls (consumables 410000, services 470000) — most common ⭐
11RevenueRevenue G/Ls
22External settlementOrder/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

AACCost objectNeedsScenario
blankStock (inventory G/L)material with stock view1,2,7,8,9
KCost Centerthis step (19)4,5,11
FInternal OrderOrder Mgmt active (19B)
AAssetAA configured (FI)6
PProject (WBS)PS configured26
CSales OrderSD12

🚨 Issues & fixes

🔥 THE BIG ONE — assigning the controlling area AFTER postings already exist
This is the hardest real-world recovery chain in the whole setup guide, and it only happens because CO was assigned late. The exact, verified sequence (preserve every transaction code — do not improvise):
  1. FINS_ACDOC_CUST116 blocks OX19. → Change Message Control: app area FINS_ACDOC_CUST, msg 116W (warning). Restart OX19 and re-assign CC ↔ CO area (OX19) through the warning.
  2. This creates a mass-data project (e.g. PSPKCO01). Until it completes, all PSPK/0L postings are blocked (CUST412).
  3. Complete it via FINS_CCD2COA_COCKPIT ("Update Postings: Assign CCode to COArea") → Show Cockpit → run all activities → refresh until green.
  4. Formally close with FINS_CD2CA_COMPLETE → clears CUST412.
  5. CUST205 ("Define Ledger for CO Version") → CO Area PSPK · Version 0 ↔ Ledger 0L → Save → FINS_UPD_CMP_VERSN.
  6. CUST326 (SPRO → Integration of Controlling with Financial Accounting → Check/Define Default Values for Postings in Controlling) → CoCode PSPK + Doc Type Mapping Variant SAP_CO → Save.
  7. CUST201 (umbrella) clears automatically once 205/326/412 are fixed.
Document-splitting errors may also surface during this chain: GLT2076, GLT2201, GLT2153 → see the Troubleshooting Center.

⛓️ IRON RULE: assign the controlling area BEFORE any postings (greenfield) to avoid this entire chain.
SymptomCauseFix
KI105 "No company code assigned to controlling area" when creating a cost centerOX19 assignment not doneRun OX19 → assign PSPK ↔ PSPK
FINS_ACDOC_CUST116 blocks the OX19 assignmentPostings already exist in PSPK/0L (CO assigned late)Set msg 116 → W, then run the full recovery chain above
CUST412 — all PSPK/0L postings blockedMass-data project created but not completedFINS_CCD2COA_COCKPIT → run all → FINS_CD2CA_COMPLETE
PO can't post to a cost centerExpense G/L has no Cost Element CategoryFS00 → set Cost Element Category 1 (19E)

✅ Verification

CheckExpected
SE16NTKA01row for controlling area PSPK
SE16NTKA02PSPK ↔ PSPK company-code assignment
SE16NCSKSyour cost center rows (KOKRS = PSPK)
KS03 → PKKHI-PRODdisplays the cost center
FINS_CUST_CONS_CHK_P (PSPK / 0L)all green (if you ran the recovery chain)
← Previous
Step 18: BP Master Data Configuration
Next →
Back to Setup Guide Hub