KONH table — Condition Record Header Table
KONH is the header table for condition records, the master data created by transactions like VK11. One row represents one condition record instance: a condition type valid for a specific validity period, tied to a specific key combination via a generated access table. Actual rates live in KONP; documents copy the resulting value into KONV, not into KONH itself.
KONH holds the header data of pricing condition records maintained through the condition technique, separate from the rates stored in KONP and separate again from the conditions frozen into a sales document in KONV. This page covers how to trace a condition record back to its key combination, why editing KONH never changes an already-priced document, and the recurring mistake of treating master condition data as if it explains what happened on a specific order.
Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,175 words
What it stores
A row in KONH represents one condition record: a specific condition type valid for a specific date range, created against one particular condition table (key combination) such as customer/material or price list/material. It does not itself store the price or the key values (customer number, material number, and so on) or the amount. The key values live in a generated access table named after the condition table number (KOTABNR), and the rate, scale, or percentage lives in KONP, both linked back to KONH by the condition record number KNUMH. KONH is written whenever a condition record is created, changed, or deleted through condition maintenance, regardless of whether the usage is sales pricing, purchasing, output determination, or account determination, because all of these reuse the same condition technique tables.
Key fields
- MANDT - client
- KNUMH - condition record number, the unique key linking KONH to KONP and to the generated key-combination table
- KVEWE - usage of the condition table, distinguishes pricing from output determination, account determination, and other condition technique applications sharing the same table structure
- KOTABNR - number of the condition table used to create the record, tells you which generated access table (Annn) holds the actual key field values
- KAPPL - application, for example V for sales and distribution
- KSCHL - condition type
- DATAB - validity start date of the condition record
- DATBI - validity end date of the condition record
- LOEVM_KO - deletion indicator, a soft delete flag
- ERNAM - user who created the record
- ERDAT - creation date
How it joins the data model
- KONH-KNUMH = KONP-KNUMH to reach the actual rate, scale steps, and currency for the condition record
- KONH-KNUMH is referenced by KONV-KNUMH so a condition line on a live sales or billing document can be traced back to the master condition record that supplied its value at pricing time
- KONH-KOTABNR identifies which generated access table (named Annn, not a fixed identifier) holds the key combination values such as customer, material, or price list number for that KNUMH
- KONH-KAPPL and KONH-KVEWE together determine which application area the record belongs to before comparing it against condition type customizing
How to read it safely
KONH is not small and KNUMH is not something a user knows, so direct selection on KNUMH is rare; the practical entry point is the generated access table for the relevant condition table, filtered on the real key values (customer, material, sales organization), which returns the KNUMH to look up in KONH and KONP. Always restrict on client, and when checking whether a record is currently active, filter on DATAB and DATBI against the date in question rather than just today's date. LOEVM_KO must be checked separately from the validity dates because a deleted record can still fall inside a valid date range. KAPPL and KVEWE should be restricted early since the same KOTABNR values can appear across unrelated condition technique applications.
How to prove it in the data
To confirm whether a price change actually reached the master data: identify the condition table used for the pricing condition type (from customizing of the access sequence), query its generated access table for the customer or material key combination to get KNUMH, then read KONH for that KNUMH to confirm KSCHL, DATAB, DATBI, and LOEVM_KO, and read KONP for the same KNUMH to confirm the rate. If the record shows correctly in KONH and KONP but the order still prices differently, the discrepancy is in KONV on the document, not in master data.
ECC vs S/4HANA
KONH and KONP remain the standard master data tables for classic condition technique pricing in S/4HANA on-premise; VK11, VK12, and VK13 still write and read them the same way as in ECC, and no compatibility view has replaced them for this purpose. Advanced or condition-contract-based pricing scenarios introduced in later S/4HANA capabilities can layer additional objects on top of the same condition technique, but the core KONH/KONP/KONV relationship for standard SD pricing is unchanged.
Common pitfalls
- Treating KONH/KONP as the source of truth for what a document actually charged. A sales order or invoice carries its priced conditions in KONV, fixed at the moment pricing ran; changing or deleting the KONH/KONP record afterward does not touch documents already created, so consultants chasing 'wrong price on this order' by editing master data are solving the wrong problem.
- Assuming a valid, non-deleted KONH record was used just because it exists. Access sequence exclusivity, requirement routines, and condition exclusion groups can skip a technically valid record entirely; its presence in KONH proves the record exists, not that it was ever read.
- Selecting KONH without also checking LOEVM_KO. A soft-deleted record still falls inside its DATAB/DATBI window and will be returned by a naive date-range query.
- Counting KONH rows to count prices. Scale-based conditions produce one KONH header but multiple KONP item rows; any volume or count analysis needs to join to KONP, not stop at KONH.
- Ignoring KVEWE and KAPPL when filtering. The same condition table numbers and KNUMH ranges are shared across pricing, output determination, and account determination, so an unfiltered query can mix unrelated application data.
- Forgetting that time-dependent pricing keeps multiple KONH records for the same key combination and condition type over history. Selecting without a date filter surfaces old, superseded records alongside the current one and gives the impression of a duplicate or conflicting price.
Whose problem this is
Whether a condition record exists, its validity, and its rate is an SD pricing configuration and master data question, owned by the pricing analyst or SD consultant who maintains condition records through VK11/VK12, not by basis or by a generic data team. Discrepancies between master data and what a document actually priced belong to whoever configured the access sequence and pricing procedure, since the explanation usually sits in requirement routines or exclusion settings rather than in the table content itself.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tables/konhERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.