VK12 — VK12 Change Condition Records
VK12 is the SD transaction used to change existing pricing condition records - prices, discounts, surcharges, freight - for a condition type and key combination that was already created via VK11. It cannot create a new key combination; if the exact combination does not already exist as a record, VK12 returns an empty list rather than letting the user add one.
This page covers VK12, the change transaction for SD pricing condition records, and the structural reason users hit an empty selection screen or see changes that do not apply to existing orders. It focuses on the diagnostic sequence for condition record failures: wrong key combination, unretroactive changes, validity overlaps, and scale misreads.
Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,155 words
Purpose
VK12 is the change transaction for condition records - the actual price, discount, surcharge, freight, or tax values sitting behind a condition type and access sequence. The structural fact that explains most confusion: VK12 only changes a record identified by an exact key combination already stored in the generated condition table (an A-table) for that access sequence. It does not let a user create a new combination on the fly. If nobody ever ran VK11 for that specific customer/material/sales-org combination, VK12 shows nothing, and the natural reaction is to assume the transaction is broken or the condition type is missing, when in fact the record simply was never created for that key.
When it is used
VK12 is reached for whenever a price, discount, or surcharge already live in the system needs a new value or a new validity period - annual price increases, freight rate updates, a renegotiated customer rebate. The normal sequence is VK13 to confirm the record and key combination actually exist, then VK12 to change it, reserving VK11 for genuinely new combinations. It sits downstream of the pricing procedure setup in VOV8 and upstream of every sales order (VA01/VA02) and billing document that redetermines or copies pricing. Mass condition changes across many key combinations are typically done through a mass maintenance variant rather than repeated single-record VK12 runs.
How to use it in practice
- Run VK12 and select the condition type (for example PR00, K007, HD00).
- On the selection screen pick the key combination that matches how the record was originally created - customer/material, price list/material, or similar.
- Enter the selection values: sales organization, distribution channel, customer, material, validity period.
- Execute; the system lists matching condition records in the overview or table view.
- Change the amount, percentage, unit, scale, or validity dates as needed.
- If changing a value for a future period, decide whether to delimit the current record with a new From date rather than overwrite the live value.
- Save; the system generates a new condition record number for the changed validity segment and delimits the prior one.
Key data objects
- KONH - condition record header: validity dates and the condition record number KNUMH.
- KONP - condition item data: condition amount or rate, currency, unit, condition type per KNUMH.
- Generated condition tables (A-tables, for example A004 or A305, one per condition table used in the access sequence) - store the key field combination and the pointer KNUMH into KONH/KONP.
- KONM / KONW - scale tables holding quantity or value scale steps when the condition uses scales.
- CDHDR / CDPOS - change documents recording who changed which condition record and when, if change document tracking is active for the object.
How to prove it in the data
Start from the A-table generated for the relevant condition table, filter on the key fields (sales org, customer, material, condition type KSCHL) to get KNUMH. Join KNUMH into KONP to read the current amount, unit, and currency, and into KONH to read DATAB/DATBI validity. Compare KNUMH values before and after the change - a new number for the same key combination confirms the system delimited the old record rather than overwriting it. Cross-check CDHDR/CDPOS filtered by user and date to confirm who made the change and when.
ECC vs S/4HANA
The underlying data model - KONH, KONP, and the generated A-tables per condition table - is unchanged on S/4HANA. VK12 remains fully functional and is still the transaction most consultants reach for during single-record or small-batch changes. S/4HANA also offers a Fiori-based app for managing sales pricing conditions with list-based mass editing, but it operates on the same tables underneath, so the diagnostic approach described here applies regardless of which front end was used to make the change.
Common pitfalls and how to diagnose them
- Empty selection screen: the condition type entered does not match the one actually used on the document, or the key combination selected does not match how the record was created. Confirm the correct condition type and combination in VK13 first before assuming VK12 is broken or the record is missing.
- Change not reflected on existing sales orders: pricing was already determined and stored at order creation time. A VK12 change to the condition record is not retroactive; open orders need explicit repricing (updating the pricing type on the conditions screen) or a new order/quotation to pick up the new value.
- Two conflicting active records for the same key: manual entry of overlapping or gapped validity dates during the change creates either a period with no valid record or two records both technically valid, leading to inconsistent pricing depending on which document date falls where. Check DATAB/DATBI across all KNUMH for the same key combination for gaps or overlaps.
- Scale misread: changing a scale value without checking whether the scale basis is quantity-based or value-based, or entering a from-value that leaves a gap below the first scale step, produces a price that looks wrong only above or below a certain quantity threshold. Verify the scale basis and boundaries in the scale detail screen, not just the header rate.
- Authorization scope: at some sites condition maintenance is restricted by sales organization or condition type, so a user can open VK12 but cannot save a change for certain org-level combinations, producing a silent save failure or an authorization dump. Confirm the authorization object for condition maintenance covers the relevant sales area before assuming the transaction itself is faulty.
Whose problem this is
Functional SD/pricing territory. Ownership sits with the SD or pricing consultant maintaining the condition type and access sequence, not Basis or ABAP, unless the failure traces to an authorization object at the sales-org level. A clean handover includes the condition type, condition table, exact key combination, the KNUMH before and after the change, and a list of any open orders that still show the old price.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tcodes/vk12ERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.