SAP VC Multi-Level BOM $SELF $PARENT $ROOT KMAT Propagation

Multi-Level BOM Configuration in SAP VC: $SELF, $PARENT, and $ROOT Patterns

PJ / 2026-05-30

Multi-level configuration is where SAP VC shows its real power. A product like an elevator has multiple configurable sub-assemblies : the cabin, the door system, the control panel. Each sub-assembly is itself a KMAT with its own class, profile, and dependencies. The top-level configuration must propagate values down, and sub-assembly configurations must communicate back up.

Source: CS02 transaction — BOM with multi-level configurable items

How Multi-Level Configuration Works

A configurable material in a BOM (the component) can itself be a KMAT : a configurable sub-assembly. When the top-level configuration runs:

  1. The top-level material class characteristics are processed
  2. BOM items are selected by selection conditions
  3. If a selected BOM item is a KMAT, its own configuration profile is triggered
  4. The sub-assembly configuration processes its own class, dependencies, and BOM

Object Variables: $SELF, $PARENT, $ROOT

These three variables control which object a dependency refers to in multi-level configurations.

Variable Refers To
$ROOT The highest-level configurable material in the BOM
$SELF The material to which the dependency is directly assigned
$PARENT The object immediately above $SELF

Behavior by assignment:

Value Propagation Patterns

Top-Down (Required Condition)

A selection condition at the sub-assembly BOM item level makes a characteristic mandatory. The user must enter a value for the sub-assembly characteristic. One way to propagate.

Procedure-Based Copy

Write a procedure at the BOM item level to copy values from parent to child:

$self.COLOR = $parent.COLOR if $parent.COLOR specified

For multi-level cascading:

$self.COLOR = $root.COLOR if $root.COLOR specified

Constraint-Based Inheritance

For cases where a value must propagate between objects of different classes, use a constraint. Note the LO-VC restrictable caveat in the Common Mistakes section: constraints only restrict characteristics that are marked as restrictable.

OBJECTS:
  PARENT IS_A (300) PARENT_CLASS,
  CHILD IS_A (300) CHILD_CLASS

CONDITION:
  SUBPART_OF (CHILD, PARENT)

RESTRICTIONS:
  CHILD.DESIGN_CODE = PARENT.DESIGN_CODE

Multi-Level Nuances

$ROOT behavior:

Configuration profile for sub-assemblies: Each KMAT sub-assembly needs its own configuration profile (CU41 — or PMEVC in S/4HANA, which works in LO-VC mode too) with:

BOM explosion and multi-level: The BOM explosion processes one level at a time. A sub-assembly's BOM is only exploded when that sub-assembly is being configured. This means the selection conditions at level 2 are evaluated after level 1's BOM items are determined.

Practical Example: Elevator Door System

An elevator (top-level configurable) contains a door system (sub-assembly KMAT).

Top-level (Elevator) characteristics:

Sub-assembly (Door System) needs:

Procedure on door BOM item:

$self.COLOR = $parent.COLOR if $parent.COLOR specified
$self.DOOR_TYPE_CHAR = $parent.DOOR_TYPE if $parent.DOOR_TYPE specified

Constraint-based propagation between classes: To propagate a value from one class to another, use a constraint. In LO-VC the characteristic must still be marked as restrictable for the constraint to restrict it (CL02 class-characteristic assignment); AVC ignores the flag and treats all characteristics as restrictable.

OBJECTS:
  ELEV IS_A (300) ELEV_CLASS,
  DOOR IS_A (300) DOOR_CLASS

CONDITION:
  SUBPART_OF (DOOR, ELEV)

RESTRICTIONS:
  DOOR.DOOR_TYPE_CHAR = ELEV.DOOR_TYPE

Common Mistakes

Sources: LO-VC 4.6C official documentation — Object Variables section | CS02 transaction (BOM)