Following code is simple to get the complex services functionality involved in Service Master when you have Purchase Order and its line item:
This code not only brings the Services under PO but also from Contracts.
data: begin of i_esll occurs 0,
EBELN like ekpo-ebeln,
EBELP like ekpo-ebelp,
SRVPOS like esll-srvpos,
MENGE like esll-menge,
MEINS like esll-meins,
PEINH like esll-peinh,
BRTWR like esll-brtwr,
OLD_MEINS like esll-meins,
end of i_esll.
DATA: L_PACKNO LIKE EKPO-PACKNO,BEGIN OF IT_ESUC_ESLL OCCURS 0,
SUB_PACKNO LIKE ESLL-SUB_PACKNO,
PACKAGE LIKE ESLL-PACKAGE,
END OF IT_ESUC_ESLL,
IT_PACK LIKE IT_ESUC_ESLL OCCURS 0 WITH HEADER LINE.
CLEAR: L_PACKNO, I_ESLL, I_ESLL[], IT_ESUC_ESLL,
IT_ESUC_ESLL[].
Get the Package No. from EKPO
SELECT SINGLE PACKNO FROM EKPO
INTO L_PACKNO
WHERE EBELN = I_EBELN
AND EBELP = I_EBELP
AND LOEKZ = ' '.
IF NOT L_PACKNO IS INITIAL.
For the Package #, check whether sub packages are for Contract items?
SELECT SUB_PACKNO FROM ESUC
INTO TABLE IT_ESUC_ESLL
WHERE PACKNO = L_PACKNO
AND DEL = SPACE.
IF SY-SUBRC <> 0.
For the Package #,if sub packages are in not Contract items,go to ESLL
SELECT SUB_PACKNO PACKAGE FROM ESLL
INTO TABLE IT_ESUC_ESLL
WHERE PACKNO = L_PACKNO
AND DEL = SPACE.
ENDIF.
ENDIF.
Get the Subpackages which are one level above Service items
CLEAR: IT_PACK, IT_PACK[].
LOOP AT IT_ESUC_ESLL.
IF NOT IT_ESUC_ESLL-SUB_PACKNO IS INITIAL
AND IT_ESUC_ESLL-PACKAGE = 'X'.
MOVE IT_ESUC_ESLL TO IT_PACK.
APPEND IT_PACK.
CLEAR IT_PACK.
DELETE IT_ESUC_ESLL.
ELSEIF NOT IT_ESUC_ESLL-SUB_PACKNO IS INITIAL
AND IT_ESUC_ESLL-PACKAGE = ' '.
This select will drill down and get all the hierarchial subpackages
SELECT SUB_PACKNO PACKAGE FROM ESLL
APPENDING TABLE IT_ESUC_ESLL
WHERE PACKNO = IT_ESUC_ESLL-SUB_PACKNO
AND DEL = SPACE.
ENDIF.
ENDLOOP.
Get the Service Items for all the Subpackages
LOOP AT IT_PACK.
SELECT SRVPOS MENGE MEINS PEINH BRTWR
FROM ESLL
APPENDING CORRESPONDING FIELDS OF TABLE I_ESLL
WHERE PACKNO = IT_PACK-SUB_PACKNO
AND DEL = SPACE.
ENDLOOP.
IF SY-SUBRC <> 0.
If there are no sub packages, but direct link to Services from package
go to ESLL with Package derived from EKPO for the PO Item
SELECT SRVPOS MENGE MEINS PEINH BRTWR
FROM ESLL
INTO CORRESPONDING FIELDS OF TABLE I_ESLL
WHERE PACKNO = L_PACKNO
AND DEL = SPACE.
ENDIF.