Vous êtes sur la page 1sur 9

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

* ABAP Name
: ZIHR_R400_POS_MISS_ATTRIBUTES
*
* RICEF Object ID: R400
*
* Developer
: TejaVardhan Reddy
*
* Date
: 03/02/2012
*
* Description
: Positions Missing Attributes
*
* User Area
: Human Resources
*
*&---------------------------------------------------------------------*
* Program Change Log:
*&---------------------------------------------------------------------*
* Ver Trans.Req Name
Date
Reason for change
*
* 1 HIDK905531 Teja
03/02/2012 Initial
*
*&---------------------------------------------------------------------*
REPORT zihr_r400_pos_miss_attributes
MESSAGE-ID zhcm.
INCLUDE zihr_r400_pos_miss_attri_top.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_pos-low.
PERFORM sub_f4_help_pos. " Get all positions
START-OF-SELECTION.
PERFORM main. "Main form
*&---------------------------------------------------------------------*
*&
Form MAIN
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM main.
DATA:
lt_final
TYPE ty_t_final,
lt_hrp1001
TYPE ty_t_hrp1001,
lt_pos
TYPE ty_t_pos,
lt_hrp1013
TYPE ty_t_hrp1013,
lt_hrp1008
TYPE ty_t_hrp1008.
PERFORM get_positions CHANGING lt_pos.
IF lt_pos IS NOT INITIAL.
PERFORM read_1001 USING lt_pos
CHANGING lt_hrp1001.
PERFORM read_1013 USING lt_pos
CHANGING lt_hrp1013.
PERFORM read_1008 USING lt_pos
CHANGING lt_hrp1008.
PERFORM get_final_data
USING
lt_pos lt_hrp1013 lt_hrp1008 lt_hrp1001
CHANGING lt_final.
PERFORM output USING lt_final.
ENDIF.
ENDFORM.
" MAIN
*&---------------------------------------------------------------------*
*&
Form SUB_F4_HELP_POS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM sub_f4_help_pos .
DATA: f4_loc_objec_org TYPE TABLE OF objec,

ls_f4_objec_org TYPE objec.


DATA: f4_loc_csrfd_org LIKE dynpread-fieldname.
DATA: f4_loc_repid_org LIKE sy-repid.
DATA: f4_loc_dynnr_org LIKE sy-dynnr.
f4_loc_repid_org = sy-repid.
f4_loc_dynnr_org = sy-dynnr.
CALL FUNCTION 'RH_OBJID_REQUEST'
EXPORTING
plvar
= '01'
otype
= 'S'
seark
= '*'
set_mode
= 'X'
dynpro_repid
= f4_loc_repid_org
dynpro_dynnr
= f4_loc_dynnr_org
TABLES
sel_objects
= f4_loc_objec_org
EXCEPTIONS
cancelled
= 1
wrong_condition = 2
nothing_found = 3
internal_error = 4
illegal_mode
= 5
OTHERS
= 6.
IF sy-subrc = 0.
SORT f4_loc_objec_org by objid ASCENDING.
DELETE ADJACENT DUPLICATES FROM f4_loc_objec_org.
CLEAR s_pos.
REFRESH s_pos[].
LOOP AT f4_loc_objec_org INTO ls_f4_objec_org.
s_pos-low
= ls_f4_objec_org-objid.
s_pos-sign = 'I'.
s_pos-option = 'EQ'.
APPEND s_pos.
CLEAR s_pos.
ENDLOOP.
READ TABLE s_pos[] into s_pos INDEX 1.
ENDIF.
ENDFORM.
" SUB_F4_HELP_POS
*&---------------------------------------------------------------------*
*&
Form GET_POSITIONS
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
<--P_LT_FINAL text
*----------------------------------------------------------------------*
FORM get_positions
CHANGING pt_pos TYPE ty_t_pos.
SELECT objid stext FROM hrp1000 INTO TABLE pt_pos
WHERE plvar = '01'
AND otype = 'S'
AND objid IN s_pos
AND istat = '1'
and begda LE p_rdate
AND endda GE p_rdate.
if sy-subrc EQ 0.
SORT pt_pos by objid.

delete ADJACENT DUPLICATES FROM pt_pos COMPARING objid.


endif.
ENDFORM.
" GET_POSITIONS
*&---------------------------------------------------------------------*
*&
Form READ_1001
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_LT_POS text
*
<--P_LT_HRP1001 text
*----------------------------------------------------------------------*
FORM read_1001
USING
pt_pos
TYPE ty_t_pos
CHANGING pt_hrp1001 TYPE ty_t_hrp1001.
SELECT objid
rsign
relat
begda
endda
sclas
sobid
INTO TABLE pt_hrp1001 FROM hrp1001
FOR ALL ENTRIES IN pt_pos
WHERE otype = 'S'
AND objid = pt_pos-objid
AND plvar = '01'
AND rsign = 'B'
AND relat IN ('003','007')
AND istat = '1'
AND begda LE p_rdate
AND endda GE p_rdate
and sclas in ('A','C').
IF sy-subrc EQ 0.
SORT pt_hrp1001 BY objid sclas sobid endda begda DESCENDING.
delete ADJACENT DUPLICATES FROM pt_hrp1001 comparing objid sclas sobid endda
begda.
ENDIF.
ENDFORM.
" READ_1001
*&---------------------------------------------------------------------*
*&
Form READ_1013
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_LT_POS text
*
<--P_LT_HRP1001 text
*----------------------------------------------------------------------*
FORM read_1013
USING
pt_pos
TYPE ty_t_pos
CHANGING pt_hrp1013 TYPE ty_t_hrp1013.
SELECT objid
persg
persk
FROM hrp1013
INTO TABLE pt_hrp1013
FOR ALL ENTRIES IN pt_pos
WHERE plvar = '01'
AND otype = 'S'
AND objid = pt_pos-objid
AND istat = '1'

AND begda LE p_rdate


AND endda GE p_rdate.
if sy-subrc EQ 0.
SORT pt_hrp1013 by objid persg persk.
delete ADJACENT DUPLICATES FROM pt_hrp1013 COMPARING objid persg persk.
endif.
ENDFORM.
" READ_1013
*&---------------------------------------------------------------------*
*&
Form READ_1008
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_LT_POS text
*
<--P_LT_HRP1008 text
*----------------------------------------------------------------------*
FORM read_1008
USING
pt_pos
TYPE ty_t_pos
CHANGING pt_hrp1008 TYPE ty_t_hrp1008.
SELECT objid
bukrs
persa
btrtl
INTO TABLE pt_hrp1008
FROM hrp1008 FOR ALL ENTRIES IN pt_pos
WHERE plvar = '01'
AND otype = 'S'
AND objid = pt_pos-objid
AND istat = '1'
AND begda LE p_rdate
AND endda GE p_rdate.
if sy-subrc EQ 0.
SORT pt_hrp1008 by objid bukrs persa btrtl.
Delete ADJACENT DUPLICATES FROM pt_hrp1008 COMPARING ALL FIELDS.
endif.
ENDFORM.
" READ_1008
*&---------------------------------------------------------------------*
*&
Form GET_FINAL_DATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_LT_POS text
*
-->P_LT_HRP1013 text
*
-->P_LT_HRP1008 text
*
<--P_LT_FINAL text
*----------------------------------------------------------------------*
FORM get_final_data
USING pt_pos
TYPE ty_t_pos
pt_hrp1013 TYPE ty_t_hrp1013
pt_hrp1008 TYPE ty_t_hrp1008
pt_hrp1001 TYPE ty_t_hrp1001
CHANGING pt_final TYPE ty_t_final.
TYPES:
BEGIN OF ty_holder,
objid
TYPE hrobjid,
begda
TYPE begda,
endda
TYPE endda,
aedtm
TYPE aedtm,
uname
TYPE usrname,
sclas
TYPE sclas,

sobid
TYPE sobid,
END OF ty_holder,
BEGIN OF ty_pernr_tmp,
pernr
TYPE pernr_d,
END OF ty_pernr_tmp,
BEGIN OF ty_pernrs,
pernr
TYPE pernr_d,
ename
TYPE emnam,
END OF ty_pernrs.
DATA:
ls_pos
TYPE ty_pos,
ls_hrp1013
TYPE ty_hrp1013,
ls_hrp1008
TYPE ty_hrp1008,
ls_final
TYPE ty_final,
ls_hrp1001
TYPE ty_hrp1001,
ls_job1001
TYPE ty_hrp1001,
lt_holder
TYPE STANDARD TABLE OF ty_holder,
lt_pernrs
TYPE STANDARD TABLE OF ty_pernrs,
lt_pernr_tmp
TYPE STANDARD TABLE OF ty_pernr_tmp,
ls_pernr_tmp
TYPE ty_pernr_tmp,
ls_pernrs
TYPE ty_pernrs,
ls_holder
TYPE ty_holder,
lv_flag.
SELECT objid
begda
endda
aedtm
uname
sclas
sobid FROM hrp1001
INTO TABLE lt_holder FOR ALL ENTRIES IN pt_pos
WHERE otype = 'S'
AND objid = pt_pos-objid
AND plvar = '01'
AND rsign = 'A'
AND relat = '008'
and begda LE p_rdate
AND endda GE p_rdate
AND sclas = 'P'.
IF sy-subrc EQ 0.
SORT lt_holder BY objid sclas sobid endda begda DESCENDING .
ENDIF.
IF NOT lt_holder IS INITIAL.
LOOP AT lt_holder INTO ls_holder.
ls_pernr_tmp-pernr = ls_holder-sobid.
APPEND ls_pernr_tmp TO lt_pernr_tmp.
ENDLOOP.
SELECT pernr
ename
FROM pa0001
INTO TABLE lt_pernrs
FOR ALL ENTRIES IN lt_pernr_tmp
WHERE pernr = lt_pernr_tmp-pernr
AND begda LE p_rdate
AND endda GE p_rdate.
ENDIF.
LOOP AT pt_pos INTO ls_pos.

READ TABLE pt_hrp1013 INTO ls_hrp1013


WITH KEY objid = ls_pos-objid.
IF sy-subrc NE 0.
lv_flag = 'X'.
ELSEIF ls_hrp1013-persg IS INITIAL OR
ls_hrp1013-persk IS INITIAL.
lv_flag = 'X'.
ENDIF.
READ TABLE pt_hrp1008 INTO ls_hrp1008
WITH KEY objid = ls_pos-objid.
IF sy-subrc NE 0.
lv_flag = 'X'.
ELSEIF ls_hrp1008-persa IS INITIAL OR
ls_hrp1008-btrtl IS INITIAL OR
ls_hrp1008-bukrs IS INITIAL.
lv_flag = 'X'.
ENDIF.
READ TABLE pt_hrp1001 INTO ls_hrp1001
WITH KEY objid = ls_pos-objid
relat = '003'.
IF sy-subrc NE 0.
lv_flag = 'X'.
ELSEIF ls_hrp1001-sobid IS INITIAL.
lv_flag = 'X'.
ENDIF.
READ TABLE pt_hrp1001 INTO ls_job1001
WITH KEY objid = ls_pos-objid
relat = '007'.
IF sy-subrc NE 0.
lv_flag = 'X'.
ELSEIF ls_job1001-sobid IS INITIAL.
lv_flag = 'X'.
ENDIF.
IF lv_flag = 'X'.
ls_final-objid = ls_pos-objid.
ls_final-stext = ls_pos-stext.
read TABLE lt_holder into ls_holder
with key objid = ls_pos-objid.
if sy-subrc = 0.
ls_final-pernr = ls_holder-sobid.
ls_final-begda = ls_holder-begda.
ls_final-datum = ls_holder-aedtm.
ls_final-uname = ls_holder-uname.
READ TABLE lt_pernrs INTO ls_pernrs WITH KEY pernr = ls_holder-sobid.
IF sy-subrc = 0.
ls_final-hname = ls_pernrs-ename.
ENDIF.
endif.
ls_final-persa = ls_hrp1008-persa.
ls_final-btrtl = ls_hrp1008-btrtl.
ls_final-bukrs = ls_hrp1008-bukrs.
ls_final-persg = ls_hrp1013-persg.
ls_final-persk = ls_hrp1013-persk.
ls_final-short = ls_hrp1001-sobid.
ls_final-stell = ls_job1001-sobid.
APPEND ls_final TO pt_final.
ENDIF.
CLEAR:ls_final,ls_holder,ls_pos,
ls_hrp1008,ls_hrp1013,ls_hrp1001,
ls_job1001,lv_flag.

ENDLOOP.
IF pt_final[] IS INITIAL.
MESSAGE i000 WITH 'No Data Found for the entered selection Criteria'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
" GET_FINAL_DATA
*&---------------------------------------------------------------------*
*&
Form OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_LT_FINAL text
*----------------------------------------------------------------------*
FORM output
USING pt_final TYPE ty_t_final.
DATA:
lt_fcat
TYPE slis_t_fieldcat_alv.
PERFORM:
build_fcat
USING
'OBJID' 'Position ID' CHANGING lt_fcat,
build_fcat
USING
'STEXT' 'Position Name' CHANGING lt_fcat,
build_fcat
USING
'PERNR' 'Employee No' CHANGING lt_fcat,
build_fcat
USING
'HNAME' 'Name of the holder' CHANGING lt_fcat,
build_fcat
USING
'BEGDA' 'Start Date' CHANGING lt_fcat,
build_fcat
USING
'DATUM' 'Changed on date' CHANGING lt_fcat,
build_fcat
USING
'UNAME' 'USERID' CHANGING lt_fcat,
build_fcat
USING
'PERSA' 'Personnel Area' CHANGING lt_fcat,
build_fcat
USING
'BTRTL' 'Personnel Sub Area' CHANGING lt_fcat,
build_fcat
USING
'PERSG' 'Employee Group' CHANGING lt_fcat,
build_fcat
USING
'PERSK' 'Employe Sub Group' CHANGING lt_fcat,
build_fcat
USING
'SHORT' 'Work Location' CHANGING lt_fcat,
build_fcat
USING
'BUKRS' 'Company Code' CHANGING lt_fcat,
build_fcat
USING
'STELL' 'JOB ID' CHANGING lt_fcat.
PERFORM alv_output USING lt_fcat pt_final.
ENDFORM.
" OUTPUT
*&---------------------------------------------------------------------*
*&
Form BUILD_FCAT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_0513 text
*
-->P_0514 text
*
<--P_LT_FCAT text
*----------------------------------------------------------------------*
FORM build_fcat
USING
value(p_0513)
value(p_0514)

CHANGING
pt_fcat TYPE slis_t_fieldcat_alv.
DATA:
ls_fcat TYPE slis_fieldcat_alv.
ls_fcat-tabname = 'LT_FINAL'.
ls_fcat-fieldname = p_0513.
ls_fcat-seltext_l = p_0514.
APPEND ls_fcat TO pt_fcat.
ENDFORM.
" BUILD_FCAT
*&---------------------------------------------------------------------*
*&
Form ALV_OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_LT_FCAT text
*
-->P_PT_FINAL text
*----------------------------------------------------------------------*
FORM alv_output USING
pt_fcat TYPE slis_t_fieldcat_alv
pt_final TYPE ty_t_final.
DATA:
ls_layout
TYPE slis_layout_alv.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program
= sy-repid
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout
= ls_layout
it_fieldcat
= pt_fcat
TABLES
t_outtab
= pt_final
EXCEPTIONS
program_error
= 1
OTHERS
= 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.

" ALV_OUTPUT

*&---------------------------------------------------------------------*
*&
Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM top_of_page.
* //Local Variable
DATA: lt_header TYPE slis_t_listheader,
lw_header TYPE slis_listheader,
lv_date TYPE char10,
lv_time TYPE char10,
lv_count TYPE char10.
* //Title
lw_header-typ = 'H'.
lw_header-info = 'Positions with Missing Attributes'.
APPEND lw_header TO lt_header.
CLEAR lw_header.

lw_header-typ = 'S'.
WRITE sy-datum TO lv_date.
CONCATENATE 'Run Date' lv_date INTO lw_header-info SEPARATED BY ' - '.
APPEND lw_header TO lt_header.
CLEAR lw_header.
lw_header-typ = 'S'.
WRITE sy-uzeit TO lv_time.
CONCATENATE 'Run time' lv_time INTO lw_header-info SEPARATED BY ' - '.
APPEND lw_header TO lt_header.
CLEAR lw_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_header.
CLEAR: lv_date, lv_time.
ENDFORM.
"TOP_OF_PAGE

Vous aimerez peut-être aussi