GitHub

Intercompany Material Elimination in SAP S/4HANA: CFIN, MDG Key Mapping, and Group Reporting Currency Type 31


Intercompany profit elimination across entities with non-matching material IDs is one of the more architecturally misunderstood problems in SAP group reporting implementations. The instinct — find a “group material number” that both entities share and drive elimination off it — points in the wrong direction. The correct architecture is more nuanced and, once understood, more powerful: elimination in SAP Group Reporting keys off trading partner (VBUND) and Currency Type 31 (Group Valuation), not material identity. Material harmonization via MDG Key Mapping in Central Finance (CFIN) serves analytics precision and optional material-level granularity, but is not a prerequisite for the elimination itself.

This whitepaper synthesizes the full architecture across four layers — Material Ledger parallel valuation, CFIN replication and MDG Key Mapping, Group Reporting consolidation mechanics, and entity/segment reporting coexistence — using a concrete two-instance intercompany transfer scenario as the grounding case. It concludes with a corrected field-level data model, a precise currency type decision framework, and a practical recommendation on whether and how to extend CFIN’s coding block to preserve source material identity for entity-level close.


I operate two separate S/4HANA instances — a manufacturing entity (MFG, Instance A) and a production/receiving entity (PRD, Instance B). Both instances replicate financial postings into a central CFIN client via SLT. My MFG entity sells intercompany to PRD at a transfer price; PRD receives the material, carries it in inventory, and ultimately sells externally.

The two entities assign different material IDs to the same physical item:

EntityInstanceMaterial ID
MFG (Seller)Instance AMFG-AZ-100002
PRD (Receiver)Instance BPRD-CA-500188

PRD receives the material at a legal transfer price of $1,000.00 (Currency Types 10 and 30). The Material Ledger computes a group valuation of $643.05 under Currency Type 31, derived from a weighted average of actual costs including a source correction of $(14.75). The difference — $356.95 — represents the intercompany markup, posted as a system-generated delta to a valuation clearing account on both entities under Currency Type 31.

The business question: how do I eliminate the $356.95 intercompany markup at consolidation, and what role — if any — does a harmonized group material number play in that elimination?


The $643.05 group cost is not a round or manually derived figure. It is the output of the Material Ledger actual costing run, which computes a periodic weighted average absorbing base procurement costs, manufacturing variances, exchange rate differences, and period-end source corrections. The $(14.75) source correction in the scenario reflects a price difference settled from prior-period special stock — a standard Material Ledger settlement mechanic.

{
"data": [
{
"type": "waterfall",
"orientation": "v",
"measure": ["relative","relative","relative","relative","relative","relative","total","relative","total"],
"x": ["Raw Material","Labor / Conversion","Overhead 1","Overhead 2","Overhead 3","Source Correction","Group Cost (CURTYPE 31)","IC Markup","Legal Transfer Price (CURTYPE 10/30)"],
"y": [480.00, 145.20, 17.60, 10.00, 5.00, -14.75, 0, 356.95, 0],
"connector": {"line": {"color": "rgb(63,63,63)"}},
"decreasing": {"marker": {"color": "#e65100"}},
"increasing": {"marker": {"color": "#2e7d32"}},
"totals": {"marker": {"color": "#1565c0"}},
"name": "Cost Build-up"
}
],
"layout": {
"title": "Intercompany Material Cost Build-up — Group vs. Legal Valuation",
"yaxis": {"title": "USD ($)"},
"showlegend": false
}
}

The Material Ledger posts two currency views simultaneously on every intercompany financial document:

My Sending Entity (MFG) — At IC Billing:

AccountCurrency Type 10/30 (Legal)Currency Type 31 (Group Val)
Accounts Receivable+$1,000.00+$1,000.00
Revenue−$1,000.00−$643.05
Valuation Clearing (delta)−$356.95

My Receiving Entity (PRD) — At Goods Receipt / Invoice:

AccountCurrency Type 10/30 (Legal)Currency Type 31 (Group Val)
Inventory / GR-IR+$1,000.00+$643.05
Valuation Clearing (delta)+$356.95
Accounts Payable−$1,000.00−$1,000.00

The $356.95 delta is a system-generated parallel valuation posting, not a manual journal entry. It appears on both sides simultaneously. Under Currency Type 31 viewed at group level, the two clearing postings net to zero — self-eliminating by design. This is the architectural intent of the parallel valuation framework: the elimination is structural, embedded in the valuation layer, rather than modeled in the consolidation layer.


The Two Elimination Types — Material-Agnostic by Design

Section titled “The Two Elimination Types — Material-Agnostic by Design”

Group Reporting’s consolidation engine operates on three core dimensions: FS item (group chart of accounts), consolidation unit (legal entity), and partner unit (VBUND — trading partner). Material number is not in this set by default. This has two direct consequences for the intercompany scenario.

These are eliminated on VBUND plus FS item — never on material number. As long as both source systems stamp the trading partner (derived from the IC customer/vendor and company code assignment), the fact that MFG calls it MFG-AZ-100002 and PRD calls it PRD-CA-500188 is architecturally irrelevant. The automated elimination postings at consolidation posting level 20 (document types 2E through 2H) execute without reference to any material dimension.

This is the elimination type that the material ID question actually implicates. The standard delivered IPI method operates at partner unit level — it applies a markup percentage (Percent f. Partner) to reported ending inventory held against that partner, posting a reduction to inventory, an adjustment to the buyer’s net income, and a deferred profit entry on the seller’s side. This method also does not require matched material IDs — it eliminates on partner plus inventory value plus markup rate.

The $356.95 markup in the scenario corresponds to 35.695% of the $1,000 legal transfer price. If I operate on Currency Type 30 in Group Reporting, this percentage becomes the Percent f. Partner configuration input and the IPI method models the elimination. If Currency Type 31 is used, the elimination is direct — the markup never enters the consolidation dataset in the first place.


MDG Key Mapping in CFIN — What It Does and What It Does Not Do

Section titled “MDG Key Mapping in CFIN — What It Does and What It Does Not Do”

CFIN’s replication pipeline intercepts every FI/CO document from both my source instances at the SLT layer, resolves all object ID translations via the MDG Key Mapping layer, validates through AIF, and posts the translated document into ACDOCA. The translation is substitutive: the source material ID is replaced by the central material ID in the MATNR field before the document posts.

flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
MFG["MFG Instance A<br>MATNR = MFG-AZ-100002<br>VBUND = PRD-CA<br>CURTYPE 10 = $1,000<br>CURTYPE 31 = $643.05"]:::source
PRD["PRD Instance B<br>MATNR = PRD-CA-500188<br>VBUND = MFG-AZ<br>CURTYPE 10 = $1,000<br>CURTYPE 31 = $643.05"]:::source
SLT_A["SLT — Instance A"]:::integration
SLT_B["SLT — Instance B"]:::integration
MAP["MDG Key Mapping<br>MFG-AZ-100002 → CENTRAL-MAT-X<br>PRD-CA-500188 → CENTRAL-MAT-X<br>FINS_CFIN_MAP_MANAGE"]:::integration
AIF["AIF Validation<br>Central material exists?<br>All mappings resolved?"]:::integration
ACDOCA["ACDOCA — CFIN Universal Journal<br>MATNR = CENTRAL-MAT-X<br>BELNR_SENDER = source doc ref<br>LOGSYS = source instance<br>VBUND stamped<br>CURTYPE 10 + 31 carried"]:::target
ERR["AIF Error Queue<br>IFMON / AIF ERR<br>Doc held — not posted"]:::reporting
MFG --> SLT_A
PRD --> SLT_B
SLT_A --> MAP
SLT_B --> MAP
MAP --> AIF
AIF -->|"All mappings resolved"| ACDOCA
AIF -->|"Mapping missing"| ERR

If a source material has no mapping entry, the document is held in the AIF error queue — not silently dropped, not posted with a blank material. This makes mapping completeness an operational discipline: every new IC material created in either source instance after go-live requires a corresponding mapping entry before the first IC transaction posts.

What It DoesWhat It Does Not Do
Substitutes source MATNR with central MATNR on every replicated docSync logistics — no MM/WM impact in source systems
Resolves at replication time, before ACDOCA postCreate a Group Reporting consolidation dimension automatically
Retains source document reference for drill-backEliminate IC profit — that is Group Reporting’s job
Applies to all doc types carrying that materialHandle value differences — markup still sits in inventory

The mapping is purely an ID translation at the accounting document level. It ensures that when both documents land in CFIN, they carry the same material identifier — providing the foundation for material-level analytics and optional material-level IPI in Group Reporting. But the $356.95 elimination is driven by VBUND plus currency type configuration, not by the mapping itself.

After MDG Key Mapping resolves, my two source documents post into CFIN ACDOCA as follows:

ACDOCA FieldMFG Doc (Instance A)PRD Doc (Instance B)
MATNRCENTRAL-MAT-XCENTRAL-MAT-X
BUKRSMFG-AZPRD-CA
VBUNDPRD-CAMFG-AZ
LOGSYSMFG_INSTANCE_APRD_INSTANCE_B
BELNR_SENDERSource doc # (MFG)Source doc # (PRD)
BUKRS_SENDERMFG-AZPRD-CA
Amount — CURTYPE 10/30$1,000.00$1,000.00
Amount — CURTYPE 31$643.05$643.05
Valuation clearing — CURTYPE 31−$356.95+$356.95

Both source material IDs are gone from MATNR. They exist in the MDG mapping tables as lookup keys and are recoverable via drill-back through BELNR_SENDER + LOGSYS to the originating document in the source instance.


The Currency Type Decision — The Central Architectural Choice

Section titled “The Currency Type Decision — The Central Architectural Choice”

Whether Group Reporting reads Currency Type 31 or Currency Type 30 for consolidation data collection is the single most consequential configuration decision in my architecture. It determines whether the $356.95 elimination is structural or modeled.

flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
ACDOCA["CFIN ACDOCA<br>Both currency types present"]:::integration
subgraph PATH_A["Path A — Currency Type 31"]
A1["GR reads CURTYPE 31<br>PRD inventory = $643.05<br>MFG revenue = $643.05"]:::target
A2["Delta clearing accounts<br>net to zero across entities"]:::target
A3["IC elimination: direct offset<br>on VBUND + FS item<br>No IPI markup % needed"]:::target
A4["Result: $643.05 consolidated<br>$0 residual IC profit"]:::reporting
end
subgraph PATH_B["Path B — Currency Type 30"]
B1["GR reads CURTYPE 30<br>PRD inventory = $1,000.00<br>MFG revenue = $1,000.00"]:::target
B2["$356.95 markup IS<br>in reported dataset"]:::source
B3["Manual consolidation journal<br>required to carve out $356.95<br>BEFORE elimination runs"]:::source
B4["IPI method runs on<br>adjusted $643.05"]:::reporting
B5["Result: $643.05 consolidated<br>Same end state — operationally fragile"]:::source
end
ACDOCA --> A1
ACDOCA --> B1
A1 --> A2 --> A3 --> A4
B1 --> B2 --> B3 --> B4 --> B5

Path A: Currency Type 31 — The Clean Architecture

Section titled “Path A: Currency Type 31 — The Clean Architecture”

When I configure Group Reporting’s data collection to read Currency Type 31:

  • PRD reports inventory at $643.05 — the markup-free group cost
  • MFG reports revenue at $643.05
  • The $356.95 valuation clearing postings net to zero across both entities and require no intervention
  • IC elimination runs as a straightforward partner-unit offset on VBUND plus FS item
  • No IPI markup percentage configuration is needed
  • The elimination is exact — it reflects actual weighted average costs from the Material Ledger run, including the $(14.75) source correction

Prerequisite: Material Ledger with parallel valuation must be active and writing Currency Type 31 in both of my source instances.

Path B: Currency Type 30 — The Manual Adjustment Path

Section titled “Path B: Currency Type 30 — The Manual Adjustment Path”

When I configure Group Reporting to read Currency Type 30:

  • PRD inventory and MFG revenue both enter consolidation at $1,000.00 (legal transfer price)
  • The $356.95 markup is present in the reported dataset
  • I must record a manual consolidation journal to reduce PRD inventory by $356.95 and adjust MFG deferred profit before the IC elimination task runs
  • The manual adjustment must be recalculated every period as the Material Ledger weighted average changes
  • If the source correction changes (the $(14.75) shifts), the manual journal must be updated accordingly

This path reaches the same $643.05 consolidated inventory figure but introduces period-close dependency, recalculation risk, and an operational step that breaks the automated consolidation close cycle. The valuation clearing account mechanism in Currency Type 31 exists precisely to eliminate this manual step by design.

FactorCurrency Type 31Currency Type 30
ML parallel valuation required in source✅ Yes — both instances❌ Not required
Markup in GR reported data❌ Never enters✅ Present — must be carved out
IPI method configuration needed❌ Not required✅ Required + manual adjustment first
Elimination precisionExact (actual ML costs)Modeled (% approximation)
Period-close operational complexityLow — automatedHigh — manual recalculation per period
Long-term scalabilityHighLow — fragile as markup rates change

Entity and Segment Reporting — Preserving Source Material Identity

Section titled “Entity and Segment Reporting — Preserving Source Material Identity”

Once MDG Key Mapping substitutes CENTRAL-MAT-X into MATNR, my entity and segment-level financial close reports running in CFIN lose the original material granularity. A cost center report for the MFG-AZ entity in CFIN shows CENTRAL-MAT-X — which is meaningless for that entity’s own operational close and product-level P&L.

The CFIN replication framework delivers the following source reference fields in ACDOCA as standard, populated automatically by the SLT/AIF pipeline:

FieldDeliveredContent
LOGSYS✅ StandardSource logical system
BUKRS_SENDER✅ StandardSource company code
BELNR_SENDER✅ StandardSource document number
GJAHR_SENDER✅ StandardSource fiscal year
DOCLN_SENDER✅ StandardSource line item
MATNR✅ StandardOverwritten — carries CENTRAL-MAT-X post-mapping
Source material ID as queryable ACDOCA field❌ Not standardRequires custom development

The source document pointer (BELNR_SENDER + LOGSYS) enables drill-back to the originating document in the source instance, where the original material ID is visible. However, the source material ID is not carried forward as a separately queryable field in ACDOCA by default. Drill-back is the delivered mechanism for recovering it — not a parallel field.

Three Options for Handling Source Material Identity

Section titled “Three Options for Handling Source Material Identity”
flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
Q["Requirement: Source material ID<br>accessible for entity/segment reporting?"]:::source
OPT_A["Option A — Drill-Back Only<br>BELNR_SENDER + LOGSYS<br>Navigate to source doc<br>No custom development"]:::target
OPT_B["Option B — Custom Coding Block<br>Add ZMATNR_SRC to CI_COBL<br>Populate via BAdI at replication<br>Source MATNR queryable in ACDOCA"]:::integration
OPT_C["Option C — Analytics Layer Join<br>MDG mapping table lookup at runtime<br>in SAC or BW report<br>No ACDOCA change"]:::reporting
DA["Sufficient for:<br>Audit trail only<br>Infrequent lookup<br>Zero dev budget"]:::source
DB["Sufficient for:<br>Entity P&L by source material<br>Segment cost reports in CFIN<br>Product-level profitability"]:::integration
DC["Sufficient for:<br>Reporting teams can absorb<br>runtime MDG join<br>No transport overhead"]:::reporting
Q --> OPT_A
Q --> OPT_B
Q --> OPT_C
OPT_A --> DA
OPT_B --> DB
OPT_C --> DC

The delivered source reference fields (BELNR_SENDER + LOGSYS) allow navigation from the CFIN consolidated document back to the originating transaction in my source instance. The original material ID is visible there. No development is required. This is sufficient for audit use cases and infrequent lookups but does not support entity-level reports that need to group or filter by source material ID directly within CFIN.

Option B: Custom Coding Block Field (CI_COBL)

Section titled “Option B: Custom Coding Block Field (CI_COBL)”

The standard SAP-endorsed extension pattern for adding a queryable source material field to ACDOCA is a CI_COBL append combined with a BAdI implementation in the CFIN replication pipeline. The implementation sequence:

StepActionObject
1Add custom field to coding blockCI_COBL append — e.g. ZMATNR_SRC (18 char, matches MATNR type)
2Field auto-propagates to ACDOCAStandard SAP append mechanism — no manual table change
3Implement BAdIFINS_CFIN_FI_TRANS / FINS_CFIN_CO_TRANS
4In BAdI: read source MATNR from incoming document before mapping firesBAdI implementation class
5Write source MATNR to ZMATNR_SRCCustom field populated pre-substitution
6Standard MDG Key Mapping overwrites MATNR with CENTRAL-MAT-XDelivered mapping — unchanged
7ACDOCA carries both identitiesMATNR = CENTRAL-MAT-X / ZMATNR_SRC = MFG-AZ-100002

The BAdI fires within the replication pipeline before the document posts to ACDOCA, giving the implementation class access to the full document context including the pre-mapping source material ID. This is a development effort — it requires transport discipline and ongoing maintenance as new source systems or new materials are onboarded to CFIN.

For my reporting teams working in SAC or BW, the MDG mapping table can be joined at query runtime — the report resolves CENTRAL-MAT-X back to MFG-AZ-100002 or PRD-CA-500188 via the mapping table without any ACDOCA field change. This approach has no transport overhead but introduces runtime join complexity and depends on the mapping table being accessible from the analytics layer.

Resulting ACDOCA Field Map Under Each Option

Section titled “Resulting ACDOCA Field Map Under Each Option”
FieldOption A (Delivered Only)Option B (Custom CI_COBL)
MATNRCENTRAL-MAT-XCENTRAL-MAT-X
ZMATNR_SRC❌ Does not existMFG-AZ-100002 or PRD-CA-500188
BELNR_SENDERSource doc #Source doc #
LOGSYSMFG_INST_AMFG_INST_A
Source MATNR recoverable?Via drill-back only✅ Directly queryable in ACDOCA
Entity segment report filterBUKRS + drill-backBUKRS + ZMATNR_SRC directly

Under Option B, both identities coexist on the same ACDOCA line item. The central material enables group consolidation; the source material field enables entity close. No separate data store or reconciliation layer is required.


flowchart TD
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
MFG_SRC["MFG Instance A<br>MATNR: MFG-AZ-100002<br>ML Parallel Val Active<br>CURTYPE 10 + 31 written"]:::source
PRD_SRC["PRD Instance B<br>MATNR: PRD-CA-500188<br>ML Parallel Val Active<br>CURTYPE 10 + 31 written"]:::source
SLT["SLT Replication<br>FI + CO Documents"]:::integration
MDG["MDG Key Mapping<br>FINS_CFIN_MAP_MANAGE<br>Both MATNRs → CENTRAL-MAT-X"]:::integration
BADI["BAdI — FINS_CFIN_FI_TRANS<br>Captures source MATNR<br>Writes to ZMATNR_SRC<br>before mapping fires"]:::integration
AIF["AIF Validation + Monitoring<br>IFMON / AIF ERR"]:::integration
ACDOCA["CFIN ACDOCA<br>MATNR = CENTRAL-MAT-X<br>ZMATNR_SRC = source MATNR<br>VBUND stamped<br>CURTYPE 10 = $1,000<br>CURTYPE 31 = $643.05<br>Clearing delta = $356.95"]:::target
ENT["Entity / Segment Reporting<br>Filter: BUKRS + ZMATNR_SRC<br>Source material granularity intact"]:::reporting
GR["Group Reporting<br>Data collection: CURTYPE 31<br>MATNR = CENTRAL-MAT-X<br>VBUND drives elimination"]:::target
ELIM["IC Elimination<br>AR/AP + Rev/COGS: VBUND + FS item<br>IPI: delta clearing nets to zero<br>$356.95 eliminated structurally"]:::reporting
CONSOL["Consolidated Financials<br>Inventory: $643.05<br>IC Profit: $0<br>SAC / Analysis for Office"]:::reporting
MFG_SRC --> SLT
PRD_SRC --> SLT
SLT --> MDG
SLT --> BADI
BADI --> AIF
MDG --> AIF
AIF --> ACDOCA
ACDOCA --> ENT
ACDOCA --> GR
GR --> ELIM
ELIM --> CONSOL

1. Enforce VBUND on every intercompany posting in both my source instances. Trading partner stamping is the foundational prerequisite for all IC elimination types — AR/AP, revenue/COGS, and IPI. This is a configuration and master data discipline item, not a development effort.

2. Activate Material Ledger parallel valuation in both my MFG and PRD instances and configure Group Reporting data collection to read Currency Type 31. This is the single highest-leverage architectural decision. It makes the $356.95 elimination structural — embedded in the valuation layer — rather than modeled through a markup percentage. Period-close automation is only fully achievable on this path.

3. Register MDG Key Mapping entries for all intercompany materials before go-live. Both MFG-AZ-100002 and PRD-CA-500188 must map to CENTRAL-MAT-X in FINS_CFIN_MAP_MANAGE before the first IC transaction replicates. I need to establish a governance process so new IC materials in either source instance trigger a mapping entry creation as part of material master workflow.

Near-Term — If Entity/Segment Close Runs in CFIN

Section titled “Near-Term — If Entity/Segment Close Runs in CFIN”

4. Implement the CI_COBL custom field ZMATNR_SRC with the BAdI FINS_CFIN_FI_TRANS. If my entity or segment-level financial close reporting in CFIN requires filtering or aggregation by source material ID, the custom coding block field is the correct extension pattern. It is the SAP-endorsed extensibility path, not a workaround. I should scope the development to capture the source MATNR pre-mapping and write it to ZMATNR_SRC before the MDG substitution fires. Both identities then coexist in ACDOCA — CENTRAL-MAT-X for group consolidation, the source ID for entity close — with no separate data store required.

Long-Term — Toward Direct Value Elimination

Section titled “Long-Term — Toward Direct Value Elimination”

5. Track the S/4HANA 2025 Universal Parallel Accounting group valuation ledger. The trajectory of the parallel valuation architecture moves toward group valuation as a first-class ledger, making the markup-free value directly replicable to Group Reporting without reliance on a configured markup percentage. When available in my release cycle, this eliminates the last remaining modeling dependency in the IPI elimination path and makes the architecture fully driven by actual Material Ledger values end to end.


The core insight I validate in this whitepaper is that intercompany material elimination in SAP Group Reporting does not require matching material IDs between sending and receiving entities, and there is no native group material number object that drives the elimination engine. Elimination keys off trading partner (VBUND) for AR/AP and revenue/COGS flows, and off Currency Type 31 for profit-in-inventory elimination — the $356.95 intercompany markup in this scenario is eliminated structurally through the Material Ledger’s parallel valuation delta posting mechanism when Group Reporting reads Currency Type 31.

MDG Key Mapping in CFIN provides genuine value — it harmonizes both source material IDs to a single central identity (CENTRAL-MAT-X) in ACDOCA, enabling group-level analytics and optional material-granularity IPI — but it is an analytics and precision enabler, not an elimination prerequisite. The source material identity is not lost in this process: delivered source reference fields support drill-back, and a CI_COBL custom field with a BAdI implementation preserves the source ID as a directly queryable ACDOCA dimension for entity and segment close without any architectural compromise to the group consolidation path.

The choice between Currency Type 31 and Currency Type 30 for Group Reporting data collection is the decision that determines whether the $356.95 elimination is automated and exact, or manual, modeled, and period-close-dependent. For a multi-instance landscape with Material Ledger active in both source systems, Currency Type 31 is the unambiguous architectural recommendation.