[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/