[SAP] – ABAP HR Get Supervisor

ABAP HR – Buat zFunction Mendapatkan atasan sampai Level Tertinggi

Pada sebuah organisasi yang ideal, pasti akan didapatkan jenjang level mulai dari staf sampai GM bahkan direktur (yang akan dicatatkan dalam system).
SAP telah menyediakan untuk maintain position ini sesuai standard yang berlaku, dan teman-teman fungsional SAP-HCM biasanya akan memantain/change dengan menggunakan Transaction Code : PPOME, dan maintain level ini termasuk dalam SubModule : Organisasi Managemen dan Personal Managemen.

Nah, pada transaction SAP terkait dengan organisasi managemen khususnya hierarchy level ini, pada SAP akan disimpan pada table HRP1000 dan HRP1001.
Pada suatu organisasi, hampir pasti diperlukan report ke atasannya, atau send email sesuai dengan hierarchy personelnya untuk mendapatkan siapa saja sih atasannya.

Berikut, adalah main code yang saya buat dan terapkan untuk mendapatkan atasan sampai level top, yang dibungkus dalam function module :

dalam function ini saya akan menitikberatkan pada alur dan get datanya, karena setiap organisasi akan memiliki naming convertion dan pengkodean structure yang berbeda-beda.

Lets Start and code

  • Buat input dan output FM
  • Main Code

FUNCTION zfm_hr_.
*”———————————————————————-
*”*”Local Interface:
*”  IMPORTING
*”     REFERENCE(PERNR) TYPE  PERNR_D
*”  TABLES
*”      PLANS TYPE  ZTT_PLANS
*”———————————————————————-
  DATA : d_pernr  TYPE pernr_d,
         wa_plans TYPE zst_plans,
         d_index  TYPE i.

  CLEAR : d_pernr, wa_p0001, d_index.
  d_pernr = pernr.
  
PERFORM f_get_employee USING d_pernr wa_p0001.

  ADD 1 TO d_index.
  CLEAR : wa_plans.
  
PERFORM f_structtble USING d_index d_pernr wa_p0001-plans CHANGING wa_plans.
  APPEND wa_plans TO plans.

  “Get 1st Supervisor
  IF wa_p0001 IS NOT INITIAL.
    CLEAR : wa_hrp1001_p, wa_hrp1001_h.
    
PERFORM f_get_hrp_pos USING wa_p0001 wa_hrp1001_p.
    
PERFORM f_get_hrp_pernr USING wa_hrp1001_p wa_hrp1001_h.

    ADD 1 TO d_index.
    CLEAR : wa_plans.
    
PERFORM f_structtble_all USING d_index wa_hrp1001_h-sobid wa_hrp1001_h-objid wa_hrp1001_p-sobid CHANGING wa_plans.
    APPEND wa_plans TO plans.
  ENDIF.

  DO 7 TIMES. “Get Next

    CLEAR : d_pernr, wa_p0001.
    d_pernr = wa_hrp1001_h-sobid.
    
PERFORM f_get_employee USING d_pernr wa_p0001.

    “Get Supervisor
    IF wa_p0001 IS NOT INITIAL.
      CLEAR : wa_hrp1001_p, wa_hrp1001_h.
      
PERFORM f_get_hrp_pos USING wa_p0001 wa_hrp1001_p.
      
PERFORM f_get_hrp_pernr USING wa_hrp1001_p wa_hrp1001_h.

      ADD 1 TO d_index.
      CLEAR : wa_plans.
      
PERFORM f_structtble USING d_index wa_hrp1001_h-sobid wa_hrp1001_h-objid CHANGING wa_plans.
      APPEND wa_plans TO plans.

    ELSE.  “untuk case posisi tidak ada holder. 
      CLEAR : wa_hrp1001_p, wa_hrp1001_h.
      “isikan manual.
      SORT plans DESCENDING BY no.
      CLEAR : wa_plans.
      READ TABLE plans INTO wa_plans INDEX 1.
      wa_p0001-plans = wa_plans-plans.
      
PERFORM f_get_hrp_pos USING wa_p0001 wa_hrp1001_p.
      
PERFORM f_get_hrp_pernr USING wa_hrp1001_p wa_hrp1001_h.

      ADD 1 TO d_index.
      CLEAR : wa_plans.
      
PERFORM f_structtble_all USING d_index wa_hrp1001_h-sobid wa_hrp1001_h-objid wa_hrp1001_p-sobid CHANGING wa_plans.
      APPEND wa_plans TO plans.

      “balikkan sort
      SORT plans ASCENDING by no.
    ENDIF.
  ENDDO.

  DELETE plans WHERE pernr = ”..

ENDFUNCTION.

  • Routine ‘Get_Employee’
    Untuk mendapatkan data employee based on Infotype 1
  • Routine ‘F_Structtble’
    Berfungsi sebagai pelengkap data
DATA : index  TYPE zde_index.
  index = p_index.

  CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
    EXPORTING
      input  = index
    IMPORTING
      output = index.

  p_wa_plans-no     = index.
  p_wa_plans-pernr  = p_pernr.
  p_wa_plans-plans  = p_plans.

  SELECT SINGLE plstx
    FROM t528t
    INTO p_wa_plans-plstx
    WHERE sprsl = ‘E’
      AND plans = p_plans.

  SELECT SINGLE cname
    FROM pa0002
    INTO p_wa_plans-cname
    WHERE pernr = p_pernr
      AND endda > sy-datum.

  SELECT SINGLE usrid_long
    FROM pa0105
    INTO p_wa_plans-usrid_long
    WHERE pernr = p_pernr
      AND subty = ‘0010’
      AND endda > sy-datum.

IF p_wa_plans-plans is INITIAL.
     p_wa_plans-plans = p_sobid.
   ENDIF.
  • Routine ‘f_get_hrp_pos’
    Mendapatkan posisi dirinya ‘inputan’ pada table HRP1001
    – Plans plvar dan relat merupakan penghubung untuk position, ini berdasarkan config pada table. Cek dan koordinasikan dengan teman functional.
    – Rsign (A dan B) untuk mode ini saya menggunakan A (bottom up mode).
SELECT  otype
          objid
          plvar
          rsign
          relat
          begda
          endda
          subty
          sobid
    INTO  p_wa_hrp1001_p
    FROM  hrp1001
    WHERE otype EQ c_obj_type
      AND objid EQ wa_p0001-plans
      AND plvar EQ c_plvar
      AND rsign EQ c_rsign
      AND relat EQ c_relat_pos
      AND ( begda <= sy-datum
      AND endda >= sy-datum ).
  • Routine ‘f_get_hrp_pernr’
    Mendapatkan pernr dan check holdernya, sobid merupakan key penghubung
“Check Holder of retrieved supervisor
  SELECT  otype
          objid
          plvar
          rsign
          relat
          begda
          endda
          subty
          sobid
    INTO  p_wa_hrp1001_h
    FROM  hrp1001
    WHERE otype EQ c_obj_type
      AND objid EQ p_wa_hrp1001_p-sobid
      AND plvar EQ c_plvar
      AND rsign EQ c_rsign
      AND relat EQ c_relat_hol
      AND ( begda <= sy-datum
      AND endda >= sy-datum ).
  ENDSELECT.

Pada function tersebut dilakukan loop sebanyak 7x, hal ini sesuaikan dengan jumlah level tree organisasi yang sedang dikerjakan.

Done,
Demikian share terkait function untuk mndapatkan level atasannya (berdasarkan input pernr) sampai level tertinggi dalam organisasi. Semoga bermanfaat.

_TerimaKasih,
GuritnoY
https://www.linkedin.com/in/guritno-yudho-wibowo-95944236/

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *