本文共 3814 字,大约阅读时间需要 12 分钟。
首先我们看一下运行效果图:
大部分都是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 :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 . -CHECKBOX = 'X'. ENDIF.ENDFORM. " CHECK_MARKED