首先我们看一下运行效果图:
大部分都是CDHDR表的查询字段。
双击某一行可以查看具体的修改明细字段。
源代码:
REPORT Z_ALV_CDHDR_CDPOS.
TYPE-POOLS SLIS.
DATA : CDHDR TYPE CDHDR.
SELECT-OPTIONS :
S_OBJCLS FOR CDHDR-OBJECTCLAS OBLIGATORY,
S_OBJTID FOR CDHDR-OBJECTID,
S_CHNGNR FOR CDHDR-CHANGENR,
S_USRNAM FOR CDHDR-USERNAME,
S_UDATE FOR CDHDR-UDATE,
S_TIME FOR CDHDR-UTIME,
S_TCODE FOR CDHDR-TCODE,
S_PLNCNR FOR CDHDR-PLANCHNGNR,
S_CHNGNO FOR CDHDR-ACT_CHNGNO,
S_WSPLND FOR CDHDR-WAS_PLANND,
S_CHNGID FOR CDHDR-CHANGE_IND.
SELECTION-SCREEN SKIP.
PARAMETERS P_MAX TYPE NUMC3 OBLIGATORY DEFAULT '200'.
*---------------------------------------------------------------------*
TYPES :
BEGIN OF TY_S_CDHDR.
INCLUDE STRUCTURE CDHDR.
TYPES : CHECKBOX,
END OF TY_S_CDHDR,
BEGIN OF TY_S_CDPOS.
INCLUDE STRUCTURE CDPOS.
TYPES : CHECKBOX,
END OF TY_S_CDPOS.
*---------------------------------------------------------------------*
DATA :
* Layout for ALV
GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
* Change document header
T_CDHDR TYPE TABLE OF TY_S_CDHDR.
*---------------------------------------------------------------------*
START-OF-SELECTION.
* 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.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYOUT-BOX_FIELDNAME = 'CHECKBOX'.
* Display ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_STRUCTURE_NAME = 'CDHDR'
IS_LAYOUT = GS_LAYOUT
TABLES
T_OUTTAB = T_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 = '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'.
PERFORM CHECK_MARKED USING US_SELFIELD.
* Read Change document items
LOOP AT T_CDHDR INTO LS_CDHDR WHERE CHECKBOX = '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_STRUCTURE_NAME = 'CDPOS'
IS_LAYOUT = GS_LAYOUT
IT_SORT = LT_SORT
TABLES
T_OUTTAB = LT_CDPOS.
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 : <FS>
TYPE TY_S_CDHDR.
READ TABLE T_CDHDR TRANSPORTING NO FIELDS WITH KEY CHECKBOX = 'X'.
IF NOT SY-SUBRC IS INITIAL AND
NOT US_SELFIELD-TABINDEX IS INITIAL.
READ TABLE T_CDHDR INDEX US_SELFIELD-TABINDEX ASSIGNING <FS>.
<FS>-CHECKBOX = 'X'.
ENDIF.
ENDFORM. " CHECK_MARKED