REPORT zmail. TABLES: trdir, tstc. DATA: BEGIN OF gs_data, sel TYPE boolean, " 用于选择多行 name TYPE trdir-name, " 程序名 subc TYPE trdir-subc, " 程序类型 rstat TYPE trdir-rstat, " 状态 tcode TYPE tstc-tcode, " 事务码 ttext TYPE tstct-ttext, " 事务码描述 cnam TYPE trdir-cnam, " 创建者 cdat TYPE trdir-cdat, " 创建日期 unam TYPE trdir-unam, " 最后修改人 udat TYPE trdir-udat, " 修改日期 END OF gs_data. DATA: gt_data LIKE TABLE OF gs_data. " ALV显示內表 DATA: line TYPE i." ALV行数 " 选择屏幕 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: s_name FOR trdir-name, " 程序名 s_tcode FOR tstc-tcode, " 事务码 s_cnam FOR trdir-cnam, " 创建者 s_unam FOR trdir-unam, " 最后修改人 s_subc FOR trdir-subc DEFAULT 1, " 程序类型 s_rstat FOR trdir-rstat. " 状态 SELECTION-SCREEN END OF BLOCK b1. INITIALIZATION. %_s_name_%_app_%-text = '程序名'. %_s_tcode_%_app_%-text = '事务码'. %_s_cnam_%_app_%-text = '创建者'. %_s_unam_%_app_%-text = '最后修改人'. %_s_subc_%_app_%-text = '程序类型'. %_s_rstat_%_app_%-text = '状态'. " F8事件 AT SELECTION-SCREEN. DATA p_prog TYPE programm . DATA: l_rc(5). p_prog = sy-repid. PERFORM copy_status_diff_progs_new IN PROGRAM saplsmpe IF FOUND USING 'X' 'SAPLKKBL' p_prog 'STANDARD_FULLSCREEN' 'STATUS_ALV' CHANGING l_rc. START-OF-SELECTION. IF s_name[] IS INITIAL AND " 程序名 s_cnam[] IS INITIAL AND " 创建者 s_unam[] IS INITIAL AND " 最后修改人 s_subc[] IS INITIAL AND " 程序类型 s_tcode[] IS INITIAL AND " 事务码 s_rstat[] IS INITIAL. " 状态 MESSAGE '请至少输入一个条件!' TYPE 'S' DISPLAY LIKE 'E'. EXIT. ENDIF. PERFORM get_data. IF gt_data[] IS INITIAL. MESSAGE '无符合条件的记录' TYPE 'S' DISPLAY LIKE 'E'. EXIT. ENDIF. PERFORM alv_data. *&---------------------------------------------------------------------* *& Form get_data *&---------------------------------------------------------------------* * text 获取数据 *----------------------------------------------------------------------* FORM get_data. DATA: BEGIN OF ls_tstc, tcode TYPE tstc-tcode, ttext TYPE tstct-ttext, END OF ls_tstc. DATA: lt_tstc LIKE TABLE OF ls_tstc. " 输入事务码时 IF s_tcode[] IS NOT INITIAL. SELECT a~tcode b~name b~subc b~rstat b~cnam b~cdat b~unam b~udat c~ttext INTO CORRESPONDING FIELDS OF TABLE gt_data FROM tstc AS a INNER JOIN trdir AS b ON a~pgmna = b~name INNER JOIN tstct AS c ON a~tcode = c~tcode WHERE a~tcode IN s_tcode AND b~name IN s_name " 程序名 AND b~cnam IN s_cnam " 创建者 AND b~unam IN s_unam " 最后修改人 AND b~subc IN s_subc " 程序类型 AND b~rstat IN s_rstat. " 状态 ELSE. " 没有输入事务码时 SELECT a~name a~subc a~rstat a~cnam a~cdat a~unam a~udat b~tcode INTO CORRESPONDING FIELDS OF TABLE gt_data FROM trdir AS a LEFT JOIN tstc AS b ON a~name = b~pgmna WHERE a~name IN s_name " 程序名 AND a~cnam IN s_cnam " 创建者 AND a~unam IN s_unam " 最后修改人 AND a~subc IN s_subc " 程序类型 AND a~rstat IN s_rstat. " 状态 IF gt_data[] IS NOT INITIAL. " 查询事务码描述文本 SELECT tcode ttext INTO CORRESPONDING FIELDS OF TABLE lt_tstc FROM tstct FOR ALL ENTRIES IN gt_data WHERE tcode = gt_data-tcode. SORT lt_tstc BY tcode." 先排序 LOOP AT gt_data INTO gs_data. READ TABLE lt_tstc INTO ls_tstc WITH KEY tcode = gs_data-tcode BINARY SEARCH. IF sy-subrc EQ 0. gs_data-ttext = ls_tstc-ttext. MODIFY gt_data FROM gs_data TRANSPORTING ttext. ENDIF. ENDLOOP. ENDIF. ENDIF. " 统计內表行数 DESCRIBE TABLE gt_data LINES line. " 排序 SORT gt_data BY cnam cdat. ENDFORM. "get_data *&---------------------------------------------------------------------* *& Form alv_data *&---------------------------------------------------------------------* * text 显示ALV数据 *----------------------------------------------------------------------* FORM alv_data. DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, layout TYPE slis_layout_alv. PERFORM get_layout CHANGING layout. " alv布局 PERFORM get_fieldcat TABLES fieldcat. " 控制报表显示哪些栏位 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid " 程序名 is_layout = layout " 布局 i_callback_pf_status_set = 'STATUS_ALV' " STATUS i_callback_user_command = 'USER_COMMAND_FORM' " 定义按钮的功能 it_fieldcat = fieldcat[] " alv栏目(显示字段)内表 TABLES t_outtab = gt_data " 将内表数据赋给ALV 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_data *&---------------------------------------------------------------------* *& Form get_layout *&---------------------------------------------------------------------* * text ALV布局设置 *----------------------------------------------------------------------* * -->C_LAYOUT text *----------------------------------------------------------------------* FORM get_layout CHANGING c_layout TYPE slis_layout_alv. CLEAR: c_layout. c_layout-colwidth_optimize = 'X'." 宽度自动调节 c_layout-box_fieldname = 'SEL'. " 选择多行 c_layout-zebra = 'X'. " 颜色交替显示 ENDFORM. "get_layout *&---------------------------------------------------------------------* *& Form USER_COMMAND_FORM *&---------------------------------------------------------------------* * text 自定义按钮功能 *----------------------------------------------------------------------* * -->R_UCOMM text * -->RS_SELFIELD text *----------------------------------------------------------------------* FORM user_command_form USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. READ TABLE gt_data INTO gs_data INDEX rs_selfield-tabindex. IF sy-subrc EQ 0 AND gs_data-tcode IS NOT INITIAL. CASE r_ucomm. WHEN '&IC1'. " 双击事件 CALL TRANSACTION gs_data-tcode. " 调用事务码,运行程序 WHEN OTHERS. ENDCASE. ENDIF. ENDFORM. "USER_COMMAND_FORM *&---------------------------------------------------------------------* *& Form get_fieldcat *&---------------------------------------------------------------------* * text 显示字段 *----------------------------------------------------------------------* * -->CT_TAB text *----------------------------------------------------------------------* FORM get_fieldcat TABLES ct_tab TYPE slis_t_fieldcat_alv. DATA: fcat TYPE slis_fieldcat_alv. DEFINE add_fcat. CLEAR fcat. fcat-fieldname = &1. " 字段名 fcat-seltext_l = &2. " 显示字段文本 fcat-seltext_m = &2. fcat-seltext_s = &2. fcat-key = &3. " 主键 fcat-hotspot = &4. " 链接 fcat-checkbox = &5. " 复选框 fcat-edit = &6. " 是否可修改 fcat-ref_tabname = &7. " 参考表 fcat-ref_fieldname = &8. " 参考表字段 APPEND fcat TO ct_tab. END-OF-DEFINITION. add_fcat 'NAME' '程序名' '' '' '' '' '' ''. add_fcat 'SUBC' '程序类型' '' '' '' '' 'TRDIR' 'SUBC'. add_fcat 'RSTAT' '状态' '' '' '' '' 'TRDIR' 'RSTAT'. add_fcat 'TCODE' '事务码' '' '' '' '' '' ''. add_fcat 'TTEXT' '事务码描述' '' '' '' '' '' ''. add_fcat 'CNAM' '创建者' '' '' '' '' '' ''. add_fcat 'CDAT' '创建日期' '' '' '' '' '' ''. add_fcat 'UNAM' '最后修改人' '' '' '' '' '' ''. add_fcat 'UDAT' '修改日期' '' '' '' '' '' ''. ENDFORM. "get_fieldcat *&---------------------------------------------------------------------* *& Form pfstatus_form *&---------------------------------------------------------------------* * text STATUS *----------------------------------------------------------------------* * -->RT_EXTAB text *----------------------------------------------------------------------* FORM status_alv USING rt_extab TYPE slis_t_extab. SET TITLEBAR 'TITLE_BAR' WITH line. " 标题 SET PF-STATUS 'STATUS_ALV' EXCLUDING rt_extab. * SET PF-STATUS 'STATUS_ALV'. " 工具条 ENDFORM. "pfstatus_form </span>