Tips and Tricks for the ABAP® Programming Language
ZHR0001 – Reading of HR organizational data
Reading of InfoType 0001 and translating the key figures to text.
ABAP™-Source-Code
You can copy and paste the source code directly into the ABAP™-Workbench.
REPORT ZHR0001.
*
********************** HEADER **************
*
* Copyright (c) 2001 by xxxx xxx, 44318 Anywhere, http://xxxxx
* or: Copyright (c) 2001 by X.X. from X.
*
* You can use or modify this report for your own work as long
* as you don't try to sell or republish it.
* In no event will the author be liable for indirect, special,
* Incidental, or consequental damages (if any) arising out of
* the use of this report.
*//////////////////////////////////////////////////////////////////////*
* Append your coding here ...
TABLES: PERNR, T500P, T001P, PA0001, PA0003, PA0006, CSKT, T513S,
PA0002, T503T, PA0008.
INFOTYPES: 0000, 0001, 0002, 0006, 0016, 0008, 0007.
DATA: BEGIN OF TAB OCCURS 50,
BUKRS LIKE P0001-BUKRS,
KOSTL LIKE P0001-KOSTL,
TXT3(25),
PERNR LIKE P0001-PERNR,
NAME(50),
TXT1(25),
TXT2(25),
PK(25),
TXT4(25),
GEBTG(10),
STRAS LIKE P0006-STRAS,
PSTLZ LIKE P0006-PSTLZ,
ORT01 LIKE P0006-ORT01,
EINDT(10),
SACHA LIKE P0001-SACHA,
SCHKZ LIKE P0007-SCHKZ,
BSGRD(6),
TRFGB LIKE P0008-TRFGB,
TRFGR LIKE P0008-TRFGR,
* sumbb like q0008-sumbb,
* anzahl(2) type p value 1, " Anzahl der selektierten MA
END OF TAB.
DATA: BEGIN OF TAB2 OCCURS 50,
BUKRS LIKE P0001-BUKRS, "Buchungskreis
KOSTL LIKE P0001-KOSTL, "Kostenstelle
TXT3(25), "Text Kostenstelle
PERNR LIKE P0001-PERNR, "Personalnummer
NAME(50), "Name
TXT1(25), "Text Personalbereich
TXT2(25), "Text Personalteilbereich
PK(25), "Vertragsart
TXT4(25), "Text Stelle
GEBTG(10), "Geburtsdatum
STRAS LIKE P0006-STRAS, "Strasse
PSTLZ LIKE P0006-PSTLZ, "Postleitzahl
ORT01 LIKE P0006-ORT01, "Wohnort
EINDT(10), "Eintrittsdatum IT 0016
SACHA LIKE P0001-SACHA, "Sachbearbeiter Abrechnung
SCHKZ LIKE P0007-SCHKZ, "Arbeitszeitplan
BSGRD(6), "Beschäftigungsgrad
TRFGB LIKE P0008-TRFGB, "Tarifgebiet
TRFGR LIKE P0008-TRFGR, "Tarifgruppe
* sumbb like q0008-sumbb, "Summe Basisbezüge
* anzahl(3),
END OF TAB2.
DATA: BEGIN OF FIELDNAMES OCCURS 20, " Für Excel-Tabelle, 20 Spalten
TEXT(60), TABNAME(10), FIELDNAME(10), TYP,
END OF FIELDNAMES.
DATA: COMPANYCODE LIKE HRCA_COMPANY-COMP_CODE,
COMPANYTEXT LIKE HRCA_COMPANY-COMP_NAME,
PK(25).
* parameter ------------------------------------------------------
PARAMETERS:
P_LISTE(1) TYPE C DEFAULT 'J', "Ausgabe Excel/Word
P_GESCH(1) TYPE C DEFAULT '*', "Geschlecht
P_SORT(1) TYPE C DEFAULT 'J'. "Sort nach Kostst
* initialization -------------------------------------------------
INITIALIZATION.
RP-SEL-EIN-AUS-INIT. "Status Austritt
PNPPERNR-LOW = '1'. "Feld Persnr vorbesetzen mit 1
APPEND PNPPERNR.
PNPTIMED = 'D'. "Stichtag heute
GET PERNR.
* Selektion des letzten gueltigen Arbeitsplatzsatzes ===================
RP_PROVIDE_FROM_LAST P0001
SPACE PN-BEGDA PN-ENDDA.
MOVE-CORRESPONDING P0001 TO TAB.
* endprovide.
* Ceck des Geschlechts =================================================
IF P_GESCH EQ '*'.
CHECK P0002-GESCH EQ '1' OR P0002-GESCH EQ '2'.
ENDIF.
IF P_GESCH EQ 'M'.
CHECK P0002-GESCH EQ '1'.
ENDIF.
IF P_GESCH EQ 'W'.
CHECK P0002-GESCH EQ '2'.
ENDIF.
* Selektieren der Personalnummer =======================================
SELECT * FROM PA0001
WHERE PERNR EQ PERNR-PERNR.
ENDSELECT.
* Selektieren der MA mit Abrechnung ====================================
SELECT * FROM PA0003
WHERE PERNR EQ PERNR-PERNR.
ENDSELECT.
CHECK PA0003-ABRSP NE 'X'. " Abrechnung gesperrt
* Selektieren des Textes des Personalbereiches =========================
SELECT * FROM T500P
WHERE PERSA EQ PA0001-WERKS. " Personalbereich
ENDSELECT.
TAB-TXT1 = T500P-NAME1.
* Selektieren des Textes des Personalteilbereiches =====================
SELECT * FROM T001P
WHERE BTRTL EQ PA0001-BTRTL. " Personalteilbereich
ENDSELECT.
TAB-TXT2 = T001P-BTEXT.
* Selektieren des Textes der Kostenstelle ==============================
SELECT * FROM CSKT
WHERE KOSTL EQ PA0001-KOSTL. " Kostenstelle
ENDSELECT.
TAB-TXT3 = CSKT-KTEXT.
* Selektieren der Stelle ===============================================
SELECT * FROM T513S
WHERE STELL EQ PA0001-STELL. " Stellenbezeichnung
ENDSELECT.
TAB-TXT4 = T513S-STLTX.
* Selektieren der Vertragsart ==========================================
SELECT * FROM T503T
WHERE PERSK EQ PA0001-PERSK. " Vertragsart
ENDSELECT.
TAB-PK = T503T-PTEXT.
* Selektieren des Namens ===============================================
MOVE P0002-NACHN TO TAB-NAME. " Name
MOVE P0002-VORNA TO TAB-NAME+25.
CONDENSE TAB-NAME.
* Selektieren des Geburtsdatum =========================================
WRITE P0002-GBPAS TO TAB-GEBTG. " Geburtsdatum
* Selektieren der Strasse ==============================================
WRITE P0006-STRAS TO TAB-STRAS. " Strasse
* Selektieren der PLZ ==================================================
WRITE P0006-PSTLZ TO TAB-PSTLZ. " Postleitzahl
* Selektieren des Ortes ================================================
WRITE P0006-ORT01 TO TAB-ORT01. " Wohnort
* Selektieren des Eintrittsdatums ======================================
WRITE P0016-EINDT TO TAB-EINDT. " Eintrittsdatum IT 0016
* Selektieren des Sachbearbeiters ======================================
WRITE P0001-SACHA TO TAB-SACHA. " Sachbearbeiter Abrechnung
* Selektieren des Arbeitszeitplanes ====================================
WRITE P0007-SCHKZ TO TAB-SCHKZ. " Arbeitszeitplan
* Selektieren des Beschäftigungsgrades =================================
SELECT * FROM PA0002 WHERE PERNR EQ PERNR-PERNR.
ENDSELECT.
SELECT * FROM PA0008 WHERE PERNR EQ PERNR-PERNR.
ENDSELECT.
WRITE P0008-BSGRD TO TAB-BSGRD. " Beschäftigungsgrad
* Selektieren des Tarifgebiets =========================================
WRITE P0008-TRFGB TO TAB-TRFGB. " Tarifgebiet
* Selektieren der Tarifgruppe ==========================================
WRITE P0008-TRFGR TO TAB-TRFGR. " Tarifgruppe
* Selektieren der Kostenstelle =========================================
WRITE P0001-KOSTL TO TAB-KOSTL. " Kostenstelle
* Selektieren der Summe Basisbezüge ====================================
* write q0008-sumbb to tab-sumbb. " Summe Basisbezüge
COLLECT TAB.
* Verarbeitung am Ende der Datenselektion
END-OF-SELECTION.
SORT TAB. " sortieren von Tab
LOOP AT TAB.
AT NEW BUKRS.
COMPANYCODE = TAB-BUKRS.
CALL FUNCTION 'HRCA_COMPANYCODE_GETDETAIL'
EXPORTING
COMPANYCODE = COMPANYCODE
LANGUAGE = SY-LANGU
IMPORTING
COMP_NAME = COMPANYTEXT
* CITY =
* COUNTRY =
* CURRENCY =
* LANGU =
* CHRT_ACCTS =
* FY_VARIANT =
* FI_MANAGEMENTAREA =
* JURISDICTION =
* RATE_DEVIATION =
* ADDRESS =
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
CLEAR COMPANYTEXT.
WRITE: / 'Text konnte nicht bestimmt werden'(001).
ENDIF.
ENDAT.
ENDLOOP.
* Druckoption ==========================================================
IF P_LISTE EQ 'J'.
PERFORM BASIC_LIST.
ELSE.
PERFORM TAB-ZEILE.
ENDIF.
*-----------------------------------------------------------------
* Drucken der Zeile
FORM TAB-ZEILE.
IF P_SORT EQ 'J'.
SORT TAB BY KOSTL.
ELSE.
SORT TAB BY PERNR.
ENDIF.
LOOP AT TAB.
WRITE: /20 TAB-BUKRS,'*', TAB-KOSTL,'*', TAB-TXT3,'*',
TAB-PERNR,'*', TAB-NAME,'*',
TAB-TXT1,'*', TAB-TXT2,'*', TAB-PK,'*', TAB-TXT4,'*',
TAB-GEBTG DD/MM/YYYY,'*', TAB-STRAS,'*', TAB-PSTLZ,'*',
TAB-ORT01,'*', TAB-EINDT DD/MM/YYYY, '*', TAB-SACHA,'*',
TAB-SCHKZ,'*', TAB-BSGRD,'*', TAB-TRFGB,'*', TAB-TRFGR.
ULINE.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
* FORM BASIC_LIST *
*---------------------------------------------------------------------*
FORM BASIC_LIST.
IF P_SORT EQ 'J'.
SORT TAB BY KOSTL.
ELSE.
SORT TAB BY PERNR.
ENDIF.
LOOP AT TAB.
MOVE-CORRESPONDING TAB TO TAB2.
APPEND TAB2.
ENDLOOP.
PERFORM SPALTEN_UEB. "Spaltenueberschrift
CALL FUNCTION 'HR_DISPLAY_BASIC_LIST'
EXPORTING
BASIC_LIST_TITLE = SY-TITLE
FILE_NAME = 'ZP270002'
HEAD_LINE1 = 'Organisatorische Zuordnung'
* HEAD_LINE2 = ' '
* FOOT_NOTE1 = ' '
* FOOT_NOTE2 = ' '
* FOOT_NOTE3 = ' '
* lay_out = 0
* DYN_PUSHBUTTON_TEXT1 =
* DYN_PUSHBUTTON_TEXT2 =
* DYN_PUSHBUTTON_TEXT3 =
* DYN_PUSHBUTTON_TEXT4 =
* DYN_PUSHBUTTON_TEXT5 =
* DYN_PUSHBUTTON_TEXT6 =
* DATA_STRUCTURE = ' '
* HEAD_LINE3 = ' '
* HEAD_LINE4 = ' '
* CURRENT_REPORT =
* LIST_LEVEL = ' '
* ADDITIONAL_OPTIONS = ' '
* WORD_DOCUMENT =
* IMPORTING
* RETURN_CODE =
TABLES
DATA_TAB = TAB2
FIELDNAME_TAB = FIELDNAMES
* SELECT_TAB =
* ERROR_TAB =
EXCEPTIONS
DOWNLOAD_PROBLEM = 1
NO_DATA_TAB_ENTRIES = 2
TABLE_MISMATCH = 3
PRINT_PROBLEMS = 4
OTHERS = 5.
ENDFORM.
*---------------------------------------------------------------------*
* Spaltenueberschriften fuer EXCEL-Tabelle
*---------------------------------------------------------------------*
FORM SPALTEN_UEB.
PERFORM INIT_FIELDNAMES USING 'Bukr ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Kostst ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Kosttext ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Persnr ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Name ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'PB ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'PTB ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Vertragsart' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Stelle ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Geburtsdatum' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Strasse ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'PLZ ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Ort ' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Eintrittsdatum' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Sachbearbeiter' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Arbeitszeitplan' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Beschäftigungsgrad' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Tarifgebiet' ' ' ' ' SPACE.
PERFORM INIT_FIELDNAMES USING 'Tarifgruppe' ' ' ' ' SPACE.
* perform init_fieldnames using 'Summe Basisbez.' ' ' ' ' space.
PERFORM INIT_FIELDNAMES USING ' ' ' ' ' ' SPACE.
ENDFORM.
*&---------------------------------------------------------------------*
* Fuellen der Strukturtabelle fieldnames. *
*----------------------------------------------------------------------*
* --> field1, field2, field3, field4.
*----------------------------------------------------------------------*
FORM INIT_FIELDNAMES USING FIELD1 FIELD2 FIELD3 FIELD4.
FIELDNAMES-TEXT = FIELD1.
FIELDNAMES-TABNAME = FIELD2.
FIELDNAMES-FIELDNAME = FIELD3.
FIELDNAMES-TYP = FIELD4.
APPEND FIELDNAMES. CLEAR FIELDNAMES.
ENDFORM. " INIT_FIELDNAMES
