PROJ table — PROJ - Project Definition Header Table
PROJ stores one row per project definition, the top-level header of a Project System hierarchy. It holds the external project ID, the internal number, organizational assignment such as company code and controlling area, the person responsible, and the object number used for status management. It does not hold WBS element data, cost, or budget figures - those sit in PRPS and the CO/budget tables underneath.
This page covers the PROJ table, the project definition header in SAP Project System, including what fields it actually carries versus what people assume it carries. It focuses on the diagnostic patterns that come up when a project cannot be found, appears with the wrong status, or reports incorrect organizational data, and on the joins consultants actually write against WBS and budget tables.
Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,209 words
What it stores
One row in PROJ represents one project definition, the single header node that sits above the WBS element hierarchy for a project. It is not an individual WBS element (that is PRPS) and not a network or activity. PROJ carries the organizational assignment for the whole project - company code, controlling area, plant - the person responsible, the project type and profile, and the object number that ties the project definition into status management and into the CO object framework. Anything that is genuinely project-wide, the external number people search on, the profile that drives which checks and fields apply, the responsible person, lives here. Cost line items, budget figures, dates for individual work packages, and the hierarchy structure itself are stored in separate tables that reference this one.
Key fields
- MANDT - client
- PSPID - the external project definition ID, the human-readable number typed into the project builder
- PSPNR - internal number of the project definition, used as the stable join key to WBS elements and status objects, never changes even if PSPID is renamed
- OBJNR - object number, links the project definition into status management and into CO
- WERKS - plant assigned at project definition level
- PBUKR - company code assigned at project definition level
- KOKRS - controlling area assigned at project definition level
- VERNR - personnel number of the person responsible for the project
- ERNAM / ERDAT - user and date the project definition was created
- AENAM / AEDAT - user and date of the last change to the project definition
How it joins the data model
- PRPS-PSPHI = PROJ-PSPNR (every WBS element belongs to exactly one project definition, pointed to by PSPHI)
- PRHI holds the hierarchy pointers used to walk from a WBS element up through its parents to the project definition
- PROJ-OBJNR = JEST-OBJNR (system and user status for the project definition is read through the object number, not stored as text on PROJ itself)
- PROJ-OBJNR joins to budget tables such as those carrying overall and annual budget values, since budgeting and availability control key on the object number of the project definition or WBS element
- PROJ-OBJNR joins to CO planning line item tables that carry plan data against the project object
How to read it safely
PROJ is a low-volume table relative to PRPS, roughly one row per project versus many WBS elements per project, so a full scan is rarely the performance problem people fear. Always restrict on MANDT first in any manual selection, then on PSPID if the search is user-driven or PSPNR if the query originates from a WBS element already resolved elsewhere. PSPID is a character field and is frequently padded or entered inconsistently with leading characters or different casing, so a wildcard search on PSPID is safer than an exact match when chasing a reported project number. Do not filter mass reports directly on PBUKR or KOKRS without also checking whether those values are inherited correctly down the hierarchy in the customer's configuration.
How to prove it in the data
Symptom: a project manager insists project Z-100 exists but the project builder returns nothing. Select PROJ where PSPID equals Z-100. No row returned means the project definition was never saved in this client, or exists under a different external ID than the one being searched. A row returned means the project exists; take its OBJNR and check the status object for a deletion flag or a locked status. A project that is deletion-flagged or archived still has a PROJ row in some phases of the archiving process but is excluded from standard reporting, which looks identical to never-created unless the status is actually checked.
ECC vs S/4HANA
PROJ continues to exist in S/4HANA as the project definition table and has not been observed replaced by a compatibility view in the way several FI and CO tables were. The underlying structure of classic Project System, PROJ, PRPS, and the hierarchy tables, is essentially unchanged. What has changed around it is the front end: newer project management scenarios lean on Fiori apps and APIs sitting on top of the same tables rather than replacing them, so a table-level investigation in PROJ still gives an accurate picture of project definition data on S/4HANA.
Common pitfalls
- Assuming PROJ carries cost or budget figures because it is the project header. It does not. Actual costs, commitments, and budget values live in CO tables and in dedicated budget tables keyed on the object number, not in PROJ.
- Joining custom reports on PSPID instead of PSPNR. PSPID is the display value and can be part of a renumbering or copy exercise; PSPNR is the permanent key. Reports built on PSPID silently drop or duplicate rows once a project has been renamed.
- Treating the WBS hierarchy under a project as static. PSPHI on individual WBS elements can be repointed during reorganizations, so a report that cached a PSPNR-to-hierarchy mapping can go stale without anyone changing PROJ itself.
- Reading project status from a text field on PROJ. There is no plain-text status field to filter on; status comes from the status management tables through OBJNR, and skipping that join produces reports that miss deletion flags or locked projects.
- Concluding a project was deleted just because PROJ returns no row. It may instead have been archived, which removes the PROJ and PRPS rows together and looks identical in a simple select to a project that was never created.
- Assuming company code or controlling area on PROJ applies uniformly to every WBS element beneath it. In most configurations it is inherited, but pulling PROJ-level organizational fields for cost attribution instead of checking the WBS element itself can misattribute figures in mixed-assignment setups.
Whose problem this is
Master data questions on PROJ, why a project is missing, misnumbered, or shows the wrong responsible person, sit with whoever administers Project System configuration and master data, typically the PS functional consultant. Organizational assignment fields such as company code and controlling area are a joint question between PS and FI or CO configuration owners. Archiving-related disappearances are a basis or data management question, not a functional one, and should be routed there before anyone assumes data loss.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tables/projERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.