1.显示/查找SAP所有可执行程序清单,双击事务码执行、

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>
View Code

相关文章: