HR_DME — SAP HCM Data Model Explorer
One transaction that shows every piece of HR data attached to a person or an org object.
Infotypes, payroll clusters, quota deductions and the check tables behind them appear in a single
tree; double-clicking any field jumps to the object it points at. One ABAP report, no database
objects of its own, no customizing.
It replaces a chain of PA20 / PA30 / PP01 / PC_PAYRESULT / SE16 round-trips with one screen. Built
on the engine of Simple Data Explorer; this
repository adds the HR-specific collectors and the navigation plugins.
Version: beta 0.1.10.10 · RU write-up on the author's blog
Table of contents
1. What it does
Given an object type and an object ID, the report scans the infotype directory (T777D) and reads
every infotype table that actually has records for that object in the selected validity period. The
result is a tree of "what data exists for this person/object", with record counts, instead of a
guess-and-check tour of transactions.
| |
|---|
| Reads | PA infotypes (PA*), PD infotypes (HRP*), payroll directory and WPBP, quota deductions, assignment tables |
| Shows | SALV tree of populated tables → ALV viewer per table → RTTI tree for cluster structures |
| Navigates | Foreign keys, data-element plugins, infotype subtype tables, related PD objects, payroll results |
| Writes | Nothing. The report is read-only |
2. Requirements
- SAP_BASIS 7.40 SP08 or higher — the source uses inline declarations,
VALUE/NEW/COND,
string templates and inline @DATA in Open SQL.
- SAP GUI for Windows. The UI is built from
CL_GUI_* controls in dialog-box containers with
drag & drop; it will not run in Web GUI or as a Fiori tile.
- SAP HCM with PA/PD data.
CL_HRPIQ00CONST is used for the active plan variant default, and
payroll cluster display needs PYXX_READ_PAYROLL_RESULT plus the country-specific
PAY<ISO>_RESULT structure.
3. Installation
- Install abapGit if it is not there yet.
- abapGit → Online → clone
https://github.com/ysichov/HR_DME into a Z package.
- Pull and activate. The repository contains a single executable program,
ZHR_DME — no DDIC
objects, no table entries, nothing to customize.
- Optionally create a transaction code for
ZHR_DME.
4. Running it
4.1 Selection screen
| Field | Meaning |
|---|
P_PLVAR | Plan variant. Defaults to the active one (CL_HRPIQ00CONST=>C_PLVAR_ACTIVE) |
P_OTYPE | Object type — P for person, O/S/C/… for PD objects. F4 from H_T778O, SPA/GPA POT |
P_OBJID | Object ID. F4 calls RH_OBJID_REQUEST for the object type entered above, SPA/GPA PON |
P_BEGDA / P_ENDDA | Validity interval. Defaults to 1800.01.01 – 9999.12.31, i.e. everything |
Press Enter, not F8. ONLI is excluded from the selection-screen status on purpose: the tree
opens from AT SELECTION-SCREEN, so the selection screen stays behind it and you can go straight to
the next object without leaving the report.
4.2 The object tree
The window caption is built from PA0002 — first name, last name, middle name, and the
OTYPE/OBJID you entered. Each leaf is labelled (infotype) infotype text (record count), with
texts taken from T582S for persons and T777T for PD objects.
For object type P the tree has three folders:
| Folder | Contents |
|---|
| Infotypes | Every PA* table from T777D with records for this PERNR in the period |
| Salary data | HRPY_RGDIR (payroll directory), HRPY_WPBP |
| Others | PTQUODED (quota deduction), ASSHR, ASSOB, ASSOB_HR |
For any other object type the tree has one folder, Infotypes, holding every HRP* table from
T777D with records for PLVAR/OTYPE/OBJID in the period.
Double-clicking a node opens the table in a viewer window with PERNR (or OBJID) already applied
as a filter.
5. The table viewer
Every table opens in its own resizable dialog box titled TABNAME - DDIC description. The ALV has a
compact toolbar of its own:
| Button | Effect |
|---|
| ◄ Select-Options | Opens the filter panel: one row per field, sign/option icons, F4 help, context menu, multiple ranges |
| Tech names | Switches column headers between DDIC texts and technical field names |
| Language buttons | Re-reads the column headers in another installed language (first 10 languages of the system) |
| Show empty columns | Hides columns that are initial in every selected row, or brings them all back |
| ►/◄ Toolbar | Appends the standard ALV toolbar (layouts, export, sums, print) to the compact one |
Text tables are joined automatically where DDIC declares one, so key fields show their description
next to the code.
6. Navigation map
Double-clicking a cell is the main navigation gesture. The plugin layer resolves the click in
this order: field-to-field links → field-to-plugin links → data-element links → HRP1001-ADATANR →
DDIC foreign key. The first rule that matches wins.
Data-element links (LCL_PLUGINS=>MT_EL_LINKS):
| Data element | Action |
|---|
PERSNO | Calls PA20 in display mode, positioned on the infotype/subtype/validity of the clicked row |
HROBJID | Calls PP02 via BDC, positioned on the infotype of the clicked row |
LGART | Opens T512W (wage type valuation) filtered to that wage type |
SUBTY | Opens the subtype text table for this infotype (T777D-STYPT/NAMST) |
ITXEX | Reserved for the long-text viewer — currently a stub, see limitations |
Field-to-field links (LCL_PLUGINS=>MT_FIELD_LINKS):
| From | To |
|---|
PA0001-PLANS | HRP1000 for object type S (position) |
PA0001-ORGEH | HRP1000 for object type O (org unit) |
PA0001-STELL | HRP1000 for object type C (job) |
HRP1001-SCLAS / SOBID | The related object — re-filters the current window to the target OTYPE/OBJID |
HRP1002 / HRP1035 / HRP1222 TABNR | The matching HRT1002 / HRT1035 / HRT1222 table part |
PA2006-QUONR ↔ PTQUODED-QUONR | Absence quota ↔ its deduction records |
PTQUODED-DOCNR | PA2001 (the absence that consumed the quota) |
HRPY_RGDIR-SEQNR | The payroll result for that sequence number — see below |
Anything not covered by a rule falls back to the DDIC foreign key: DD_FORKEY_GET supplies the
check table and the key field mapping, and the check table opens pre-filtered. Language and country
grouping are carried over from SY-LANGU and SPA/GPA MOL where the target table has SPRSL /
MOLGA.
7. Payroll clusters
Double-clicking SEQNR in HRPY_RGDIR resolves the employee's country grouping with
RH_PM_GET_MOLGA_FROM_PERNR, translates it to the ISO country code via T500L, builds the
PAY<ISO>_RESULT structure dynamically by RTTI, and reads the cluster through
PYXX_READ_PAYROLL_RESULT. The result is displayed as an RTTI tree — every nested structure and
internal table of the cluster (RT, CRT, WPBP, BT, …) can be expanded and drilled into.
Several clusters can be open side by side, so results from different periods are directly comparable.
8. Linked windows (drag & drop)
Drag a column from one table viewer and drop it on the select-options panel of another. That
creates a live link: the dragged column turns into a button, and from then on selecting a row in the
source window pushes the value into the target's filter and re-reads it.
Dragging a filter row from one select-options panel onto another copies the range and keeps the
two linked — later changes on the source side propagate to the target, which is flagged with an
"inherited" icon. This is how you build a small ad-hoc "report" out of several tables without
writing any code.
9. Known limitations
- SAP GUI for Windows only — control framework, dialog boxes and drag & drop rule out Web GUI.
- No HR authorization check. Infotype data is read with direct
SELECTs, so P_ORGIN,
P_PERNR and friends are not evaluated. Restrict access to the report itself (S_PROGRAM,
a dedicated transaction, authorization group) before letting it out of a sandbox. Payroll clusters
are the exception: PYXX_READ_PAYROLL_RESULT performs its own read check.
- Unfiltered reads are capped at 100 rows. Opening a table with no filter shows the first 100
records by primary key. Add a filter in the select-options panel to read the full set.
ITXEX long-text display is a stub — RUN_TEXT is empty, so clicking a long-text flag does
nothing yet.
HRP1001-ADATANR navigation to the adjacent-data table (T77AR → T77AD) is written but
commented out.
- Time management and business-trip clusters are still on the wish list — of the cluster data only
payroll results and
PTQUODED are collected so far.
- The PD branch (
OTYPE ≠ P) collects HRP* infotypes only; it has no Salary data or Others
folders.
10. Links and license
Related projects by the same author:
External code used:
Author: Yurii Sychov — blog ·
LinkedIn · ysichov@gmail.com
Licensed under the MIT License.