QPCD table — QPCD Table - QM Catalog Codes
QPCD holds the master record for a single code within a QM catalog code group - the combination of catalog type, code group and code that gets assigned as a defect type, cause, task or usage decision on inspection lots and quality notifications. The descriptive text for the code lives separately in QPCT, not in QPCD itself.
QPCD is the code-level master table underneath the QM catalog structure, sitting below code groups (QPGR) and above the language-dependent texts (QPCT). This page covers what a row actually represents, how it joins into the notification and inspection tables that consume the codes, and the recurring mistake of treating a missing or locked code as a data-corruption problem when it is usually a configuration or authorization issue.
Published 16 Sept 2026· 1,151 words
What it stores
One row in QPCD represents a single code defined within a code group of a QM catalog - for example a specific defect type code inside the code group used for surface defects, or a specific usage decision code inside the code group used for lot disposition. The row is identified by catalog type, code group and the code itself, and it carries administrative and status information for that code, such as who created or last changed it and whether it is locked or flagged for deletion. QPCD does not carry the human-readable description of the code - that lives in QPCT - so QPCD alone tells a consultant that a code exists and is usable, not what it means to a user reading a notification screen.
Key fields
- MANDT - client
- KATART - catalog type, identifies which QM catalog the code group belongs to (defect type, cause, task, usage decision, and so on depending on configuration)
- CODEGRUPPE - code group, groups related codes under one catalog type
- CODE - the individual code value being defined
- ERNAM - user who created the code record
- ERDAT - date the code record was created
- AENAM - user who last changed the code record
- AEDAT - date of the last change
How it joins the data model
- QPCD-KATART = QPGR-KATART and QPCD-CODEGRUPPE = QPGR-CODEGRUPPE, linking a code back to its owning code group
- QPCD-KATART = QPCT-KATART, QPCD-CODEGRUPPE = QPCT-CODEGRUPPE, QPCD-CODE = QPCT-CODE, bringing in the language-dependent short text for the code
- QPCD-KATART = QASE-KATART, QPCD-CODEGRUPPE = QASE-CODEGRUPPE, where a selected set restricts which codes are actually offered for a given inspection characteristic or notification field
- Defect, cause and task item tables such as QMFE, QMUR and QMMA carry their own catalog type, code group and code fields that are expected to match a valid row in QPCD; a code recorded on a notification item that has no corresponding QPCD row indicates the code was deleted or reclassified after the item was created
- QAVE, the usage decision table, references catalog and code group and code in the same way when the usage decision code itself is checked against the catalog
How to read it safely
Always restrict by client and, immediately after that, by catalog type before touching code group or code - catalog type is the field that actually narrows the table, since the same code group number can exist independently under different catalog types with completely different meanings. Never scan QPCD by code alone across catalog types; a defect code '10' and a cause code '10' are unrelated rows that happen to share a code value. Because this is a configuration table maintained by a handful of quality engineers, it is small compared to the transaction tables that reference it, so a full unrestricted read is usually harmless, but it is still worth filtering by catalog type and code group to keep the result readable when checking a specific code.
How to prove it in the data
Symptom: a user reports that a defect code they expect to see on a quality notification is missing from the dropdown. Select QPCD where KATART equals the defect type catalog, CODEGRUPPE equals the relevant code group, and CODE equals the missing code. If no row comes back, the code was never created or was deleted at that catalog level. If a row exists but the code still does not appear on screen, check QASE for the same catalog type and code group - the code exists in the catalog but has been excluded from the selected set assigned to that notification type or inspection characteristic.
ECC vs S/4HANA
QPCD carries forward into S/4HANA unchanged as part of the classic QM catalog structure; the catalog, code group and code model was not touched by the broader S/4HANA data model simplification that affected other quality tables. Catalog maintenance in S/4HANA still uses the same underlying tables and the same catalog-type-based logic, and no CDS compatibility view is required to read it in the way older transactional tables sometimes need. Consultants moving from ECC will find QPCD behaves identically.
Common pitfalls
- Treating a missing code on a notification screen as a QPCD data problem when the real cause is almost always the selected set in QASE excluding that code for the specific catalog profile in use, not the code being absent from the catalog itself
- Assuming a code group number is globally unique; the same code group number can be reused under different catalog types for entirely different purposes, so any query that omits KATART is comparing unrelated data
- Reading QPCD for the description of a code and finding nothing usable, because the text sits in QPCT keyed by language - a query without a language restriction against QPCT, or one run in the wrong language, will look like a missing description when the code itself is fine
- Deleting or locking a code directly in QPCD (or through catalog maintenance) without checking whether it is already used on open inspection lots or notifications, which leaves historical documents referencing a code that can no longer be selected on new documents, causing confusion during audits when the code appears 'inactive' but is still attached to old records
- Assuming a code flagged for deletion has been physically removed from the table; the deletion indicator is a status flag, and the row remains in QPCD and continues to satisfy joins from historical transaction data
Whose problem this is
The QM functional consultant or quality engineer responsible for catalog configuration owns changes to QPCD, since codes are created and maintained through catalog maintenance transactions rather than direct table edits. A data question about why a specific code is missing or locked belongs first with whoever maintains the relevant catalog type, not with basis or an ABAP developer.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tables/qpcdERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.