1.显示/查找SAP所有可执行程序清单,双击事务码执行、
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH004 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh004. 10 TABLES: trdir, tstc. 11 DATA: BEGIN OF gs_data, 12 sel TYPE boolean, " 用于选择多行 13 name TYPE trdir-name, " 程序名 14 subc TYPE trdir-subc, " 程序类型 15 rstat TYPE trdir-rstat, " 状态 16 tcode TYPE tstc-tcode, " 事务码 17 ttext TYPE tstct-ttext, " 事务码描述 18 cnam TYPE trdir-cnam, " 创建者 19 cdat TYPE trdir-cdat, " 创建日期 20 unam TYPE trdir-unam, " 最后修改人 21 udat TYPE trdir-udat, " 修改日期 22 END OF gs_data. 23 DATA: gt_data LIKE TABLE OF gs_data. " ALV显示內表 24 DATA: line TYPE i." ALV行数 25 " 选择屏幕 26 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 27 SELECT-OPTIONS: s_name FOR trdir-name, " 程序名 28 s_tcode FOR tstc-tcode, " 事务码 29 s_cnam FOR trdir-cnam, " 创建者 30 s_unam FOR trdir-unam, " 最后修改人 31 s_subc FOR trdir-subc DEFAULT 1, " 程序类型 32 s_rstat FOR trdir-rstat. " 状态 33 SELECTION-SCREEN END OF BLOCK b1. 34 " F8事件 35 36 START-OF-SELECTION. 37 IF s_name[] IS INITIAL AND " 程序名 38 s_cnam[] IS INITIAL AND " 创建者 39 s_unam[] IS INITIAL AND " 最后修改人 40 s_subc[] IS INITIAL AND " 程序类型 41 s_tcode[] IS INITIAL AND " 事务码 42 s_rstat[] IS INITIAL. " 状态 43 44 MESSAGE '请至少输入一个条件!' TYPE 'S' DISPLAY LIKE 'E'. 45 EXIT. 46 ENDIF. 47 PERFORM get_data. 48 IF gt_data[] IS INITIAL. 49 MESSAGE '无符合条件的记录' TYPE 'S' DISPLAY LIKE 'E'. 50 EXIT. 51 ENDIF. 52 PERFORM alv_data. 53 *&---------------------------------------------------------------------* 54 *& Form get_data 55 *&---------------------------------------------------------------------* 56 * text 获取数据 57 *----------------------------------------------------------------------* 58 FORM get_data. 59 DATA: BEGIN OF ls_tstc, 60 tcode TYPE tstc-tcode, 61 ttext TYPE tstct-ttext, 62 END OF ls_tstc. 63 64 DATA: lt_tstc LIKE TABLE OF ls_tstc. 65 " 输入事务码时 66 IF s_tcode[] IS NOT INITIAL. 67 SELECT a~tcode 68 b~name 69 b~subc 70 b~rstat 71 b~cnam 72 b~cdat 73 b~unam 74 b~udat 75 c~ttext 76 INTO CORRESPONDING FIELDS OF TABLE gt_data 77 FROM tstc AS a 78 INNER JOIN trdir AS b ON a~pgmna = b~name 79 INNER JOIN tstct AS c ON a~tcode = c~tcode 80 WHERE a~tcode IN s_tcode 81 AND b~name IN s_name " 程序名 82 AND b~cnam IN s_cnam " 创建者 83 AND b~unam IN s_unam " 最后修改人 84 AND b~subc IN s_subc " 程序类型 85 AND b~rstat IN s_rstat. " 状态 86 ELSE. 87 " 没有输入事务码时 88 SELECT 89 a~name 90 a~subc 91 a~rstat 92 a~cnam 93 a~cdat 94 a~unam 95 a~udat 96 b~tcode 97 INTO CORRESPONDING FIELDS OF TABLE gt_data 98 FROM trdir AS a 99 LEFT JOIN tstc AS b ON a~name = b~pgmna 100 WHERE a~name IN s_name " 程序名 101 AND a~cnam IN s_cnam " 创建者 102 AND a~unam IN s_unam " 最后修改人 103 AND a~subc IN s_subc " 程序类型 104 AND a~rstat IN s_rstat. " 状态 105 106 IF gt_data[] IS NOT INITIAL. 107 " 查询事务码描述文本 108 SELECT 109 tcode 110 ttext 111 INTO CORRESPONDING FIELDS OF TABLE lt_tstc 112 FROM tstct 113 FOR ALL ENTRIES IN gt_data 114 WHERE tcode = gt_data-tcode. 115 116 SORT lt_tstc BY tcode." 先排序 117 LOOP AT gt_data INTO gs_data. 118 READ TABLE lt_tstc INTO ls_tstc WITH KEY tcode = gs_data-tcode BINARY SEARCH. 119 IF sy-subrc EQ 0. 120 gs_data-ttext = ls_tstc-ttext. 121 MODIFY gt_data FROM gs_data TRANSPORTING ttext. 122 ENDIF. 123 ENDLOOP. 124 ENDIF. 125 ENDIF. 126 " 统计內表行数 127 DESCRIBE TABLE gt_data LINES line. 128 " 排序 129 SORT gt_data BY cnam cdat. 130 ENDFORM. "get_data 131 *&---------------------------------------------------------------------* 132 *& Form alv_data 133 *&---------------------------------------------------------------------* 134 * text 显示ALV数据 135 *----------------------------------------------------------------------* 136 FORM alv_data. 137 DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, 138 layout TYPE slis_layout_alv. 139 140 PERFORM get_layout CHANGING layout. " alv布局 141 PERFORM get_fieldcat TABLES fieldcat. " 控制报表显示哪些栏位 142 143 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 144 EXPORTING 145 i_callback_program = sy-repid " 程序名 146 is_layout = layout " 布局 147 i_callback_pf_status_set = 'PFSTATUS_FORM' " STATUS 148 i_callback_user_command = 'USER_COMMAND_FORM' " 定义按钮的功能 149 it_fieldcat = fieldcat[] " alv栏目(显示字段)内表 150 TABLES 151 t_outtab = gt_data " 将内表数据赋给ALV 152 EXCEPTIONS 153 program_error = 1 154 OTHERS = 2. 155 IF sy-subrc <> 0. 156 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 157 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 158 ENDIF. 159 ENDFORM. "alv_data 160 *&---------------------------------------------------------------------* 161 *& Form get_layout 162 *&---------------------------------------------------------------------* 163 * text ALV布局设置 164 *----------------------------------------------------------------------* 165 * -->C_LAYOUT text 166 *----------------------------------------------------------------------* 167 FORM get_layout CHANGING c_layout TYPE slis_layout_alv. 168 CLEAR: c_layout. 169 c_layout-colwidth_optimize = 'X'." 宽度自动调节 170 c_layout-box_fieldname = 'SEL'. " 选择多行 171 c_layout-zebra = 'X'. " 颜色交替显示 172 ENDFORM. "get_layout 173 *&---------------------------------------------------------------------* 174 *& Form USER_COMMAND_FORM 175 *&---------------------------------------------------------------------* 176 * text 自定义按钮功能 177 *----------------------------------------------------------------------* 178 * -->R_UCOMM text 179 * -->RS_SELFIELD text 180 *----------------------------------------------------------------------* 181 FORM user_command_form USING r_ucomm LIKE sy-ucomm 182 rs_selfield TYPE slis_selfield. 183 READ TABLE gt_data INTO gs_data INDEX rs_selfield-tabindex. 184 IF sy-subrc EQ 0 AND gs_data-tcode IS NOT INITIAL. 185 CASE r_ucomm. 186 WHEN '&IC1'. " 双击事件 187 CALL TRANSACTION gs_data-tcode. " 调用事务码,运行程序 188 WHEN OTHERS. 189 MESSAGE '双击事务码执行' TYPE 'S'. 190 ENDCASE. 191 ENDIF. 192 ENDFORM. "USER_COMMAND_FORM 193 *&---------------------------------------------------------------------* 194 *& Form get_fieldcat 195 *&---------------------------------------------------------------------* 196 * text 显示字段 197 *----------------------------------------------------------------------* 198 * -->CT_TAB text 199 *----------------------------------------------------------------------* 200 FORM get_fieldcat TABLES ct_tab TYPE slis_t_fieldcat_alv. 201 DATA: fcat TYPE slis_fieldcat_alv. 202 DEFINE add_fcat. 203 clear fcat. 204 fcat-fieldname = &1. " 字段名 205 fcat-seltext_l = &2. " 显示字段文本 206 fcat-seltext_m = &2. 207 fcat-seltext_s = &2. 208 fcat-key = &3. " 主键 209 fcat-hotspot = &4. " 链接 210 fcat-checkbox = &5. " 复选框 211 fcat-edit = &6. " 是否可修改 212 fcat-ref_tabname = &7. " 参考表 213 fcat-ref_fieldname = &8. " 参考表字段 214 append fcat to ct_tab. 215 END-OF-DEFINITION. 216 add_fcat 'NAME' '程序名' '' '' '' '' '' ''. 217 add_fcat 'SUBC' '程序类型' '' '' '' '' 'TRDIR' 'SUBC'. 218 add_fcat 'RSTAT' '状态' '' '' '' '' 'TRDIR' 'RSTAT'. 219 add_fcat 'TCODE' '事务码' '' '' '' '' '' ''. 220 add_fcat 'TTEXT' '事务码描述' '' '' '' '' '' ''. 221 add_fcat 'CNAM' '创建者' '' '' '' '' '' ''. 222 add_fcat 'CDAT' '创建日期' '' '' '' '' '' ''. 223 add_fcat 'UNAM' '最后修改人' '' '' '' '' '' ''. 224 add_fcat 'UDAT' '修改日期' '' '' '' '' '' ''. 225 ENDFORM. "get_fieldcat 226 *&---------------------------------------------------------------------* 227 *& Form pfstatus_form 228 *&---------------------------------------------------------------------* 229 * text STATUS 230 *----------------------------------------------------------------------* 231 * -->RT_EXTAB text 232 *----------------------------------------------------------------------* 233 FORM pfstatus_form USING rt_extab TYPE slis_t_extab. 234 SET TITLEBAR 'ZCHENH004' WITH line. " 标题 235 SET PF-STATUS 'ZCHENH004'. " 工具条 236 ENDFORM. "pfstatus_form </span>