Variant pricing is where SAP VC connects to SD pricing. The configuration engine determines which surcharges apply based on the selected characteristic values, and SAP SD converts them into price adjustments on the sales order.
I've set this up on multiple elevator configurator projects — the pattern is always the same once you understand the three bridges. This guide walks through each one.
Source: V/06 transaction — condition records for variant configuration
How Variant Pricing Works
The flow is straightforward:
- User configures a product in VA01/VA02
- Procedures calculate surcharge values based on characteristic selections
- A pricing reference characteristic maps to SDCOM-VKOND
- The condition technique reads the surcharge and applies it to the sales order price
End-to-End Example: Bike Handlebar Pricing
Suppose you have a bike configurator with a characteristic HD_COLOR (Handlebar Color) with values Black, Silver, and Red. Each color adds a different surcharge. Here's the full setup:
- CT04: Create characteristic
Z_SURCHARGE, CHAR 10, with reference table SDCOM field VKOND - V/06: Create three condition records with condition type VA00: Black → $50, Silver → $30, Red → $75
- CU01: Write a procedure that sets
$SELF.Z_SURCHARGEbased on$SELF.HD_COLOR(procedures are created with CU01 / changed with CU02; CU03 is display-only) - OVKK: Make sure VA00 is in the sales document pricing procedure
When the user selects "Black" in VA01, the surcharge $50 appears automatically in the pricing table. No manual price entry needed.
Setup Steps
1. Create a Pricing Reference Characteristic
Create a characteristic (CT04) that will hold the surcharge key. This characteristic acts as the bridge between VC and SD. Without the correct table/field reference, the SD pricing engine cannot read the value from the configuration.
Set the following in the characteristic:
- Data type: CHAR
- Number of characters: at least 10 (match your condition record key length)
- Reference table: SDCOM
- Reference field: VKOND
A common mistake: developers forget to set the reference table/field, then wonder why the condition record doesn't pick up the value. The characteristic values are there in CU50, but SDCOM-VKOND is how SD reads them — miss the reference and the bridge is broken.
2. Create Condition Records (V/06)
Use transaction V/06 to create condition records for your surcharges. Each condition record maps a surcharge key to a price amount.
Condition type VA00 (Variant Configuration) is the standard type for VC surcharges. It reads the pricing reference characteristic from the configuration and applies the matching condition record amount. You can also use condition type VA01 for percentage-based surcharges, but VA00 covers most use cases.
- Create one condition record per unique surcharge key your VC model will output
- Key length must match your characteristic length
- Amount can be fixed or scale-based (per quantity)
3. Write Procedure Logic (CU01/CU02)
In the procedure, set the surcharge characteristic:
$self.Z_SURCHARGE = 'HD-BLACK' if $self.HD_COLOR = 'Black'
$self.Z_SURCHARGE = 'HD-SILVER' if $self.HD_COLOR = 'Silver'
$self.Z_SURCHARGE = 'HD-RED' if $self.HD_COLOR = 'Red'
The surcharge key becomes the condition record key that SD uses for pricing. Keep your key values short and consistent — I use a prefix convention (HD-, WHL-, FRM-) so I can tell at a glance which component drives the surcharge.
4. Check the Pricing Procedure (OVKK)
This step is often overlooked. The condition type VA00 must exist in the sales document pricing procedure (transaction OVKK). If VA00 is missing from the procedure, the surcharge is calculated by VC but never applied to the order. Open OVKK, find the procedure assigned to your sales document type, and verify VA00 is listed as a step.
Pricing Factor Syntax
For quantity-dependent surcharges (e.g., per-meter cable pricing):
$SET_PRICING_FACTOR ($SELF, ZPRICE_FACTOR, 'Surcharge', 1.25)
This multiplies the condition record amount by the factor. Useful when the same component comes in different sizes and the price scales linearly.
Dependency Group SAP_PRICING
Dependencies tagged with the SAP_PRICING dependency group only execute during pricing calculation, not during interactive configuration. This prevents pricing formulas from running on every mouse click, improving configuration UI responsiveness dramatically.
Set the group in the dependency header (CUKB-KNGRP = 'SAP_PRICING'). On a model with 200+ characteristics, I've seen CU50 response time drop from 12 seconds to under 2 after moving pricing dependencies to this group.
Common Mistakes
- Missing reference table/field: The surcharge characteristic must reference SDCOM-VKOND or SD can't read the price key
- Condition record missing: Every surcharge key your VC model outputs needs a matching V/06 condition record — missing one means $0 price for that variant
- VA00 not in pricing procedure: The surcharge is calculated but never applied; verify in OVKK
- Wrong surcharge type: VA00 for absolute amounts, VA01 for percentages — using the wrong one gives incorrect pricing
- Missing SAP_PRICING group: Without it, pricing formulas fire on every configuration change, slowing down CU50
Summary
Variant pricing connects VC logic to SD pricing through three bridges: a pricing reference characteristic that links to SDCOM-VKOND, V/06 condition records that define price amounts, and procedure logic that sets the surcharge key. Add a fourth — the pricing procedure in OVKK — and you have a complete, reliable pricing setup.
Sources: V/06 transaction (condition records) | SDCOM-VKOND reference characteristic | OVKK pricing procedure