You are on page 1of 13

Function Module to get manager Details in ABAP

FUNCTION z_get_manager.
*"---------------------------------------------------------------------*"*"Local interface:
*" IMPORTING
*"

REFERENCE(PERNR) LIKE P0001-PERNR OPTIONAL

*"

REFERENCE(ORGEH) LIKE P0001-ORGEH OPTIONAL

*"

REFERENCE(PLANS) LIKE P0001-PLANS OPTIONAL

*"

REFERENCE(BEGDA) LIKE P0001-BEGDA DEFAULT SY-DATUM

*"

REFERENCE(ENDDA) LIKE P0001-ENDDA DEFAULT SY-DATUM

*" EXPORTING
*"

REFERENCE(MPERNR) LIKE P0002-PERNR

*"

REFERENCE(MFNAME) LIKE P0002-VORNA

*"

REFERENCE(MLNAME) LIKE P0002-NACHN

*"

REFERENCE(MUSRID) LIKE P0105-USRID

*" EXCEPTIONS
*"

MISSING_PARAMETERS

*"

MISSING_ORG_ASSIGNMENT

*"---------------------------------------------------------------------DATA : lv_pernr LIKE p0001-pernr,

lv_orgeh LIKE p0001-orgeh,


lv_plans LIKE p0001-plans,
lv_begda LIKE p0001-begda,
lv_endda LIKE p0001-endda.

lv_pernr = pernr.
lv_orgeh = orgeh.
lv_plans = plans.
lv_begda = begda.
lv_endda = endda.

IF lv_pernr IS INITIAL AND


lv_orgeh IS INITIAL AND
lv_plans IS INITIAL.
RAISE missing_parameters.
ENDIF.

*--- Arrive at the org unit that the person or position belongs to
IF lv_orgeh IS INITIAL AND
lv_plans IS NOT INITIAL.
*--- Get Org Unit that the position belongs to
PERFORM f_get_relobj USING c_s

" OTYPE

lv_plans " OBJID


c_01

" PLVAR

lv_begda " BEGDA


lv_endda " ENDDA
c_a

" RSIGN A

c_003 " RELAT Belongs to


c_o

" sclas

CHANGING lv_orgeh.
ENDIF.

IF lv_orgeh IS INITIAL AND


lv_plans IS INITIAL.
*--- Get org unit from IT0001
PERFORM f_get_org USING lv_pernr
lv_begda
lv_endda
CHANGING lv_orgeh.
ENDIF.

*--- If no org assignment exists


IF lv_orgeh IS INITIAL.
RAISE missing_org_assignment.

ENDIF.

*--- Get Cheif


CLEAR: gs_manager.
PERFORM f_get_chief USING lv_pernr
lv_orgeh
lv_begda
lv_endda
CHANGING gs_manager.

mpernr = gs_manager-pernr.
mfname = gs_manager-fname.
mlname = gs_manager-lname.
musrid = gs_manager-usrid.
ENDFUNCTION.

*----------------------------------------------------------------------*
***INCLUDE LZ_ORGF01 .
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&

Form F_GET_RELOBJ

*&---------------------------------------------------------------------*
* Description : Get the related object
*----------------------------------------------------------------------*
FORM f_get_relobj USING p_otype
p_objid
p_plvar
p_begda
p_endda
p_rsign
p_relat
p_sclas
CHANGING p_sobid.

DATA : lv_begda LIKE hrp1001-begda,


lv_endda LIKE hrp1001-endda,
lv_sobid LIKE hrp1001-sobid.

CLEAR : p_sobid.

SELECT begda

endda
sobid
INTO (lv_begda, lv_endda, lv_sobid)
FROM hrp1001
WHERE plvar = p_plvar
AND otype = p_otype
AND objid = p_objid
AND begda LE p_endda
AND endda GE p_begda
AND rsign = p_rsign
AND relat = p_relat
AND sclas = p_sclas.
ENDSELECT.
IF sy-subrc = 0.
p_sobid = lv_sobid.
ENDIF.

ENDFORM.

" F_GET_RELOBJ

*&---------------------------------------------------------------------*
*&

Form F_GET_ORG

*&---------------------------------------------------------------------*

* Description : Get employees org unit from IT0001


*----------------------------------------------------------------------*
FORM f_get_org USING p_pernr LIKE p0001-pernr
p_begda LIKE p0001-begda
p_endda LIKE p0001-endda
CHANGING p_orgeh LIKE hrp1001-objid.
DATA : lv_begda LIKE p0001-begda,
lv_endda LIKE p0001-endda,
lv_orgeh LIKE p0001-orgeh.

SELECT begda endda orgeh


FROM pa0001
INTO (lv_begda, lv_endda, lv_orgeh)
WHERE pernr = p_pernr
AND begda LE p_endda
AND endda GE p_begda.
ENDSELECT.
IF sy-subrc = 0.
p_orgeh = lv_orgeh.
ENDIF.
ENDFORM.

" F_GET_ORG

*&---------------------------------------------------------------------*
*&

Form F_GET_CHIEF

*&---------------------------------------------------------------------*
* Description : Get the cheif of the Org unit
*----------------------------------------------------------------------*
FORM f_get_chief USING p_pernr LIKE p0001-pernr
p_orgeh LIKE hrp1001-objid
p_begda LIKE hrp1001-begda
p_endda LIKE hrp1001-endda
CHANGING p_manager LIKE gs_manager.

DATA : lv_pos LIKE hrp1001-objid,


lv_pernr LIKE hrp1001-objid,
lv_next_org LIKE hrp1001-objid.

*--- Get B012 Chief for Org Unit


PERFORM f_get_relobj USING c_o
p_orgeh " OBJID
c_01

" PLVAR

p_begda " BEGDA


p_endda " ENDDA
c_b

" RSIGN B

" OTYPE

c_012 " RELAT Manages


c_s

" sclas

CHANGING lv_pos.

*--- Get A008 Holderfor Position


PERFORM f_get_relobj USING c_s

" OTYPE

lv_pos " OBJID


c_01

" PLVAR

p_begda " BEGDA


p_endda " ENDDA
c_a

" RSIGN A

c_008 " RELAT Holder


c_p

" sclas

CHANGING lv_pernr.

*--- Exit - if a holder identified


IF NOT lv_pernr IS INITIAL.
IF p_pernr IS INITIAL OR
lv_pernr NE p_pernr.
PERFORM f_get_pernr_details USING lv_pernr
p_begda
p_endda

CHANGING p_manager.
EXIT.
ENDIF.
ENDIF.

*--- No holder at this point, then get next org unit


PERFORM f_get_relobj USING c_o

" OTYPE

p_orgeh " OBJID


c_01

" PLVAR

p_begda " BEGDA


p_endda " ENDDA
c_a

" RSIGN A

c_002 " RELAT Reports Line to


c_o

" sclas

CHANGING lv_next_org.

*--- Call this routine again


IF lv_next_org IS INITIAL.
EXIT.
ENDIF.
PERFORM f_get_chief USING p_pernr
lv_next_org

p_begda
p_endda
CHANGING p_manager.
ENDFORM.

" F_GET_CHIEF

*&---------------------------------------------------------------------*
*&

Form F_GET_PERNR_DETAILS

*&---------------------------------------------------------------------*
* Description : Get employee details
*----------------------------------------------------------------------*
FORM f_get_pernr_details USING p_pernr LIKE p0001-pernr
p_begda LIKE p0001-begda
p_endda LIKE p0001-endda
CHANGING p_manager LIKE gs_manager.
DATA : lv_vorna LIKE p0002-vorna,
lv_nachn LIKE p0002-nachn,
lv_usrid LIKE p0105-usrid,
lv_begda LIKE p0002-begda,
lv_endda LIKE p0002-endda.

p_manager-pernr = p_pernr.
*--- Get name from IT2

SELECT begda endda vorna nachn


FROM pa0002
INTO (lv_begda, lv_endda, lv_vorna, lv_nachn)
WHERE pernr = p_pernr
AND begda LE p_endda
AND endda GE p_begda.
ENDSELECT.
IF sy-subrc = 0.
p_manager-fname = lv_vorna.
p_manager-lname = lv_nachn.
ENDIF.
*--- Get user ID from IT0105
SELECT begda endda usrid
FROM pa0105
INTO (lv_begda, lv_endda, lv_usrid)
WHERE pernr = p_pernr
AND begda LE p_endda
AND endda GE p_begda
AND subty = c_0001.
ENDSELECT.
IF sy-subrc = 0.
p_manager-usrid = lv_usrid.

ENDIF.
ENDFORM.

" F_GET_PERNR_DETAILS

You might also like