TRY.
DATA(messsage_handler) = NEW cl_hrpa_message_list( ).
cl_hrpa_masterdata_enq_deq=>enqueue_by_pernr( tclas = cl_hrpa_tclas=>tclas_employee
pernr = 1
message_handler = messsage_handler ).
cl_hrpa_masterdata_enq_deq=>dequeue_by_pernr( tclas = cl_hrpa_tclas=>tclas_employee
pernr = 1 ).
CATCH cx_hrpa_violated_assertion.
ENDTRY.
Category: HR
[HR] Buchungsbelege anzeigen/analysieren
Hilfreiche Reports:
- SAPMPCP0 – Buchungsläufe bearbeiten (TCode PCP0)
- H99CWTR0 – Lohnarten Reporter
- RPCIP_DOCUMENT_ANALYSE – Buchungsbelege analysieren
- RPCIPD00_FRAME – Details zu Belegzeilen anzeigen
Einige relevante Tabellen:
- PPDHD – Überleitung FI/CO: Kopf des Belegs
- PPDIT – Überleitung FI/CO: Zeilen des HR-Zwischenbelegs
- PPDIX – Überleitung FI/CO: Indextabelle der HR-Zwischenbelege (Verknüpfung zwischen PPDIT und PPOIX)
- PPDST – Überleitung FI/CO: Substituierte Kontierungsobjekte
- PPOIX – Index Abrechnungsergebniszeile -> Buchungszeile
- PPOPX – Index alte <-> neue Belegzeile für ‘P’-Ergebnisse
- PEVST – Abrechnungsauswertungsläufe
- PEVAT – Attribute von Auswertungsläufen
- PEVSH – Historie von Abrechnungsauswertungsläufen (STATUS = 40 Überleitung an FI)
Die Klasse CL_DOCUMENT_ANALYSE hilft die Verknüpfung der Tabellen zu verstehen

[HR] Zeiterfassung: Kollisionsprüfung aktivieren
SPRO → Personalmanagement → Employee-Self-Service (SAPUI5) → Arbeitszeiten → Arbeitszeiten erfassen → Erfassungsprofile einrichten


[ABAP] Validate pernr
DATA ls_return TYPE bapireturn.
CALL FUNCTION 'BAPI_EMPLOYEE_CHECKEXISTENCE'
EXPORTING
number = 99999999
IMPORTING
return = ls_return.
IF ls_return-type = 'E'.
MESSAGE ls_return-message TYPE ls_return-type.
ENDIF.
On newer systems there is also class CL_HRPA_MAINTAIN_EMPLOYEE with method PERSONNEL_NUMBER_EXISTS.
Or class CL_HRPA_MAINTAIN_EMPLOYEE_UTIL and method EXIST_EMPLOYEE.
[HR] Abwesenheiten (IT2001) – Anzeige Kontingentabtragungen
Bei einer Abwesenheit wie z.B. Urlaub, die über eine Monatsgrenze oder über einige Feiertage hinweg geht, kann es hilfreich sein, die konkreten Abtragungen einzusehen, um zu verstehen, welche Tage in dem Zeitraum denn wirklich Urlaub waren.
Dazu einfach die Abwesenheit öffnen in der PA20 und auf Springen → Abtragungen (Shift+F8) gehen.


Man kann die Kontingentabtragung auch für das komplette Kontingent eines Jahres einsehen via IT2006.
Die zugehörige Datenbanktabelle ist PTQUODED. Um die Abträge für eine bestimmte Abwesenheitsart zu selektieren, muss noch ein JOIN auf die PA2001 über die DOCNR gemacht werden. Zumindest ist das der einzige Weg, den ich herausfinden konnte. 🙂
SELECT SUM( a~quode )
FROM ptquoded AS a
JOIN pa2001 AS b
ON a~pernr = b~pernr
AND a~docnr = b~docnr
INTO DATA(urlaubsabtrag)
WHERE a~pernr = pernr-pernr
AND a~datum BETWEEN pn-begda AND pn-endda
AND b~subty = 0100. " Abwesenheitsart, welche Selektiert werden soll
[HR] OM – Besetzungsplan (Struktur)
Da ich nur selten mit dem OM arbeite, vergessen ich immer wieder, wie man das OM “umdreht”, wenn man eine Person ausgewählt hat. Also die Anzeige von P – S – O umkehrt auf O – S – P.
Dabei ist es total einfach! Die Org. Einheit markieren und links oben in der Toolbar auf den Dropdown Button (Springen) gehen und Besetzungsplan (Struktur) auswählen und man erhält die gewünschte Ansicht.

[HR] A1-Meldeverfahren
Übersicht
Gute Zusammenfassung: https://www.iprocon.de/abbildung-des-a1-meldeverfahrens-in-sap-hcm/
2682093 – Informationen zur Umsetzung des A1-Meldeverfahrens im SAP-System (siehe auch das PDF im Hinweis)
2730927 – A1-Verfahren: Hilfestellung zum Customizing
2841779 – A1-Verfahren: ESS-Szenario (Web-Dynpro ABAP) (Paket PAOC_ESS_A1_DE)
Die Datenerfassung der Antragsdaten erfolgt im Infotyp: 0700 (Elektronischer Datenaustausch)
Subtypen:
- DXA1 (A1: Antrag Entsendebescheinigung)
- DXAV (A1: Antrag Ausnahmevereinbarung)
Reports zur Erstellung der Meldungen und der Meldedateien:
- Personal → Personalabrechnung → Europa → Deutschland → Folgeaktivitäten → Periodenunabhängig → Abrechnungszusatz → A1-Meldeverfahren → Ausgangsmeldungen
Reports zur Verarbeitung der Eingangsmeldungen:
- Personal → Personalabrechnung → Europa → Deutschland → Folgeaktivitäten → Periodenunabhängig → Abrechnungszusatz → A1-Meldeverfahren → Eingangsmeldungen
Behördenkommunikation (B2A): Transaktion PB2A
- Personal → Personalabrechnung → Europa → Deutschland → Folgeaktivitäten → Periodenunabhängig → Behördenkommunikation (B2A) → B2A-Manager
Hilfreiche Entwicklungsobjekte
Paket: P01S
Reports:

Klassen:

Für mich hilfreich waren folgenden Klassen:
- CL_HRPAYDE_A1_NOTIF (Klasse für A1-Meldungen)
- CL_HRPAYDE_A1_NOTIF_DISPLAYER (ALV-Ausgabe für A1-Meldungen)
- CL_HRPAYDE_A1_ALV_EVNT_HANDLER (Ereignisbehandler für A1-spezifische Ereignisse)
PDFs der A1-Meldungen von Datenbank lesen
*&---------------------------------------------------------------------*
*& Tabellen A1-Meldeverfahren:
*& P01A1_STAT - A1-Verfahren: Verwaltungstabelle
*& P01A1_RAWDATA - A1-Verfahren: Rohdaten einer Meldung
*&---------------------------------------------------------------------*
GET peras.
SELECT * INTO TABLE @DATA(lt_p01a1_stat) FROM p01a1_stat
WHERE pernr = @pernr-pernr
AND mdtyp = '2'
AND status = '23'
AND mzbeg <= @pn-endda
AND mzbeg >= @pn-begda.
LOOP AT lt_p01a1_stat INTO DATA(ls_p01a1_stat).
SELECT SINGLE * INTO @DATA(ls_p01a1_rawdata) FROM p01a1_rawdata
WHERE guid = @ls_p01a1_stat-guid
AND lfdnr = ( SELECT MAX( lfdnr ) FROM p01a1_rawdata WHERE guid = @ls_p01a1_stat-guid ). "höchste lfdnr nehmen
DATA(pdf_xstring) = ls_p01a1_rawdata-rawdata.
ENDLOOP.
[ABAP] Read attendance/absence quotas
When searching for a way to select quotas without doing a manual select, I found the following class is the Fiori odata packages.
DATA pernr TYPE pernr_d VALUE 1.
DATA(time_accounts) = cl_hcmfab_att_abs_bl_apis=>get_instance( )->read_time_accounts( iv_pernr = pernr
iv_begda = sy-datum
iv_endda = sy-datum ). "iv_endda is never used!
cl_demo_output=>display( time_accounts ).
But although there is an obligatory iv_endda parameter, it is never used inside of method read_time_accounts. Instead, there is some logic which checks for a T77S0 Parameter, and it will use either highdate or begda as endda value.

IMO, it would have made sense to mark iv_endda as optional, so it would be downward compatible and the parameter could be omitted on newer releases. Now it is a bit misleading.
However, if you look inside the method read_time_accounts you’ll find another class that is used to read the quotas. The names of the result fields are slightly different, but at least the endda is used in this case.
cl_pt_arq_timeaccounts=>get_instance( )->get_time_accounts( EXPORTING im_pernr = pernr
im_begda = sy-datum
im_endda = sy-datum
IMPORTING ex_timeaccounts = DATA(time_accounts) ).


