KONV table — Document Pricing Conditions (ECC; Compatibility Interface in S/4HANA)
KONV is the classic ECC persistence structure for document pricing conditions calculated and saved on sales, billing, and purchasing documents. It captures the document-specific pricing snapshot rather than master condition records. In S/4HANA document pricing persistence moved to PRCD_ELEMENTS; KONV is retained as a compatibility-oriented access interface for legacy code rather than the strategic physical store.
This page covers KONV, the SD/O2C table holding document-level pricing condition results, and how to read it without drawing the wrong conclusions from stale, inactive, or header-level rows. It focuses on the joins back to VBAK, VBAP, VBRK, KONP and KONH, and on the recurring mistakes consultants make when treating KONV as a live pricing calculation rather than a stored outcome.
Published 20 Sept 2026· 1,158 words
Esta página ainda não está disponível em português.
What it stores
One row of KONV represents a single pricing condition line as it existed inside one commercial document at the moment that document was priced and saved - one step of the pricing procedure, for one item, in one document. Every sales order and billing document carries a document condition number, KNUMV, and every condition type that fired during pricing (price, discount, surcharge, tax, freight) gets its own row here, tied to the item it applies to and the step number in the pricing procedure that produced it. KONV is a snapshot: it captures the value SAP calculated and stored at save time, not a live recalculation. It does not describe why a price is what it is in general terms; it describes what a specific document actually charged, at what rate, at what step, and for what reason, at the moment it was last priced and saved.
Key fields
The technical key of KONV is the combination of the first four fields below; nothing shorter uniquely identifies a row.
- MANDT - client
- KNUMV - document condition number, links back to the commercial document header (VBAK-KNUMV, VBRK-KNUMV)
- KPOSN - item number inside that document; zero denotes a header-level condition
- STUNR - step number of the pricing procedure at which the condition was calculated
- ZAEHK - counter distinguishing multiple condition rows within the same step
- KSCHL - condition type (e.g. price, discount, tax, freight)
- KRECH - calculation type (percentage, quantity-based, fixed amount)
- KAWRT - condition base value the rate was applied to
- KBETR - the rate as maintained, in whatever unit the condition type uses
- KWERT - the resulting condition value in the currency given by WAERS
- WAERS - currency of that row's condition value
- KNUMH - number of the master condition record in KONP that supplied the rate; blank for manually entered conditions
- KSTEU - condition category/control indicator
- KINAK - inactive indicator; non-blank means the condition was calculated but excluded from the final result
How it joins the data model
Every lookup into KONV starts from the document header, because KNUMV is only known once a document has been saved.
- KONV-KNUMV = VBAK-KNUMV (condition rows belong to this sales order header)
- KONV-KNUMV = VBRK-KNUMV (condition rows belong to this billing document header)
- KONV-KPOSN = VBAP-POSNR (item-level condition ties back to the specific order item, formats permitting)
- KONV-KNUMH = KONP-KNUMH (condition value traces back to the master condition record that generated it)
- KONV-KNUMV = KONH-KNUMV (header-level condition control record shares the same document condition number)
How to read it safely
MANDT restricts by client as normal, but the table itself is large - every priced document leaves several rows behind. Never select from KONV by condition type alone; the same KSCHL recurs across millions of rows for unrelated documents. Always obtain KNUMV from the document header first (VBAK or VBRK), then filter on KNUMV, and add KPOSN if only one item is of interest. Treat KINAK as mandatory in any aggregation: rows with a non-blank KINAK were calculated but excluded from the actual result, and summing KWERT without excluding them overstates totals. For volume price analysis across many documents, use the standard pricing reporting tools rather than ad hoc joins.
How to prove it in the data
Symptom: a discount that should have reduced an invoice line did not. Take the billing document number, read VBRK-KNUMV, then select KONV where KNUMV equals that value, KPOSN equals the item's position number, and KSCHL equals the discount condition type. No row at all means the condition never fired during pricing (determination or a requirement excluded it). A row with KINAK set means it fired but was deactivated - check STUNR and neighboring rows at the same step to see which condition overrode it.
ECC vs S/4HANA
In S/4HANA, PRCD_ELEMENTS is the persistence table for document pricing elements. Legacy KONV access can be supported through compatibility mechanisms, but new custom development should use released pricing CDS or APIs and PRCD_ELEMENTS semantics rather than direct assumptions about the old KONV storage model.
Common pitfalls
- Treating KONV as a live pricing engine: it is a saved snapshot. Changing a rate in the master condition record (KONP) does not alter amounts already stored for existing documents; the document must be re-priced and saved again for the new rate to appear.
- Summing KWERT across all rows for a document without excluding rows where KINAK is set - this counts values that were calculated but explicitly excluded from the final result, inflating totals.
- Ignoring KPOSN = 0: these are header conditions (freight, header discounts) applying to the whole document, not one item. Dropping them from an item-level report loses real value; adding them again at every item duplicates it.
- Assuming KSCHL uniquely identifies a row: the same condition type can appear more than once at different STUNR or ZAEHK values within one document when conditions are copied, split, or recalculated. The real key is the full combination, not the condition type alone.
- Confusing KBETR (the rate as maintained) with KWERT (the actual monetary effect). A percentage discount has a small KBETR and a KWERT that reflects the real currency amount deducted; reading KBETR as the money impact misstates the analysis substantially.
- Expecting a row for every condition type in the pricing procedure: conditions that never triggered because a requirement was not met or no master record matched simply do not appear. Absence in KONV is not by itself proof of a configuration defect.
- Ignoring WAERS on a row-by-row basis: KWERT is in the currency named for that specific row, which is not guaranteed to match the document's header currency for every condition, particularly tax and statistical entries.
Whose problem this is
The SD pricing/configuration consultant owns the pricing procedure and condition determination logic that produces these rows. The order-to-cash functional lead owns whether a specific document priced correctly. Basis is only pulled in for raw table growth or read performance on very high-volume systems. FI/CO gets involved when a condition's accounting relevance, such as revenue account determination, is in dispute.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tables/konvERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.