SAP VC LO-VC AVC Debugging CU50

Debugging SAP Variant Configuration Dependencies: A Practical Guide

PJ / 2026-05-28

Variant Configuration dependencies are the most complex part of any VC model. When something goes wrong, a component is selected incorrectly, a price comes out wrong, or a valid combination is rejected, you need to debug the dependency logic.

This guide covers the practical techniques for debugging VC dependencies in both LO-VC and AVC, based on official SAP documentation and real project experience.

Note: In S/4HANA, PMEVC (transaction code) provides a Fiori-based alternative to CU50 for configuration simulation and trace. PMEVC works in both LO-VC and AVC engine modes. The same trace data is available with a more modern UI, live updates, and built-in filtering. This guide focuses on CU50 because it is universally available across ECC and S/4HANA, but if you are on S/4HANA, try PMEVC first.

SAP Community : AVC Trace Guide by Florian Soe (SAP)

The Most Important Tool: CU50 Configuration Trace

CU50 is the configuration simulation transaction in SAP. It lets you configure a material step by step, and it can record a trace of every dependency that executes.

How to Activate the Trace

There are two ways to activate the VC trace, depending on how you work:

Option 1: CUTRC (recommended for LO-VC)

Use transaction /nCUTRC to open the trace in its own independent window. This is more convenient than the embedded approach because:

Open CUTRC, configure your trace level and areas, activate it, then switch to CU50 or VA01 to configure. The trace captures everything automatically.

Option 2: Embedded via CU50 (quick access)

  1. Open CU50 (/nCU50)
  2. Enter the configurable material and any required characteristics
  3. Go to Extras → Trace → Activate
  4. Configure your material by selecting characteristic values
  5. Go to Extras → Trace → Display

In S/4HANA: PMEVC Simulation (works in LO-VC mode too)

In PMEVC, open the Simulation function. PMEVC is a Fiori transaction available in S/4HANA regardless of whether you run the LO-VC or AVC engine. This approach is different from CU50 : you configure and trace in the same view, side by side. The trace content updates live as you select values, making it easier to understand which dependency is triggered by each action. The output is also more detailed and structured than the classic CU50 trace.

The trace shows you every dependency that fired, in what order, and with what result.

What the Trace Tells You

A typical CU50 trace entry (with More Detailed level) looks like this:

Line    Message    Message    Message
Index   Class      Type       Number    Message Text                           Dependency Trace
1                                         Trace de/activated 10.10.2022 at 03:01
2       28         I          405       $SELF____: 00000001 000000000013685525 000000001000000001
3       28         I          405       $PARENT_: 00000001 000000000013685525 000000001000000001
4       28         I          405       $ROOT___: 00000001 000000000013685525 000000001000000001
5       28         I          405
6       28                    599       Procedure        PRO_PRICE_CALC executed    X
7       28                    599       < $SELF  .TOTAL_PRICE           15000.00    X
8       28                    599
9       28                    599       Procedure        PRO_DOOR_ADJUST executed   X
10      28                    599       > $ROOT  .DOOR_TYPE                GLASS    X
11      28                    599       < $SELF  .TOTAL_PRICE           17000.00    X
12      28                    599
13      28                    599       Procedure        PRO_MAT_OPTION executed    X
14      28                    599       > $ROOT  .DOOR_TYPE                GLASS    X
15      28                    599       $ROOT  .MAT_FINISH               RAL7035    X
16      28                    599       $ROOT  .DOOR_HEIGHT                 2000    X

Each line is labeled with a message type:

Common Dependency Errors and How to Find Them

1. Characteristic Value Not Available

Symptoms: A configuration runs without explicit errors, but certain characteristic values show "NR" (Not Relevant) instead of the expected assigned value. Downstream procedures or constraints fail because they can't read the expected values.

Example trace:

Line    Message    Message    Message
Index   Class      Type       Number    Message Text                                    Dependency Trace
1       CU         I          444       Characteristic Z_FINISH_COLOR  - value NR
2       CU         I          444       Characteristic Z_PANEL_TYPE    - value NR
3       CU         I          444       Characteristic Z_DOOR_HEIGHT   - value NR
4       C1         S          821       Inconsistent characteristic value assignment
5       CU         I          444       Characteristic Z_PANEL_TYPE    - value NR
6       C1         S          821       Inconsistent characteristic value assignment

How to find it: Look for Message Type 444 (characteristic value not available : NR means the characteristic has no valid value 'NR' at this point in the configuration). When a value is assigned but not available, it triggers Message 821 (inconsistent assignment).

Common causes:

Fix: Check the characteristic's value domain in CT04.

2. Procedure Execution Order Dependency

Symptoms: The same configuration sometimes works, sometimes doesn't. The result depends on which order the user selects values.

Example:

* Procedure 1
$SELF.TOTAL_PRICE = $SELF.BASE_PRICE,
* Procedure 2
$SELF.TOTAL_PRICE = $SELF.TOTAL_PRICE + 500 if $SELF.FEATURE_X = 'Yes',
$SELF.TOTAL_PRICE = $SELF.TOTAL_PRICE * 1.1 if $SELF.FEATURE_X = 'Yes'.

If the user selects FEATURE_X = 'Yes' before the base price is calculated (Procedure 1 hasn't run yet), TOTAL_PRICE gets multiplied by 1.1 after Procedure 2 fires again on the next field change. The result depends on timing.

How to find it: The CU50 trace shows the execution order. If you see the same procedure running multiple times with different results, this is your problem.

Fix: Use the not $SELF.TOTAL_PRICE specified guard to prevent re-execution:

$SELF.TOTAL_PRICE ?= $SELF.BASE_PRICE if not ($SELF.TOTAL_PRICE specified),

3. Selection Conditions That Never Fire

Symptoms: A component is always included in the BOM or never included, regardless of configuration choices.

Example: A glass door panel should only appear when DOOR_TYPE = 'Glass'. But it appears in every BOM explosion.

How to find it: In CU50, run BOM → Display after configuring. Check which components were selected or excluded. The trace doesn't directly show selection condition results in all cases.

Verification path:

  1. In CU50, configure the material with DOOR_TYPE = 'Steel'
  2. Run BOM explosion
  3. Check if the glass door panel appears (it shouldn't)
  4. View the selection condition on the glass door BOM item (CS02) and check its logic

Common causes:

4. Precondition That Blocks Valid Choices

Symptoms: A characteristic value is red (invalid) in the configuration screen for no apparent reason.

How to find it: In CU50, hover over the red value or use Extras → Incompleteness List. This shows which preconditions are failing.

Fix: Look at the precondition logic. Common issues:

LO-VC vs AVC: Debugging Differences

Both LO-VC and AVC support the configuration trace, but there are important differences:

Aspect LO-VC AVC (PMEVC)
UI SAP GUI — CU50 / CUTRC (standalone). Also PMEVC (Fiori) in S/4HANA
Trace activation CU50: Extras → Trace → Activate. CUTRC: dedicated transaction, independent window PMEVC Simulation mode: configure and trace side by side, live updates
Trace output Sequential dependency execution log Constraint-based evaluation log, more structured
Procedure order Preserves execution order Constraint solver may reorder
Error messages Generally clear More detailed (includes constraint violations)
Temporary chars Supported in procedure Not supported — must be refactored
Trace comparison Manual AVC Trace Inspector filters by message type, characteristic, or dependency

Debugging in AVC: Key Differences

Constraint violations appear differently. In AVC, if a constraint can't be satisfied, the solver does not fail silently. It flags the conflict. The trace output shows which constraints are in conflict and which characteristic values would resolve them.

AVC Trace Inspector filters. AVC's trace (available in the PMEVC simulation UI) offers more powerful filtering than CU50: you can filter by Trace Level (high-level vs low-level), Message Type (info, warning, error, inconsistency), Value Assignment By, Characteristic, and Dependency. Use the "Inconsistency Detected" message type filter to jump straight to configuration errors. Source: SAP Community : The Trace by Florian Soe

Trace deactivation. In some SAP releases, the trace may activate automatically in CU50/VA01 even when the configuration log is off. If you see unexpected trace behavior, check KBA 1889920 for deactivation steps. Source: SAP KBA 1889920

Procedures with $SELF.X = $SELF.X + <value> patterns behave differently in AVC. The constraint solver may interpret this as a constraint equation rather than a sequential update. Use intermediate characteristics to break these into clear assignment steps.

Temporary characteristics cause hard errors in AVC. If your LO-VC model uses temporary characteristics, the AVC trace will show them as unresolved. Every characteristic must be:

  1. Created in CT04
  2. Assigned to a class (CL02)

A Systematic Debugging Workflow

Step 1: Reproduce the Problem in CU50

Always start by reproducing the issue in controlled conditions:

Step 2: Activate and Run the Trace

/nCU50
Extras → Trace → Activate

Configure with the problematic combination. Display the trace.

Step 3: Identify the Failing Dependency

Scan the trace for:

Step 3b: Use SAAB for VC_DB_INTERFACE Trace (Sales Order Issues)

If the configuration works in CU50 but fails in a sales order (VA01/VA02), the trace may not capture database-level issues. Use SAAB transaction with checkpoint group VC_DB_INTERFACE to trace how the configuration instance is stored and retrieved in sales orders. This is especially useful for debugging "configuration lost after save" scenarios. Source: SAP KBA 3284731

Step 4: Isolate and Test

For the suspected dependency, test it in isolation:

  1. Create a minimal test scenario in CU50 with only the relevant characteristics
  2. Set characteristic values one at a time to see which step triggers the issue
  3. If possible, comment out other dependencies temporarily to isolate the problem

Step 5: Fix and Compare Traces

After fixing: run the same configuration through CU50 and compare the old trace with the new one. They should differ only where you intended the change.

AVC-Specific Debugging Checklist

Summary

Debugging Tool When to Use What It Shows
CU50 Trace First step for any dependency issue Full execution log with values and conditions
AVC Trace Inspector AVC-specific issues — filter by message type, characteristic Constraint violations, solver output, trace level filtering
BOM Display (CU50) Component selection problems Which BOM items were selected/excluded
Incompleteness List Precondition blocking values Which preconditions are failing
SAAB — VC_DB_INTERFACE Config works in CU50 but fails in sales order Database-level configuration storage and retrieval

CU50 Interface Settings

CU50 has configuration options accessed via Settings → Interface:

Option Description
Screen layout Control which characteristic groups and values appear
Detail level How much trace detail to capture (Basic, More Detailed, Full)
Default values Pre-set configuration values for testing

These settings are stored in the CECU* tables:

Table Description
CECUFM Screen format definitions
CECUSD Screen basic data
CECUSDT Screen description texts
CECUSF Screen border definitions
CECUSFT Screen border descriptions

CU50 vs VC_TABLE_INFO

Tool Purpose
CU50 Traces dependency execution during configuration. Shows runtime behavior.
VC_TABLE_INFO Shows database table structure. Identifies which tables store VC data for a given object.

Use CU50 to understand what the system does. Use VC_TABLE_INFO to understand where the system stores it.

Batch Trace for Regression Testing

You can run CU50 in batch mode for regression testing:

  1. Set up a configuration scenario and save it
  2. After changing dependencies, re-run CU50 against the saved configuration
  3. Compare old and new trace output to verify the change didn't break existing scenarios

This is faster than testing through VA01 every time.

Dependency Processing Sequence (LO-VC)

Understanding the order in which dependencies execute is critical for debugging. When a user confirms a characteristic value, LO-VC processes dependencies in this fixed sequence:

  1. Actions — multiple rounds. Actions can set values, and those settings can trigger other Actions. The system loops until no new values can be inferred.
  2. Procedures — exactly once, in three sub-phases: a. Configuration profile procedures (in order of definition) b. Characteristics procedures c. Characteristic value procedures
  3. Actions — re-run if procedures produced new values
  4. Preconditions
  5. Selection conditions (for characteristics visibility)

Constraints process in parallel with steps 1-3. They do not wait for the sequential chain to finish, and they are not re-triggered by implied changes inside the constraint engine.

This means if a constraint sets a value that would normally trigger a Procedure, the Procedure does not re-run because of the constraint's output. The system only re-loops Actions after Procedures.

The CU50 trace confirms this: you see procedures firing in sequence, followed by preconditions and selection conditions, while constraint results appear alongside but independently.

The CU50 trace is your most powerful debugging tool for both LO-VC and AVC. Activate it early, use it often, and always compare traces before and after changes. Most dependency bugs can be found and fixed in under 30 minutes if you follow a systematic trace-first approach.

Master VC Debugging

The **SAP VC for Beginner** book dedicates an entire chapter to dependency debugging with real-world examples and trace comparison techniques.

Get the Book — $9.99

Comments & Danmaku

Leave a comment — it flies across the page as danmaku!