REPORT z_alv_cdhdr_cdpos.
*---------------------------------------------------------------------*
* This ALV report displays change document tables CDHDR and CDPOS *
*---------------------------------------------------------------------*
* Author : Michel PIOUD - Updated 21 Dec 2007 *
* HomePage : http://www.oocities.org/mpioud *
*---------------------------------------------------------------------*
CONSTANTS :
c_x VALUE 'X',
c_eb9 TYPE syucomm VALUE '&EB9',
c_refresh TYPE syucomm VALUE '&REFRESH'.
*---------------------------------------------------------------------*
TYPE-POOLS slis. " Global ALV types
TYPES :
BEGIN OF ty_s_cdhdr.
INCLUDE TYPE cdhdr.
TYPES : checkbox TYPE xfeld,
END OF ty_s_cdhdr,
BEGIN OF ty_s_cdpos.
INCLUDE TYPE cdpos.
TYPES : checkbox TYPE xfeld,
END OF ty_s_cdpos.
*---------------------------------------------------------------------*
DATA :
gs_cdhdr TYPE cdhdr, " Change document header
* Layout for ALV
gs_layout TYPE slis_layout_alv,
* Change document header
t_cdhdr TYPE TABLE OF ty_s_cdhdr.
*---------------------------------------------------------------------*
SELECT-OPTIONS :
s_objcls FOR gs_cdhdr-objectclas OBLIGATORY,
s_objtid FOR gs_cdhdr-objectid,
s_chngnr FOR gs_cdhdr-changenr,
s_usrnam FOR gs_cdhdr-username DEFAULT sy-uname,
s_udate FOR gs_cdhdr-udate DEFAULT sy-datum,
s_time FOR gs_cdhdr-utime,
s_tcode FOR gs_cdhdr-tcode,
s_plncnr FOR gs_cdhdr-planchngnr,
s_chngno FOR gs_cdhdr-act_chngno,
s_wsplnd FOR gs_cdhdr-was_plannd,
s_chngid FOR gs_cdhdr-change_ind.
SELECTION-SCREEN SKIP.
PARAMETERS p_max TYPE numc3 OBLIGATORY DEFAULT '200'.
*---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM f_read_data.
*---------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM f_display_cdhdr.
*---------------------------------------------------------------------*
* Form f_read_data
*---------------------------------------------------------------------*
FORM f_read_data.
* Read Change document header
SELECT * INTO TABLE t_cdhdr
UP TO p_max ROWS
FROM cdhdr
WHERE objectclas IN s_objcls
AND objectid IN s_objtid
AND changenr IN s_chngnr
AND username IN s_usrnam
AND udate IN s_udate
AND utime IN s_time
AND tcode IN s_tcode
AND planchngnr IN s_plncnr
AND act_chngno IN s_chngno
AND was_plannd IN s_wsplnd
AND change_ind IN s_chngid.
ENDFORM. " F_READ_DATA
*---------------------------------------------------------------------*
* Form f_display_cdhdr
*---------------------------------------------------------------------*
FORM f_display_cdhdr.
DATA :
ls_event_exit TYPE slis_event_exit,
lt_event_exit TYPE slis_t_event_exit.
gs_layout-zebra = c_x.
gs_layout-colwidth_optimize = c_x.
gs_layout-group_change_edit = c_x.
gs_layout-allow_switch_to_list = c_x.
gs_layout-box_fieldname = 'CHECKBOX'.
* Activate 'More' button
CLEAR ls_event_exit.
ls_event_exit-after = c_x.
ls_event_exit-ucomm = c_eb9. " More
APPEND ls_event_exit TO lt_event_exit.
* Activate refresh button
CLEAR ls_event_exit.
ls_event_exit-after = c_x.
ls_event_exit-ucomm = c_refresh. " Refresh
APPEND ls_event_exit TO lt_event_exit.
* Display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'PF_STATUS_SET'
i_structure_name = 'CDHDR'
is_layout = gs_layout
it_event_exit = lt_event_exit
i_save = 'A'
TABLES
t_outtab = t_cdhdr.
ENDFORM. " F_DISPLAY_CDHDR
*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
FORM user_command USING u_ucomm TYPE syucomm
us_selfield TYPE slis_selfield. "#EC CALLED
* Macro definition
DEFINE m_sort.
add 1 to ls_sort-spos.
ls_sort-fieldname = &1.
ls_sort-up = c_x.
append ls_sort to lt_sort.
END-OF-DEFINITION.
DATA :
ls_cdhdr TYPE ty_s_cdhdr,
ls_sort TYPE slis_sortinfo_alv,
lt_sort TYPE slis_t_sortinfo_alv,
* Change document items
lt_cdpos TYPE TABLE OF ty_s_cdpos.
CASE u_ucomm.
WHEN '&IC1' OR c_eb9.
PERFORM check_marked USING us_selfield.
* Read Change document items
LOOP AT t_cdhdr INTO ls_cdhdr WHERE checkbox = c_x.
SELECT * APPENDING TABLE lt_cdpos
FROM cdpos
WHERE objectclas = ls_cdhdr-objectclas
AND objectid = ls_cdhdr-objectid
AND changenr = ls_cdhdr-changenr.
ENDLOOP.
m_sort 'CHANGENR'.
* Display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_structure_name = 'CDPOS'
is_layout = gs_layout
it_sort = lt_sort
i_save = 'A'
TABLES
t_outtab = lt_cdpos.
WHEN c_refresh.
PERFORM f_read_data.
us_selfield-refresh = c_x.
ENDCASE.
ENDFORM. " USER_COMMAND
*---------------------------------------------------------------------*
* Form CHECK_MARKED
*---------------------------------------------------------------------*
* What has been marked in t_cdhdr
*---------------------------------------------------------------------*
FORM check_marked USING us_selfield TYPE slis_selfield.
FIELD-SYMBOLS :
<cdhdr> TYPE ty_s_cdhdr.
READ TABLE t_cdhdr TRANSPORTING NO FIELDS WITH KEY checkbox = c_x.
IF NOT sy-subrc IS INITIAL AND
NOT us_selfield-tabindex IS INITIAL.
READ TABLE t_cdhdr INDEX us_selfield-tabindex ASSIGNING <cdhdr>.
<cdhdr>-checkbox = c_x.
ENDIF.
ENDFORM. " CHECK_MARKED
*---------------------------------------------------------------------*
* FORM PF_STATUS_SET *
*---------------------------------------------------------------------*
FORM pf_status_set USING ut_extab TYPE slis_t_extab. "#EC CALLED
* Display 'Refresh' button and 'More' button
DELETE ut_extab WHERE fcode = c_refresh OR fcode = c_eb9.
SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'
EXCLUDING ut_extab.
ENDFORM. " PF_STATUS_SET
***************** END OF PROGRAM Z_ALV_CDHDR_CDPOS ********************