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>
View Code
2.程序异常捕获,防止出现ST22的dump页面
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH005 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh005. 10 DATA:gv_test TYPE i , 11 err_text TYPE string, 12 e TYPE REF TO cx_root. 13 *捕获异常 14 TRY. 15 gv_test = 'X'. 16 EXIT. 17 CATCH cx_root INTO e. 18 err_text = e->get_text( ). 19 WRITE:err_text. 20 21 ENDTRY. 22 TRY. 23 gv_test = 1 / 0. 24 EXIT. 25 CATCH cx_root INTO e. 26 err_text = e->get_text( ). 27 WRITE:err_text. 28 CLEANUP. 29 30 * RAISE EXCEPTION e. " 使界面红掉 31 " 32 ENDTRY.
View Code
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH017 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh017. 10 DATA:gv_test TYPE i , 11 err_text TYPE string, 12 e TYPE REF TO cx_root. 13 TRY. 14 gv_test = 'X'. 15 * 正常代码部分 16 * 17 * 18 * 19 * EXIT. 20 CATCH cx_root INTO e. 21 err_text = e->get_text( ). 22 IF sy-batch = 'X'. 23 WRITE:'后台异常测试:',err_text. 24 ELSE. 25 WRITE:'前台异常测试:',err_text. 26 ENDIF. 27 CLEANUP. 28 CLEAR:err_text. 29 ENDTRY. 30 WRITE:'前台异常测试:',err_text.
View Code
3.ALV快速开发,需要在SE41中拷贝标准状态栏,
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH007 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh007. 10 TABLES:zchenh001. 11 DATA:gs_data TYPE zchenh001, 12 gt_data TYPE zchenh001 OCCURS 0 WITH HEADER LINE. 13 DATA:BEGIN OF gt_alv OCCURS 0. 14 DATA :box(1), 15 exception(1). 16 INCLUDE TYPE zchenh001. 17 DATA END OF gt_alv. 18 19 20 PERFORM frm_insert_data. 21 PERFORM frm_show_data. 22 23 *&---------------------------------------------------------------------* 24 *& Form FRM_INSERT_DATA 25 *&---------------------------------------------------------------------* 26 * text 27 *----------------------------------------------------------------------* 28 * --> p1 text 29 * <-- p2 text 30 *----------------------------------------------------------------------* 31 FORM frm_insert_data . 32 33 DO 10 TIMES. 34 CLEAR:gs_data,gt_data. 35 gs_data-znum = sy-index. 36 CONCATENATE '陈辉' 'Test' INTO gs_data-zname. 37 IF sy-index MOD 2 EQ 0. 38 gs_data-zsex = '男'. 39 ELSE. 40 gs_data-zsex = '女'. 41 ENDIF. 42 gs_data-zhigh = '185'. 43 APPEND gs_data TO gt_data. 44 ENDDO. 45 46 * 更新数据库表 等待千分之一秒后提交数据库 47 MODIFY zchenh001 FROM TABLE gt_data. 48 WAIT UP TO 1 / 1000 SECONDS. 49 COMMIT WORK. 50 51 * DELETE zchenh001 FROM TABLE gt_data. 52 LOOP AT gt_data. 53 MOVE-CORRESPONDING gt_data TO gt_alv. 54 gt_alv-exception = '3'. 55 APPEND gt_alv. 56 ENDLOOP. 57 ENDFORM. " FRM_INSERT_DATA 58 *&---------------------------------------------------------------------* 59 *& Form FRM_SHOW_DATA 60 *&---------------------------------------------------------------------* 61 * text 62 *----------------------------------------------------------------------* 63 * --> p1 text 64 * <-- p2 text 65 *----------------------------------------------------------------------* 66 FORM frm_show_data . 67 DATA: fieldcat TYPE lvc_t_fcat WITH HEADER LINE, 68 l_grid_settings TYPE lvc_s_glay, 69 layout TYPE lvc_s_layo, 70 lv_title TYPE lvc_title. 71 PERFORM frm_build_fieldcat TABLES fieldcat. 72 lv_title = '数据展示'. 73 layout-excp_fname = 'EXCEPTION'. 74 layout-zebra = 'X'. 75 layout-cwidth_opt = 'X'. 76 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' 77 EXPORTING 78 i_callback_program = sy-repid 79 is_layout_lvc = layout 80 it_fieldcat_lvc = fieldcat[] 81 i_callback_user_command = 'USER_COMMAND' 82 i_callback_pf_status_set = 'SET_PF_STATUS' 83 * i_callback_html_top_of_page = 'TOP_OF_PAGE' "调用TOP_OF_PAGE FORM 84 i_grid_settings = l_grid_settings 85 i_grid_title = lv_title 86 i_save = 'U' 87 * IT_EVENTS = GT_EVENTS[] 88 TABLES 89 t_outtab = gt_alv[] 90 EXCEPTIONS 91 program_error = 1 92 OTHERS = 2. 93 ENDFORM. " FRM_SHOW_DATA 94 *&---------------------------------------------------------------------* 95 *& Form FRM_BUILD_FIELDCAT 96 *&---------------------------------------------------------------------* 97 * text 98 *----------------------------------------------------------------------* 99 * -->P_FIELDCAT text 100 *----------------------------------------------------------------------* 101 FORM frm_build_fieldcat TABLES fieldcat. 102 DATA: lt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE. 103 DEFINE add2fc. 104 lt_fieldcat-fieldname = &1. 105 lt_fieldcat-scrtext_l = &2. 106 lt_fieldcat-edit = &3. 107 lt_fieldcat-checkbox = &4. 108 lt_fieldcat-ref_table = &5. 109 lt_fieldcat-ref_field = &6. 110 lt_fieldcat-no_zero = 'X'. 111 lt_fieldcat-fix_column = &7. 112 lt_fieldcat-hotspot = &8. 113 lt_fieldcat-outputlen = 100. 114 append lt_fieldcat. 115 clear lt_fieldcat. 116 END-OF-DEFINITION. 117 add2fc: 118 'BOX' '复选框' 'X' 'X' '' '' 'X' '', 119 'ZNUM' '序号' '' '' '' '' 'X' '', 120 'ZNAME' '姓名' '' '' '' '' 'X' '', 121 'ZSEX' '性别' '' '' '' '' 'X' '', 122 'ZHIGH' '身高' '' '' '' '' 'X' ''. 123 fieldcat[] = lt_fieldcat[]. 124 125 ENDFORM. " FRM_BUILD_FIELDCAT 126 127 128 *&---------------------------------------------------------------------* 129 *& Form frm_set_pf_status_ALL 130 *&---------------------------------------------------------------------* 131 * text 132 *----------------------------------------------------------------------* 133 * -->RT_EXTAB text 134 *----------------------------------------------------------------------* 135 FORM set_pf_status USING rt_extab TYPE slis_t_extab. 136 SET PF-STATUS 'ZCHENH007'. 137 ENDFORM. "set_pf_status 138 139 *&---------------------------------------------------------------------* 140 *& Form USER_COMMAND 141 *&---------------------------------------------------------------------* 142 * text 143 *----------------------------------------------------------------------* 144 * -->R_UCOMM text 145 * -->RS_SELFIELD text 146 *----------------------------------------------------------------------* 147 FORM user_command USING r_ucomm LIKE sy-ucomm 148 rs_selfield TYPE slis_selfield. 149 CASE r_ucomm. 150 WHEN '&F03' OR '&F15' OR '&F12'. 151 SET SCREEN 0. 152 LEAVE SCREEN. 153 WHEN '&PRINT'. 154 PERFORM frm_print_data. 155 WHEN 'ALL'. 156 LOOP AT gt_alv . 157 gt_alv-box = 'X'. 158 MODIFY gt_alv TRANSPORTING box. 159 ENDLOOP . 160 WHEN 'SAL'. 161 LOOP AT gt_alv. 162 gt_alv-box = ''. 163 MODIFY gt_alv TRANSPORTING box. 164 ENDLOOP . 165 WHEN OTHERS. 166 ENDCASE. 167 rs_selfield-refresh = 'X'. 168 ENDFORM. "frm_user_command_ALL 169 170 *&---------------------------------------------------------------------* 171 *& Form FRM_PRINT_DATA 172 *&---------------------------------------------------------------------* 173 * text 174 *----------------------------------------------------------------------* 175 * --> p1 text 176 * <-- p2 text 177 *----------------------------------------------------------------------* 178 FORM frm_print_data . 179 DATA:lt_data TYPE zchenh001 OCCURS 0 WITH HEADER LINE. 180 LOOP AT gt_alv WHERE box = 'X' AND exception = '3'. 181 MOVE-CORRESPONDING gt_alv TO lt_data. 182 APPEND lt_data. 183 ENDLOOP. 184 EXPORT lt_data TO MEMORY ID 'GT_HEAD'. 185 ENDFORM. " FRM_PRINT_DATA
View Code
事务码:SE41 -> 状态
从程序:SAPLKKBL
状态:STANDARD_FULLSCREEN
到程序:XXXXXXXX
状态:XXXXXXXX
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH011 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh011. 10 *声明表 11 * 定义内表 变量 常量 结构 12 DATA: BEGIN OF gt_alv OCCURS 0, 13 col1 TYPE char50, " alv显示的字段一 14 col2 TYPE char50, " alv显示的字段二 15 col3 TYPE char50, " alv显示的字段三 16 col4 TYPE char50, " alv显示的字段四 17 exception, 18 id TYPE icon-id, " 图标 19 msg(255), 20 END OF gt_alv. 21 *声明包含文件 22 *定义选择屏幕 23 *选择屏幕的PAI PBO 24 PERFORM frm_get_data. 25 PERFORM frm_pro_data. 26 PERFORM frm_show_data. 27 *&---------------------------------------------------------------------* 28 *& Form FRM_GET_DATA 29 *&---------------------------------------------------------------------* 30 * 从表中或者其他地方抓取数据 31 *----------------------------------------------------------------------* 32 * --> p1 text 33 * <-- p2 text 34 *----------------------------------------------------------------------* 35 FORM frm_get_data . 36 37 ENDFORM. " FRM_GET_DATA 38 *&---------------------------------------------------------------------* 39 *& Form FRM_PRO_DATA 40 *&---------------------------------------------------------------------* 41 * 对数据进行处理 加工 42 *----------------------------------------------------------------------* 43 * --> p1 text 44 * <-- p2 text 45 *----------------------------------------------------------------------* 46 FORM frm_pro_data . 47 DATA:lv_id TYPE icon-id. 48 SELECT SINGLE id INTO lv_id FROM icon WHERE name = icon_led_green. 49 DO 10 TIMES. 50 gt_alv-col1 = sy-index. 51 gt_alv-col2 = sy-index + sy-index. 52 gt_alv-col3 = sy-index * sy-index. 53 gt_alv-col4 = sy-index MOD 2. 54 gt_alv-exception = 3. 55 gt_alv-msg = 'OK!'. 56 gt_alv-id = lv_id. 57 APPEND gt_alv. 58 ENDDO. 59 ENDFORM. " FRM_PRO_DATA 60 *&---------------------------------------------------------------------* 61 *& Form FRM_SHOW_DATA 62 *&---------------------------------------------------------------------* 63 * text 64 *----------------------------------------------------------------------* 65 * --> p1 text 66 * <-- p2 text 67 *----------------------------------------------------------------------* 68 FORM frm_show_data . 69 DATA: fieldcat TYPE lvc_t_fcat WITH HEADER LINE, 70 l_grid_settings TYPE lvc_s_glay, 71 layout TYPE lvc_s_layo, 72 lv_title TYPE lvc_title. 73 PERFORM frm_build_fieldcat TABLES fieldcat. 74 lv_title = '数据展示'. 75 layout-excp_fname = 'EXCEPTION'. 76 layout-zebra = 'X'. 77 layout-cwidth_opt = 'X'. 78 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' 79 EXPORTING 80 i_callback_program = sy-repid 81 is_layout_lvc = layout 82 it_fieldcat_lvc = fieldcat[] 83 i_callback_user_command = 'USER_COMMAND' 84 i_callback_pf_status_set = 'SET_PF_STATUS' 85 * i_callback_html_top_of_page = 'TOP_OF_PAGE' "调用TOP_OF_PAGE FORM 86 i_grid_settings = l_grid_settings 87 i_grid_title = lv_title 88 i_save = 'U' 89 * IT_EVENTS = GT_EVENTS[] 90 TABLES 91 t_outtab = gt_alv[] 92 EXCEPTIONS 93 program_error = 1 94 OTHERS = 2. 95 ENDFORM. " FRM_SHOW_DATA 96 *&---------------------------------------------------------------------* 97 *& Form FRM_BUILD_FIELDCAT 98 *&---------------------------------------------------------------------* 99 * text 100 *----------------------------------------------------------------------* 101 * -->P_FIELDCAT text 102 *----------------------------------------------------------------------* 103 FORM frm_build_fieldcat TABLES fieldcat. 104 DATA: lt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE. 105 DEFINE add2fc. 106 lt_fieldcat-fieldname = &1. 107 lt_fieldcat-scrtext_l = &2. 108 lt_fieldcat-edit = &3. 109 lt_fieldcat-checkbox = &4. 110 lt_fieldcat-ref_table = &5. 111 lt_fieldcat-ref_field = &6. 112 lt_fieldcat-no_zero = 'X'. 113 lt_fieldcat-fix_column = &7. 114 lt_fieldcat-hotspot = &8. 115 lt_fieldcat-icon = &9. 116 lt_fieldcat-outputlen = 100. 117 append lt_fieldcat. 118 clear lt_fieldcat. 119 END-OF-DEFINITION. 120 add2fc: 121 'COL1' '字段一' '' '' '' '' 'X' '' '', 122 'COL2' '字段二' '' '' '' '' 'X' '' '', 123 'COL3' '字段三' '' '' '' '' 'X' '' '', 124 'COL4' '字段四' '' '' '' '' 'X' '' '', 125 'ID' '图标' '' '' '' '' 'X' '' 'X', 126 'MSG' '消息' '' '' '' '' 'X' '' ''. 127 fieldcat[] = lt_fieldcat[]. 128 ENDFORM. " FRM_BUILD_FIELDCAT 129 130 *&---------------------------------------------------------------------* 131 *& Form frm_set_pf_status_ALL 132 *&---------------------------------------------------------------------* 133 * text 134 *----------------------------------------------------------------------* 135 * -->RT_EXTAB text 136 *----------------------------------------------------------------------* 137 FORM set_pf_status USING rt_extab TYPE slis_t_extab. 138 SET PF-STATUS 'ZCHENH011'. 139 ENDFORM. "set_pf_status 140 141 *&---------------------------------------------------------------------* 142 *& Form USER_COMMAND 143 *&---------------------------------------------------------------------* 144 * 用户在ALV上的命令 145 *----------------------------------------------------------------------* 146 * -->R_UCOMM text 147 * -->RS_SELFIELD text 148 *----------------------------------------------------------------------* 149 FORM user_command USING r_ucomm LIKE sy-ucomm 150 rs_selfield TYPE slis_selfield. 151 CASE r_ucomm. 152 WHEN '&F03' OR '&F15' OR '&F12'. 153 SET SCREEN 0. 154 LEAVE SCREEN. 155 WHEN OTHERS. 156 ENDCASE. 157 158 rs_selfield-refresh = 'X'. 159 ENDFORM. "frm_user_command_ALL
View Code
4.有些SE11/SE16表不能修改表中数据时,
通过SE37 -> SE16N_INTERFACE
I_TAB:表名,
I_EDIT :X,
I_SAPEDIT:X
F8执行,选中需要删除或修改的数据
5.SAP中金额转为汉字
示例:100001.11 =》 壹拾万零壹元壹角壹分整
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH008 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh008. 10 DATA:lv_in TYPE dmbtr, 11 lv_out TYPE string. 12 lv_in = '100001.11'. 13 *lv_in = 0 - lv_in. 14 PERFORM frm_conv_amount USING lv_in 15 CHANGING lv_out. 16 WRITE:/ lv_out. 17 *&---------------------------------------------------------------------* 18 *& Form frm_conv_amount 19 *&---------------------------------------------------------------------* 20 * text 21 *----------------------------------------------------------------------* 22 * -->VALUE text 23 * -->(P_SOURCE) text 24 * -->VALUE text 25 * -->(P_RESULT) text 26 *----------------------------------------------------------------------* 27 FORM frm_conv_amount USING value(p_source) 28 CHANGING value(p_result). 29 30 DATA: scr(20) TYPE c, res(60) TYPE c. 31 DATA: len TYPE i, c1 TYPE i, c2 TYPE i, c3 TYPE i. 32 DATA: d1(1) TYPE c, d2(1) TYPE c, d3 TYPE i. 33 DATA: digit(2) TYPE c, weight(2) TYPE c. 34 DATA: rule1(20) TYPE c VALUE '零壹贰叁肆伍陆柒捌玖'. 35 DATA: rule2(36) TYPE c VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'. 36 37 scr = p_source * 100. 38 39 CONDENSE scr NO-GAPS. 40 41 IF scr = '0'. 42 res = '零元'. 43 ELSE. 44 len = strlen( scr ). 45 c1 = 0. 46 d1 = '0'. 47 48 CLEAR res. 49 50 DO len TIMES. 51 c1 = c1 + 1. 52 c2 = len - c1. 53 MOVE scr+c2(1) TO d2. 54 d3 = d2. 55 MOVE rule1+d3(1) TO digit. 56 c3 = ( c1 - 1 ). 57 MOVE rule2+c3(1) TO weight. 58 IF d2 = '0'. 59 IF c1 = 3. 60 digit = ''. 61 ELSEIF c1 = 7. 62 digit = ''. 63 ELSEIF d1 = '0'. 64 digit = ''. 65 weight = ''. 66 ELSE. 67 weight = ''. 68 ENDIF. 69 ENDIF. 70 71 CONCATENATE digit weight res INTO res. 72 d1 = d2. 73 74 ENDDO. 75 ENDIF. 76 77 CONCATENATE res '整' INTO p_result. 78 ENDFORM. "frm_conv_amount
View Code
6.SE24中使用自定义的类
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH009 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh009. 10 DATA: object TYPE REF TO zchenh002. 11 DATA:speed TYPE i. 12 13 START-OF-SELECTION. 14 15 CREATE OBJECT object. 16 CALL METHOD object->show_speed. 17 CALL METHOD object->add_speed. 18 CALL METHOD object->show_speed. 19 speed = 10. 20 CALL METHOD object->set_speed 21 EXPORTING 22 speed_in = speed. 23 write:'程序中的Speed-->:',speed. 24 CLEAR:speed. 25 CALL METHOD object->add_speed. 26 CALL METHOD object->get_speed 27 IMPORTING 28 speed_out = speed. 29 write:'程序中的Speed-->:',speed.
View Code
7.模拟SM37后台JOB
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH010 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh010. 10 DATA: jobcount LIKE tbtcjob-jobcount. 11 DATA: abort TYPE c, 12 finish TYPE c, 13 prelim TYPE c, 14 ready TYPE c, 15 run TYPE c, 16 sched TYPE c. 17 18 PARAMETERS: p_name LIKE tbtcjob-jobname OBLIGATORY DEFAULT 'Z_BARRY_TEST_JOB', 19 p_date LIKE sy-datum OBLIGATORY, 20 p_time LIKE sy-uzeit OBLIGATORY, 21 p_varint LIKE raldb-variant. 22 23 SELECT-OPTIONS s_rept FOR sy-repid NO INTERVALS OBLIGATORY . 24 25 START-OF-SELECTION. 26 CALL FUNCTION 'JOB_OPEN' "定义一个Job 27 EXPORTING 28 jobname = p_name 29 IMPORTING 30 jobcount = jobcount "Job id 31 EXCEPTIONS 32 cant_create_job = 1 33 invalid_job_data = 2 34 jobname_missing = 3 35 OTHERS = 4. 36 IF sy-subrc <> 0. 37 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 38 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 39 ENDIF. 40 41 LOOP AT s_rept . 42 CALL FUNCTION 'JOB_SUBMIT' "Scheduled 这个Job 43 EXPORTING 44 authcknam = sy-uname 45 jobcount = jobcount 46 jobname = p_name 47 report = s_rept-low 48 variant = p_varint 49 EXCEPTIONS 50 bad_priparams = 1 51 bad_xpgflags = 2 52 invalid_jobdata = 3 53 jobname_missing = 4 54 job_notex = 5 55 job_submit_failed = 6 56 lock_failed = 7 57 program_missing = 8 58 prog_abap_and_extpg_set = 9 59 OTHERS = 10. 60 IF sy-subrc <> 0. 61 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 62 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 63 ENDIF. 64 ENDLOOP. 65 66 CALL FUNCTION 'JOB_CLOSE' "Release 这个Job 67 EXPORTING 68 jobcount = jobcount 69 jobname = p_name 70 sdlstrtdt = p_date 71 sdlstrttm = p_time 72 EXCEPTIONS 73 cant_start_immediate = 1 74 invalid_startdate = 2 75 jobname_missing = 3 76 job_close_failed = 4 77 job_nosteps = 5 78 job_notex = 6 79 lock_failed = 7 80 OTHERS = 8. 81 IF sy-subrc <> 0. 82 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 83 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 84 ENDIF. 85 86 CALL FUNCTION 'SHOW_JOBSTATE' 87 EXPORTING 88 jobcount = jobcount 89 jobname = p_name 90 IMPORTING 91 aborted = abort 92 finished = finish 93 preliminary = prelim 94 ready = ready 95 running = run 96 scheduled = sched 97 EXCEPTIONS 98 jobcount_missing = 1 99 jobname_missing = 2 100 job_notex = 3 101 OTHERS = 4. 102 IF sy-subrc <> 0. 103 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 104 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 105 ENDIF. 106 107 WRITE : / 'Canceled :' , abort , 108 / 'Finished :' , finish, 109 / 'Scheduled Temporarily :' , prelim, 110 / 'Ready for Execution :' , ready, 111 / 'Active :' , run, 112 / 'Scheduling Released :' , sched.
View Code
8.内表转JSON字符串 ,JSON转ABAP内表
方法一:
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH012 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh012. 10 TABLES:zchenh001. 11 DATA:err_text TYPE string, 12 e TYPE REF TO cx_root. 13 DATA: json_ser TYPE REF TO cl_trex_json_serializer, 14 json_des TYPE REF TO cl_trex_json_deserializer. 15 DATA: jsonstr TYPE string. 16 DATA: BEGIN OF itab OCCURS 0. 17 INCLUDE TYPE zchenh001. 18 DATA END OF itab. 19 DATA:gs_zchenh001 TYPE zchenh001. 20 21 START-OF-SELECTION. 22 TRY . 23 24 SELECT * INTO CORRESPONDING FIELDS OF TABLE itab 25 FROM zchenh001 UP TO 10 ROWS. 26 27 28 ***内表->JSON 29 CREATE OBJECT json_ser 30 EXPORTING 31 data = itab[]. 32 CALL METHOD json_ser->serialize. 33 CALL METHOD json_ser->get_data 34 RECEIVING 35 rval = jsonstr. 36 37 WRITE:'内表转JSON',/, jsonstr,/. 38 39 ***JSON->内表 40 CLEAR:itab,itab[]. 41 CREATE OBJECT json_des. 42 CALL METHOD json_des->deserialize 43 EXPORTING 44 json = jsonstr 45 IMPORTING 46 abap = itab[]. 47 WRITE:'JSON转内表',/. 48 LOOP AT itab INTO gs_zchenh001. 49 WRITE:gs_zchenh001-znum,gs_zchenh001-zname,gs_zchenh001-zsex,gs_zchenh001-zhigh,/. 50 ENDLOOP. 51 52 CATCH cx_root INTO e. 53 err_text = e->get_text( ). 54 WRITE:err_text. 55 56 ENDTRY.
View Code
方法二:
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH013 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh013. 10 11 DATA:err_text TYPE string, 12 e TYPE REF TO cx_root. 13 14 DATA:lv_content TYPE string. 15 DATA:lv_content1 TYPE string. 16 DATA:lv_json TYPE string . 17 DATA json_writer TYPE REF TO cl_sxml_string_writer. 18 19 DATA:gs_zchenh001 TYPE zchenh001. 20 DATA:gt_oldtab TYPE TABLE OF zchenh001. 21 DATA:gt_newtab TYPE TABLE OF zchenh001. 22 23 START-OF-SELECTION. 24 TRY . 25 lv_content = 'CONTENT'. 26 SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_oldtab 27 FROM zchenh001 UP TO 10 ROWS. 28 ***abap内表->JSON 29 json_writer = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ). 30 CALL TRANSFORMATION id 31 SOURCE content = lv_content 32 itable = gt_oldtab 33 RESULT XML json_writer. 34 DATA:json TYPE etxml_line_str. 35 json = json_writer->get_output( ). 36 37 CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING' 38 EXPORTING 39 im_xstring = json 40 im_encoding = 'UTF-8' 41 IMPORTING 42 ex_string = lv_json. 43 44 " json 转 abap内表 45 CALL TRANSFORMATION id 46 SOURCE XML lv_json 47 RESULT content = lv_content1 48 itable = gt_newtab. 49 50 WRITE:'转换后JSON:',lv_json,/,'转换后内表',/. 51 LOOP AT gt_newtab INTO gs_zchenh001 . 52 WRITE:gs_zchenh001-znum,gs_zchenh001-zname,gs_zchenh001-zsex,gs_zchenh001-zhigh,/. 53 ENDLOOP. 54 CATCH cx_root INTO e. 55 err_text = e->get_text( ). 56 WRITE:err_text. 57 58 ENDTRY.
View Code
9.读取SAP的页编码格式
1.登录界面 -> 配置属性 -> 代码页 语言,编码
2.I18N 代码页配置,
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH016 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh016. 10 *DATA: l_codepage(4) TYPE n . 11 * 12 *DATA: l_encoding(20). 13 * 14 *CALL FUNCTION 'SCP_CODEPAGE_BY_EXTERNAL_NAME' 15 * EXPORTING 16 * external_name = 'GB2312' 17 * IMPORTING 18 * sap_codepage = l_codepage. 19 * 20 *l_encoding = l_codepage. 21 * 22 *WRITE:'--------->',l_encoding. 23 *SKIP. 24 25 DATA:name TYPE c, 26 entry00 LIKE tcp00, 27 cpisinf1 LIKE rscptype-cpisinf1, 28 cpusedbyf1 LIKE tcp00-cpcodepage, 29 cpisinf4 LIKE rscptype-cpisinf4, 30 cpisinf5 LIKE rscptype-cpisinf5, 31 cpencoding_text TYPE c, 32 cpbyteind_text TYPE c, 33 cpextmeth_text TYPE c, 34 cpnlsmajor_text TYPE c, 35 cpsource_text TYPE c, 36 http_name TYPE c, 37 java_name TYPE c, 38 mime_name TYPE c, 39 cpg_name TYPE c, 40 fcha_name TYPE c, 41 matching_ascii TYPE c. 42 43 DATA:lv_code TYPE tcp00-cpcodepage. 44 45 DO 1000 TIMES. 46 lv_code = sy-index. 47 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 48 EXPORTING 49 input = lv_code 50 IMPORTING 51 output = lv_code. 52 53 CALL FUNCTION 'SCP_CODEPAGE_INFO' 54 EXPORTING 55 codepage = lv_code 56 IMPORTING 57 name = name 58 entry00 = entry00 59 cpisinf1 = cpisinf1 60 cpusedbyf1 = cpusedbyf1 61 cpisinf4 = cpisinf4 62 cpisinf5 = cpisinf5 63 cpencoding_text = cpencoding_text 64 cpbyteind_text = cpbyteind_text 65 cpextmeth_text = cpextmeth_text 66 cpnlsmajor_text = cpnlsmajor_text 67 cpsource_text = cpsource_text 68 http_name = http_name 69 java_name = java_name 70 mime_name = mime_name 71 cpg_name = cpg_name 72 fcha_name = fcha_name 73 matching_ascii = matching_ascii 74 EXCEPTIONS 75 invalid_codepage = 1 76 internal_error = 2 77 OTHERS = 3. 78 IF sy-subrc <> 0. 79 80 ENDIF. 81 82 WRITE:'NAME',name,/ 83 'ENTRY00',entry00,/ 84 'CPUSEDBYF1',cpusedbyf1. 85 86 ENDDO.
View Code
10.SAP中模糊查询 使用like和 % 通配符
1 DATA: l_setname TYPE setnamenew. 2 3 e_ret = 'S'. 4 5 CONCATENATE i_setname '%' INTO l_setname. 6 7 * 读取集值 8 SELECT setname lineid valsign valoption valfrom valto 9 INTO TABLE t_setleaf 10 FROM setleaf 11 WHERE setname LIKE l_setname. 12 13 IF sy-subrc NE 0. 14 e_ret = 'F'. 15 e_msg = '未取到集数据'. 16 17 EXIT. 18 ENDIF.
View Code
11.SAP中关于Excel的OLE操作
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH021 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh021. 10 TYPE-POOLS ole2 . 11 DATA: count TYPE i, 12 count_real TYPE i, 13 application TYPE ole2_object, 14 workbook TYPE ole2_object, 15 excel TYPE ole2_object, 16 sheet TYPE ole2_object, 17 cells TYPE ole2_object. 18 CONSTANTS: row_max TYPE i VALUE 256. 19 DATA index TYPE i. 20 21 22 DATA: 23 h_cell TYPE ole2_object, " cell 24 h_f TYPE ole2_object, " font 25 h_int TYPE ole2_object, 26 h_width TYPE ole2_object, 27 h_columns TYPE ole2_object, 28 h_rows TYPE ole2_object, 29 h_font TYPE ole2_object, 30 h_entirecol TYPE ole2_object. 31 . 32 33 CREATE OBJECT excel 'EXCEL.APPLICATION'. 34 35 IF sy-subrc NE 0. 36 WRITE: / 'No EXCEL creation possible'. 37 STOP. 38 ENDIF. 39 40 SET PROPERTY OF excel 'DisplayAlerts' = 0. 41 42 CALL METHOD OF 43 excel 44 'WORKBOOKS' = workbook. 45 46 SET PROPERTY OF excel 'VISIBLE' = 1. 47 48 49 SET PROPERTY OF excel 'SheetsInNewWorkbook' = 1. 50 CALL METHOD OF 51 workbook 52 'ADD'. 53 54 CALL METHOD OF 55 excel 56 'WORKSHEETS' = sheet 57 EXPORTING 58 #1 = 1. 59 60 SET PROPERTY OF sheet 'NAME' = 'Color Palette'. 61 CALL METHOD OF 62 sheet 63 'ACTIVATE'. 64 65 DATA: col TYPE i VALUE 1, 66 row TYPE i VALUE 2, 67 col1 TYPE i VALUE 2, 68 col_real TYPE i VALUE 1. 69 70 row = 1. 71 col = 2. 72 CALL METHOD OF 73 excel 74 'Cells' = h_cell 75 EXPORTING 76 #1 = row 77 #2 = col. 78 SET PROPERTY OF h_cell 'Value' = 'No.'. 79 80 col = col + 1. 81 CALL METHOD OF 82 excel 83 'Cells' = h_cell 84 EXPORTING 85 #1 = row 86 #2 = col. 87 SET PROPERTY OF h_cell 'Value' = 'Background'. 88 89 col = col + 1. 90 CALL METHOD OF 91 excel 92 'Cells' = h_cell 93 EXPORTING 94 #1 = row 95 #2 = col. 96 SET PROPERTY OF h_cell 'Value' = 'Foreground with white background'. 97 98 col = col + 1. 99 CALL METHOD OF 100 excel 101 'Cells' = h_cell 102 EXPORTING 103 #1 = row 104 #2 = col. 105 SET PROPERTY OF h_cell 'Value' = 'Foreground with black background'. 106 107 CALL METHOD OF 108 excel 109 'Rows' = h_rows 110 EXPORTING 111 #1 = '2:2'. 112 SET PROPERTY OF h_rows 'WrapText' = 1. 113 114 col = 8. 115 CALL METHOD OF 116 excel 117 'Cells' = h_cell 118 EXPORTING 119 #1 = row 120 #2 = col. 121 SET PROPERTY OF h_cell 'Value' = 'No.'. 122 123 col = col + 1. 124 CALL METHOD OF 125 excel 126 'Cells' = h_cell 127 EXPORTING 128 #1 = row 129 #2 = col. 130 SET PROPERTY OF h_cell 'Value' = 'Background'. 131 132 col = col + 1. 133 CALL METHOD OF 134 excel 135 'Cells' = h_cell 136 EXPORTING 137 #1 = row 138 #2 = col. 139 SET PROPERTY OF h_cell 'Value' = 'Foreground with white background'. 140 SET PROPERTY OF h_cell 'Bold' = 1. 141 142 col = col + 1. 143 CALL METHOD OF 144 excel 145 'Cells' = h_cell 146 EXPORTING 147 #1 = row 148 #2 = col. 149 SET PROPERTY OF h_cell 'Value' = 'Foreground with black background'. 150 151 CALL METHOD OF 152 excel 153 'Rows' = h_rows 154 EXPORTING 155 #1 = '1:1'. 156 SET PROPERTY OF h_rows 'WrapText' = 1. 157 GET PROPERTY OF h_rows 'Font' = h_font. 158 SET PROPERTY OF h_font 'Bold' = 1. 159 160 161 count = 1. 162 count_real = count. 163 row = 2. 164 col = 2. 165 DO 56 TIMES. 166 PERFORM write_num_and_color. 167 ENDDO. 168 169 170 CALL METHOD OF 171 excel 172 'Columns' = h_columns 173 EXPORTING 174 #1 = 'B:K'. 175 GET PROPERTY OF h_columns 'EntireColumn' = h_entirecol. 176 SET PROPERTY OF h_entirecol 'Autofit' = 1. 177 178 179 180 *&---------------------------------------------------------------------* 181 *& Form write_num_and_color 182 *&---------------------------------------------------------------------* 183 * text 184 *----------------------------------------------------------------------* 185 FORM write_num_and_color. 186 187 " write the color number 188 index = row_max * ( row - 1 ) + col. 189 CALL METHOD OF 190 sheet 191 'Cells' = cells 192 EXPORTING 193 #1 = index. 194 SET PROPERTY OF cells 'Value' = count_real. 195 196 " write the color as the background 197 col = col + 1. 198 CALL METHOD OF 199 excel 200 'Cells' = h_cell 201 EXPORTING 202 #1 = row 203 #2 = col. 204 GET PROPERTY OF h_cell 'Interior' = h_int. 205 SET PROPERTY OF h_int 'ColorIndex' = count_real. 206 207 " write the color as the foreground with a white background 208 col = col + 1. 209 CALL METHOD OF 210 excel 211 'Cells' = h_cell 212 EXPORTING 213 #1 = row 214 #2 = col. 215 SET PROPERTY OF h_cell 'Value' = 'Sample Text'. 216 GET PROPERTY OF h_cell 'Font' = h_f. 217 SET PROPERTY OF h_f 'ColorIndex' = count_real. 218 219 " write the color as the foreground with a black background 220 col = col + 1. 221 CALL METHOD OF 222 excel 223 'Cells' = h_cell 224 EXPORTING 225 #1 = row 226 #2 = col. 227 GET PROPERTY OF h_cell 'Interior' = h_int. 228 SET PROPERTY OF h_int 'ColorIndex' = 1. 229 SET PROPERTY OF h_cell 'Value' = 'Sample Text'. 230 GET PROPERTY OF h_cell 'Font' = h_f. 231 SET PROPERTY OF h_f 'ColorIndex' = count_real. 232 233 row = row + 1. 234 col = col - 3. 235 count = count + 1. 236 IF count = 29. 237 count = 1. 238 row = 2. 239 col = col + 6. 240 ENDIF. 241 count_real = count_real + 1. 242 243 ENDFORM. "write_num_and_color
View Code
12.SAP中动态内表
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH022 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh022. 10 TYPE-POOLS: abap. 11 FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE, 12 <dyn_wa>, 13 <dyn_field>. 14 DATA: dy_table TYPE REF TO data, 15 dy_line TYPE REF TO data, 16 xfc TYPE lvc_s_fcat, 17 ifc TYPE lvc_t_fcat. 18 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. 19 PARAMETERS: p_table(30) TYPE c DEFAULT 'T001'. 20 SELECTION-SCREEN END OF BLOCK b1. 21 22 START-OF-SELECTION. 23 PERFORM get_structure. 24 PERFORM create_dynamic_itab. 25 PERFORM get_data. 26 PERFORM write_out. 27 *&--------------------------------------------------------------------* 28 *& Form get_structure 29 *&--------------------------------------------------------------------* 30 * text 31 *---------------------------------------------------------------------* 32 FORM get_structure. 33 DATA: idetails TYPE abap_compdescr_tab, 34 xdetails TYPE abap_compdescr. 35 DATA: ref_table_des TYPE REF TO cl_abap_structdescr. 36 ref_table_des ?= cl_abap_typedescr=>describe_by_name( p_table ). 37 38 idetails[] = ref_table_des->components[]. 39 LOOP AT idetails INTO xdetails. 40 CLEAR xfc. 41 xfc-fieldname = xdetails-name. 42 xfc-datatype = xdetails-type_kind. 43 xfc-inttype = xdetails-type_kind. 44 xfc-intlen = xdetails-length. 45 xfc-decimals = xdetails-decimals. 46 APPEND xfc TO ifc. 47 ENDLOOP. 48 ENDFORM. "get_structure 49 *&--------------------------------------------------------------------* 50 *& Form create_dynamic_itab 51 *&--------------------------------------------------------------------* 52 * text 53 *---------------------------------------------------------------------* 54 FORM create_dynamic_itab. 55 CALL METHOD cl_alv_table_create=>create_dynamic_table 56 EXPORTING 57 it_fieldcatalog = ifc 58 IMPORTING 59 ep_table = dy_table. 60 ASSIGN dy_table->* TO <dyn_table>. 61 CREATE DATA dy_line LIKE LINE OF <dyn_table>. 62 ASSIGN dy_line->* TO <dyn_wa>. 63 ENDFORM. "create_dynamic_itab 64 *&--------------------------------------------------------------------* 65 *& Form get_data 66 *&--------------------------------------------------------------------* 67 * text 68 *---------------------------------------------------------------------* 69 FORM get_data. 70 SELECT * INTO TABLE <dyn_table> FROM (p_table). 71 ENDFORM. "get_data 72 *&--------------------------------------------------------------------* 73 *& Form write_out 74 *&--------------------------------------------------------------------* 75 * text 76 *---------------------------------------------------------------------* 77 FORM write_out. 78 LOOP AT <dyn_table> INTO <dyn_wa>. 79 DO. 80 ASSIGN COMPONENT sy-index OF STRUCTURE <dyn_wa> TO <dyn_field>. 81 IF sy-subrc <> 0. 82 EXIT. 83 ENDIF. 84 IF sy-index = 1. 85 WRITE:/ <dyn_field>. 86 ELSE. 87 WRITE: <dyn_field>. 88 ENDIF. 89 ENDDO. 90 ENDLOOP. 91 ENDFORM. "write_out
View Code
13. SAP中XML生成并解析
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH027 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh027. 10 * 参考江正军的博客:https://www.cnblogs.com/jiangzhengjun/p/4265595.html 11 TYPE-POOLS: ixml,abap. 12 TYPES: BEGIN OF xml_line, 13 data(1024) TYPE x,"这里的长度设置不会影响输出结果,设置成1都可以 14 END OF xml_line. 15 DATA: l_ixml TYPE REF TO if_ixml, 16 l_streamfactory TYPE REF TO if_ixml_stream_factory, 17 l_ostream TYPE REF TO if_ixml_ostream, 18 l_renderer TYPE REF TO if_ixml_renderer, 19 l_document TYPE REF TO if_ixml_document. 20 DATA: l_element_flights TYPE REF TO if_ixml_element, 21 l_element_airline TYPE REF TO if_ixml_element, 22 l_element_flight TYPE REF TO if_ixml_element, 23 l_element_dummy TYPE REF TO if_ixml_element, 24 l_value TYPE string. 25 DATA: l_xml_table TYPE TABLE OF xml_line WITH HEADER LINE, 26 l_xml_size TYPE i, 27 l_rc TYPE i. 28 FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE, 29 <dyn_wa>, 30 <dyn_field>. 31 DATA: path TYPE string VALUE 'd:/users/DNAT10218/Desktop/TEST/XML//flights.xml'. " xml文件保存的路径 32 DATA: dy_table TYPE REF TO data, 33 dy_line TYPE REF TO data, 34 xfc TYPE lvc_s_fcat, 35 ifc TYPE lvc_t_fcat. 36 37 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. 38 PARAMETERS: p_table(30) TYPE c DEFAULT 'T001'. 39 SELECTION-SCREEN END OF BLOCK b1. 40 41 START-OF-SELECTION. 42 43 PERFORM frm_get_structure. "获取表结构 44 PERFORM create_dynamic_itab. 45 PERFORM frm_get_data. "取数 46 47 PERFORM frm_create_xml_file."生成XML数据 48 PERFORM frm_save_xml_file. "保存到本地XML文件 49 PERFORM frm_open_xml_file. "打开本地XML文件 50 PERFORM frm_xml_to_str. "将XML转换成字符串并解析 51 52 53 **************************************************************** 54 *&---------------------------------------------------------------------* 55 *& Form GET_STRUCTURE 56 *&---------------------------------------------------------------------* 57 * text 58 *----------------------------------------------------------------------* 59 * --> p1 text 60 * <-- p2 text 61 *----------------------------------------------------------------------* 62 FORM frm_get_structure . 63 * 参考江正军SAP 表的反射 https://www.cnblogs.com/jiangzhengjun/p/4264644.html 64 DATA: idetails TYPE abap_compdescr_tab, 65 xdetails TYPE abap_compdescr. 66 DATA: ref_table_des TYPE REF TO cl_abap_structdescr. 67 68 * ref_table_des ?= cl_abap_typedescr=>describe_by_name( p_table )."结构类型 69 ref_table_des ?= cl_abap_tabledescr=>describe_by_name( p_table )."结构类型 70 71 idetails[] = ref_table_des->components[]."组成结构体的各个字段组件 72 73 LOOP AT idetails INTO xdetails. 74 CLEAR xfc. 75 xfc-fieldname = xdetails-name. 76 xfc-datatype = xdetails-type_kind. 77 xfc-inttype = xdetails-type_kind. 78 xfc-intlen = xdetails-length. 79 xfc-decimals = xdetails-decimals. 80 APPEND xfc TO ifc. 81 ENDLOOP. 82 ENDFORM. " GET_STRUCTURE 83 *&---------------------------------------------------------------------* 84 *& Form FRM_GET_DATA 85 *&---------------------------------------------------------------------* 86 * text 87 *----------------------------------------------------------------------* 88 * --> p1 text 89 * <-- p2 text 90 *----------------------------------------------------------------------* 91 FORM frm_get_data . 92 * SELECT * INTO TABLE <dyn_table> FROM (p_table). 93 SELECT * FROM (p_table) INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO 3 ROWS. 94 * SELECT * INTO TABLE <dyn_table> FROM (p_table) UP TO 3 ROWS. 95 ENDFORM. " FRM_GET_DATA 96 *&---------------------------------------------------------------------* 97 *& Form FRM_CREATE_XML_FILE 98 *&---------------------------------------------------------------------* 99 * text 100 *----------------------------------------------------------------------* 101 * --> p1 text 102 * <-- p2 text 103 *----------------------------------------------------------------------* 104 FORM frm_create_xml_file . 105 DATA: lv_idx TYPE string, 106 name TYPE string, 107 total TYPE i, 108 totalcol TYPE string, 109 totalitem TYPE string, 110 tablename TYPE string. 111 tablename = p_table. 112 * 获取表的总列数 113 DESCRIBE TABLE ifc LINES total. 114 totalcol = total. 115 * 获取内表总条目数 116 DESCRIBE TABLE <dyn_table> LINES total. 117 totalitem = total. 118 LOOP AT <dyn_table> INTO <dyn_wa>. 119 120 AT FIRST. 121 * 创建 ixml factory 122 l_ixml = cl_ixml=>create( ). 123 * 创建 the dom object model 124 l_document = l_ixml->create_document( ). 125 * 填充 root node with value flow 126 l_element_flights = l_document->create_simple_element( 127 name = 'TABLESTRUCT' 128 parent = l_document ). 129 DATA:date TYPE string, 130 time TYPE string. 131 date = sy-datum. 132 time = sy-uzeit. 133 * 设置XML元素的属性 134 l_rc = l_element_flights->set_attribute( name = 'DATE' value = date ). 135 l_rc = l_element_flights->set_attribute( name = 'TIME' value = time ). 136 l_rc = l_element_flights->set_attribute( name = '创建者' value = '陈辉' ). 137 l_rc = l_element_flights->set_attribute( name = 'TABLENAME' value = tablename ). 138 l_element_airline = l_document->create_simple_element( 139 name = 'TABLE' 140 parent = l_element_flights ). "parent为父节点 141 142 l_rc = l_element_airline->set_attribute( name = 'TOTALITEM' value = totalitem ). 143 l_rc = l_element_airline->set_attribute( name = 'TOTALCOL' value = totalcol ). 144 145 ENDAT. 146 147 LOOP AT ifc INTO xfc. 148 149 name = xfc-fieldname. 150 151 l_element_flight = l_document->create_simple_element( 152 name = name 153 parent = l_element_airline ). 154 l_rc = l_element_flight->set_attribute( name = 'COLNAME' value = name ). 155 156 CLEAR:l_value. 157 CONCATENATE '<DYN_WA>-' xfc-fieldname INTO l_value. 158 FIELD-SYMBOLS <fs>. 159 ASSIGN (l_value) TO <fs>. 160 l_value = <fs>. 161 l_element_dummy = l_document->create_simple_element( 162 name = 'VALUE' 163 value = l_value 164 parent = l_element_flight ). 165 lv_idx = sy-tabix . 166 l_rc = l_element_dummy->set_attribute( name = 'INDEX' value = lv_idx ). 167 UNASSIGN:<fs>. 168 ENDLOOP. 169 ENDLOOP. 170 * Creating a stream factory 171 l_streamfactory = l_ixml->create_stream_factory( )."[stri:m] 流 172 * Connect internal XML table to stream factory 173 l_ostream = l_streamfactory->create_ostream_itable( table = l_xml_table[] ). 174 * Rendering the document 175 l_renderer = l_ixml->create_renderer( ostream = l_ostream " 176 document = l_document )." l_document为根节点 177 l_rc = l_renderer->render( )."注:执行此句后, l_xml_table内表里才会有数据 178 l_xml_size = l_ostream->get_num_written_raw( )."取得XML数据大小 179 ENDFORM. " FRM_CREATE_XML_FILE 180 *&---------------------------------------------------------------------* 181 *& Form FRM_SAVE_XML_FILE 182 *&---------------------------------------------------------------------* 183 * text 184 *----------------------------------------------------------------------* 185 * --> p1 text 186 * <-- p2 text 187 *----------------------------------------------------------------------* 188 FORM frm_save_xml_file . 189 **--将xml数据导出到本地 190 CALL METHOD cl_gui_frontend_services=>gui_download 191 EXPORTING 192 bin_filesize = l_xml_size 193 filename = path 194 filetype = 'BIN' 195 CHANGING 196 data_tab = l_xml_table[]. 197 ENDFORM. " FRM_SAVE_XML_FILE 198 *&---------------------------------------------------------------------* 199 *& Form FRM_OPEN_XML_FILE 200 *&---------------------------------------------------------------------* 201 * text 202 *----------------------------------------------------------------------* 203 * --> p1 text 204 * <-- p2 text 205 *----------------------------------------------------------------------* 206 FORM frm_open_xml_file . 207 **--将XML数据导入到内表 208 DATA xmldata TYPE xstring . 209 DATA: result_xml TYPE STANDARD TABLE OF smum_xmltb . 210 DATA: return TYPE STANDARD TABLE OF bapiret2 . 211 DATA: wa_xml TYPE smum_xmltb. 212 "如果需要上载XML可以用一下方法 213 CALL FUNCTION 'GUI_UPLOAD' 214 EXPORTING 215 filename = path 216 filetype = 'BIN' 217 IMPORTING 218 filelength = l_xml_size 219 TABLES 220 data_tab = l_xml_table. 221 * "将二进制内表转换(拼接)成一个二进制串 222 CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' 223 EXPORTING 224 input_length = l_xml_size 225 IMPORTING 226 buffer = xmldata 227 TABLES 228 binary_tab = l_xml_table. 229 CALL FUNCTION 'SMUM_XML_PARSE'"解析XML 230 EXPORTING 231 xml_input = xmldata 232 TABLES 233 xml_table = result_xml 234 return = return. 235 WRITE: /, '解析结果如下'. 236 LOOP AT result_xml INTO wa_xml . 237 WRITE: / wa_xml-hier,wa_xml-type,wa_xml-cname,wa_xml-cvalue. 238 ENDLOOP. 239 ENDFORM. " FRM_OPEN_XML_FILE 240 *&---------------------------------------------------------------------* 241 *& Form FRM_XML_TO_STR 242 *&---------------------------------------------------------------------* 243 * text 244 *----------------------------------------------------------------------* 245 * --> p1 text 246 * <-- p2 text 247 *----------------------------------------------------------------------* 248 FORM frm_xml_to_str . 249 **将XML转换成字符串 250 DATA: w_string TYPE xstring. 251 DATA ls_xml TYPE string. 252 DATA: convin TYPE REF TO cl_abap_conv_in_ce. 253 DATA: str TYPE string. 254 255 CALL FUNCTION 'SDIXML_DOM_TO_XML' 256 EXPORTING 257 document = l_document 258 IMPORTING 259 xml_as_string = w_string 260 size = l_xml_size 261 TABLES 262 xml_as_table = l_xml_table. 263 264 "创建解码对象 265 convin = cl_abap_conv_in_ce=>create( input = w_string ). 266 267 CALL METHOD convin->read 268 IMPORTING 269 data = ls_xml. 270 SKIP 10. 271 WRITE:/,'********************************************************************'. 272 WRITE: / ls_xml. 273 * BREAK-POINT. " 请查看ls_xml的值 并采用标准解析:http://tool.oschina.net/codeformat/xml/ 274 275 276 * 将一个二进制串分割存储到二进制内表中 277 CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' 278 EXPORTING 279 buffer = w_string 280 IMPORTING 281 output_length = l_xml_size 282 TABLES 283 binary_tab = l_xml_table. 284 * 将二进制内表转换(拼接)成一个字符串 285 CALL FUNCTION 'SCMS_BINARY_TO_STRING' 286 EXPORTING 287 input_length = l_xml_size 288 IMPORTING 289 text_buffer = ls_xml 290 TABLES 291 binary_tab = l_xml_table. 292 SKIP 10. 293 WRITE:/,'********************************************************************'. 294 WRITE: / ls_xml. 295 ENDFORM. " FRM_XML_TO_STR 296 *&---------------------------------------------------------------------* 297 *& Form FRM_XML_TO_TABLE 298 *&---------------------------------------------------------------------* 299 * text 300 *----------------------------------------------------------------------* 301 * --> p1 text 302 * <-- p2 text 303 *----------------------------------------------------------------------* 304 FORM frm_xml_to_table . 305 306 ENDFORM. " FRM_XML_TO_TABLE 307 *&---------------------------------------------------------------------* 308 *& Form CREATE_DYNAMIC_ITAB 309 *&---------------------------------------------------------------------* 310 * text 311 *----------------------------------------------------------------------* 312 * --> p1 text 313 * <-- p2 text 314 *----------------------------------------------------------------------* 315 FORM create_dynamic_itab . 316 CALL METHOD cl_alv_table_create=>create_dynamic_table 317 EXPORTING 318 it_fieldcatalog = ifc 319 IMPORTING 320 ep_table = dy_table. 321 ASSIGN dy_table->* TO <dyn_table>. 322 CREATE DATA dy_line LIKE LINE OF <dyn_table>. 323 ASSIGN dy_line->* TO <dyn_wa>. 324 ENDFORM. " CREATE_DYNAMIC_ITAB
View Code
14.ABAP中递归与迭代的使用(斐波拉列契数据与阶乘问题)
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH031 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh031. 10 DATA:lv_a TYPE i, 11 lv_b TYPE i, 12 lv_c TYPE i, 13 count TYPE i. 14 lv_a = 1. 15 lv_b = 1. 16 * lv_c = lv_a + lv_b. 17 WRITE:/,'第一次调用递归函数(斐波拉列契数列):'. 18 PERFORM frm_fbllq USING lv_a lv_b CHANGING lv_c. 19 WRITE:'最终结果:','A=',lv_a,'B=',lv_b,'C=',lv_c. 20 SKIP 3. 21 CLEAR:lv_a,lv_b,lv_c,count. 22 lv_a = 5. 23 * lv_c = lv_a * (lv_a - 1) * ...* 1. 24 WRITE:/,'第二次调用递归函数(阶乘):'. 25 PERFORM frm_jc USING lv_a CHANGING lv_c. 26 WRITE:'最终结果:','A=',lv_a,'C=',lv_c. 27 *&---------------------------------------------------------------------* 28 *& Form frm_fbllq 29 *&---------------------------------------------------------------------* 30 * text 31 *----------------------------------------------------------------------* 32 * --> p1 text 33 * <-- p2 text 34 *----------------------------------------------------------------------* 35 FORM frm_fbllq USING p_a p_b CHANGING p_c. 36 count = count + 1. 37 WRITE:/,count,p_a,p_b,p_c. 38 IF p_a >= 10. 39 EXIT. 40 ELSE. 41 p_c = p_a + p_b. 42 p_a = p_b. 43 p_b = p_c. 44 PERFORM frm_fbllq USING p_a p_b CHANGING p_c. 45 ENDIF. 46 ENDFORM. " frm_fbllq 47 *&---------------------------------------------------------------------* 48 *& Form FRM_JC 49 *&---------------------------------------------------------------------* 50 * text 51 *----------------------------------------------------------------------* 52 * --> p1 text 53 * <-- p2 text 54 *----------------------------------------------------------------------* 55 FORM frm_jc USING p_a CHANGING p_c. 56 count = count + 1. 57 WRITE:/,count,p_a,p_c. 58 IF p_c IS INITIAL. 59 p_c = 1. 60 ENDIF. 61 IF p_a = 1 OR p_a <= 0. 62 EXIT. 63 ELSE. 64 p_c = p_a * p_c. 65 p_a = p_a - 1. 66 PERFORM frm_jc USING p_a CHANGING p_c. 67 ENDIF. 68 ENDFORM. " FRM_JC
View Code
15.ABAP中测试三位数的水仙花数
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH032 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 *打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数, 9 *其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ", 10 *因为153=1的三次方+5的三次方+3的三次方 11 REPORT zchenh032. 12 DATA:BEGIN OF gt_sxhs OCCURS 0, 13 sxhs TYPE c LENGTH 3, 14 col1 TYPE i , 15 col2 TYPE i , 16 col3 TYPE i , 17 END OF gt_sxhs. 18 19 PERFORM frm_get_data. 20 *&---------------------------------------------------------------------* 21 *& Form FRM_GET_DATA 22 *&---------------------------------------------------------------------* 23 * text 24 *----------------------------------------------------------------------* 25 * --> p1 text 26 * <-- p2 text 27 *----------------------------------------------------------------------* 28 FORM frm_get_data . 29 DATA:lv_sxhs TYPE c LENGTH 3. 30 DO 999 TIMES. 31 gt_sxhs-sxhs = sy-index. 32 APPEND gt_sxhs. 33 ENDDO. 34 LOOP AT gt_sxhs WHERE sxhs BETWEEN 100 AND 999. 35 gt_sxhs-col1 = gt_sxhs-sxhs+0(1). " 百位 36 gt_sxhs-col2 = gt_sxhs-sxhs+1(1). " 十位 37 gt_sxhs-col3 = gt_sxhs-sxhs+2(1). " 个位 38 lv_sxhs = gt_sxhs-col1 * gt_sxhs-col1 * gt_sxhs-col1 + 39 gt_sxhs-col2 * gt_sxhs-col2 * gt_sxhs-col2 + 40 gt_sxhs-col3 * gt_sxhs-col3 * gt_sxhs-col3. 41 IF lv_sxhs EQ gt_sxhs-sxhs. 42 WRITE:/,'水仙花数',gt_sxhs-sxhs,'=',gt_sxhs-col1,'的三次方 乘以',gt_sxhs-col2,'的三次方 乘以',gt_sxhs-col3,'的三次方'. 43 ENDIF. 44 ENDLOOP. 45 46 ENDFORM. " FRM_GET_DATA
View Code
16.ABAP前台进度条
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH028 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh028. 10 11 DATA:count TYPE string. " 内表总数据条数 12 DATA:msg TYPE string. " 显示的消息 13 DATA:index TYPE string. " 当前处理的索引 14 15 DATA:BEGIN OF gt_tab OCCURS 0, 16 col1 TYPE string, 17 END OF gt_tab . 18 19 20 " 插入100条空数据 21 DO 10000 TIMES. 22 APPEND gt_tab. 23 ENDDO. 24 DESCRIBE TABLE gt_tab LINES count. 25 26 27 * 进度条显示 28 LOOP AT gt_tab. 29 CLEAR:msg,index. 30 index = sy-tabix. 31 CONCATENATE '正在处理。。。' index '/' count INTO msg. " 拼接消息 32 index = index / count * 100. " 时钟显示的百分比 33 34 CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' 35 EXPORTING 36 percentage = index " 处理的百分比 37 text = msg. 38 ENDLOOP.
View Code
17.ABAP 分组测试
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH029 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh029. 10 11 TYPES:BEGIN OF gs_tab, 12 col1(10), 13 col2(10), 14 col3(10), 15 col4(10), 16 END OF gs_tab. 17 DATA: gt_tab TYPE gs_tab OCCURS 0 WITH HEADER LINE. 18 DATA: gt_tcd TYPE gs_tab OCCURS 0 WITH HEADER LINE. 19 DATA: gs_ab TYPE gs_tab. 20 gs_ab-col1 = '1000'.gs_ab-col2 = 'aaa1'.gs_ab-col3 = 1. gs_ab-col4 = 'A'. APPEND gs_ab TO gt_tab. 21 gs_ab-col1 = '1000'.gs_ab-col2 = 'aaa2'.gs_ab-col3 = 2. gs_ab-col4 = 'A'. APPEND gs_ab TO gt_tab. 22 gs_ab-col1 = '2000'.gs_ab-col2 = 'aaa2'.gs_ab-col3 = 3. gs_ab-col4 = 'A'. APPEND gs_ab TO gt_tab. 23 gs_ab-col1 = '2000'.gs_ab-col2 = 'aaa2'.gs_ab-col3 = 4. gs_ab-col4 = 'A'. APPEND gs_ab TO gt_tab. 24 gs_ab-col1 = '2000'.gs_ab-col2 = 'aaa3'.gs_ab-col3 = 5. gs_ab-col4 = 'A'. APPEND gs_ab TO gt_tab. 25 gs_ab-col1 = '3000'.gs_ab-col2 = 'aaa3'.gs_ab-col3 = 6. gs_ab-col4 = 'A'. APPEND gs_ab TO gt_tab. 26 27 LOOP AT gt_tab. 28 * AT END OF col4. 29 AT NEW col4. 30 APPEND gt_tab TO gt_tcd. 31 ENDAT. 32 ENDLOOP. 33 34 LOOP AT gt_tcd. 35 WRITE:gt_tcd-col1,' ',gt_tcd-col2,' ',gt_tcd-col3,' ',gt_tcd-col4,' ',/. 36 ENDLOOP.
View Code
18. 修改已经释放的请求
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH026 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh026. 10 TABLES: e070. 11 PARAMETERS : p_trkorr LIKE e070-trkorr OBLIGATORY. 12 13 UPDATE e070 SET trstatus = 'D' "将状态还原成‘可修改’ 14 WHERE trkorr = p_trkorr. "输入的需要处理的TR 15 16 IF sy-subrc = 0. 17 COMMIT WORK. 18 MESSAGE 'OK' TYPE 'S'. 19 ELSE. 20 ROLLBACK WORK. 21 MESSAGE 'ERROR!' TYPE 'E'. 22 ENDIF.
View Code
19.质数判断
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH054 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 *参考文章:https://blog.csdn.net/codeswarrior/article/details/78053754 9 REPORT zchenh054. 10 DATA:start_time TYPE timestamp, 11 end_time TYPE timestamp, 12 produce_time TYPE timestamp, 13 start TYPE brutto. 14 15 CONSTANTS:lv_max TYPE i VALUE 10000. 16 17 DATA:BEGIN OF gt_data OCCURS 0, 18 index TYPE sy-index, 19 num TYPE string, 20 status, 21 msg(20), 22 END OF gt_data. 23 24 START-OF-SELECTION. 25 GET TIME STAMP FIELD start_time. 26 27 *gt_data-num = 97. 28 *PERFORM frm_check_data USING gt_data-num 29 * CHANGING gt_data-status 30 * gt_data-msg. 31 *WRITE:gt_data-msg,/. 32 33 DO lv_max TIMES. 34 CLEAR:gt_data. 35 gt_data-num = sy-index. 36 PERFORM frm_check_data USING gt_data-num 37 CHANGING gt_data-status 38 gt_data-msg. 39 IF gt_data-status EQ 'S'. 40 APPEND gt_data. 41 ENDIF. 42 ENDDO. 43 44 LOOP AT gt_data. 45 CONDENSE:gt_data-msg. 46 WRITE:sy-tabix,gt_data-msg,/. 47 ENDLOOP. 48 49 END-OF-SELECTION. 50 GET TIME STAMP FIELD end_time. 51 produce_time = end_time - start_time. 52 WRITE:'持续运行时间:',produce_time,'秒'. 53 54 55 *&---------------------------------------------------------------------* 56 *& Form FRM_CHECK_DATA 57 *&---------------------------------------------------------------------* 58 * 判断一个数是否是质数 59 *----------------------------------------------------------------------* 60 * --> p1 text 61 * <-- p2 text 62 *----------------------------------------------------------------------* 63 FORM frm_check_data USING p_num TYPE string 64 CHANGING p_status TYPE char1 65 p_msg TYPE char20. 66 DATA: b TYPE string VALUE 0, 67 c TYPE string VALUE 0, 68 d TYPE string VALUE 0, 69 e TYPE string VALUE 0. 70 71 CONDENSE:p_msg. 72 p_msg = p_num. 73 74 *1. 特殊质数判断 75 IF p_num EQ 2 OR p_num EQ 3. 76 p_status = 'S'. 77 CONCATENATE p_msg '是质数' INTO p_msg. 78 RETURN. 79 ENDIF. 80 81 *2.不在6的倍数两侧的一定不是质数 82 b = p_num MOD 6. 83 IF b NE 1 AND b NE 5. 84 p_status = 'E'. 85 CONCATENATE p_msg '不是质数' INTO p_msg. 86 RETURN. 87 ENDIF. 88 89 * 3.在6的倍数两侧的也可能不是质数 90 b = 5. 91 c = sqrt( p_num ). 92 WHILE b LE c. 93 d = p_num MOD b. 94 e = p_num MOD ( b + 2 ). 95 IF d EQ 0 OR d EQ 0. 96 p_status = 'E'. 97 CONCATENATE p_msg '不是质数' INTO p_msg. 98 RETURN. 99 ENDIF. 100 b = b + 6. 101 ENDWHILE. 102 103 * 4.排除所有,剩余的是质数 104 p_status = 'S'. 105 CONCATENATE p_msg '是质数' INTO p_msg. 106 ENDFORM. " FRM_CHECK_DATA
View Code
20.ABAP调用播放器播放文件
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH055 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh055. 10 *http://blog.sina.com.cn/s/blog_56d71d930101dmeu.html 11 DATA:ls_parameter TYPE string, 12 lv_file TYPE string VALUE 'D:/users/DNAT10218/Desktop/三国演义.mp4', 13 lv_flag. 14 DATA:times TYPE string VALUE '1', " 播放次数 15 timer TYPE string VALUE '15000'. " 超时时常 16 17 *CONCATENATE 'vbscript createobject("sapi.spvoice").speak("' in_hinttxt '")(windows.close)' INTO ls_parameter. 18 19 *先判断文件是否存在 20 CALL METHOD cl_gui_frontend_services=>file_exist 21 EXPORTING 22 file = lv_file 23 RECEIVING 24 result = lv_flag. 25 IF lv_flag EQ 'X'. 26 27 * CONCATENATE 'VBSCRIPT:EXECUTE("DOCUMENT.WRITE ""<BGSOUND SRC=' lv_file '","","/")+"''' 28 * 'loop=' ''''times'''>"":window.setTimeout ""window.close()"",' timer '")' INTO ls_parameter. 29 30 CALL METHOD cl_gui_frontend_services=>execute 31 EXPORTING 32 document = lv_file 33 * application = 'MSHTA' 34 * parameter = ls_parameter 35 * default_directory = 36 * maximized = 37 minimized = 'X' 38 * synchronous = 39 operation = 'OPEN' 40 EXCEPTIONS 41 cntl_error = 1 42 error_no_gui = 2 43 bad_parameter = 3 44 file_not_found = 4 45 path_not_found = 5 46 file_extension_unknown = 6 47 error_execute_failed = 7 48 synchronous_failed = 8 49 not_supported_by_gui = 9 50 OTHERS = 10. 51 ENDIF.
View Code
21.ABAP 迷你计算器
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH056 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh056. 10 DATA: x(15) TYPE c. 11 CALL FUNCTION 'FITRV_CALCULATOR' 12 EXPORTING 13 input_value = '0' 14 currency = 'RMB' 15 start_column = '10' 16 start_row = '10' 17 IMPORTING 18 output_value = x 19 EXCEPTIONS 20 invalid_input = 1 21 calculation_canceled = 2 22 OTHERS = 3. 23 24 WRITE:X.
View Code
22.ABAP 保存本地程序
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH057 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh057. 10 TABLES tadir. 11 DATA: BEGIN OF it_table OCCURS 0, 12 obj_name LIKE tadir-obj_name, 13 END OF it_table. 14 DATA report_table TYPE TABLE OF string WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 500. 15 DATA: file TYPE string, 16 path TYPE string. 17 18 SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME." TITLE text-001 . 19 PARAMETER: obj_name LIKE tadir-obj_name DEFAULT 'ZCHENH05'. 20 SELECT-OPTIONS: object FOR tadir-object DEFAULT 'PROG', 21 author FOR tadir-author, 22 devclass FOR tadir-devclass. 23 SELECTION-SCREEN END OF BLOCK blk01 . 24 25 START-OF-SELECTION. 26 PERFORM frm_save_file. 27 *&---------------------------------------------------------------------* 28 *& Form FRM_SAVE_FILE 29 *&---------------------------------------------------------------------* 30 * text 31 *----------------------------------------------------------------------* 32 * --> p1 text 33 * <-- p2 text 34 *----------------------------------------------------------------------* 35 FORM frm_save_file . 36 37 CONCATENATE obj_name '%' INTO obj_name. 38 SELECT obj_name 39 INTO TABLE it_table FROM tadir 40 WHERE obj_name LIKE obj_name 41 AND object IN object 42 AND author IN author 43 AND devclass IN devclass. 44 45 path = 'D:/ABAP/'. 46 CONDENSE path NO-GAPS. 47 48 LOOP AT it_table. 49 50 READ REPORT it_table-obj_name INTO report_table. 51 52 CLEAR file. 53 CONCATENATE path it_table-obj_name '.TXT' INTO file. 54 55 CALL FUNCTION 'GUI_DOWNLOAD' 56 EXPORTING 57 filename = file 58 filetype = 'ASC' 59 TABLES 60 data_tab = report_table. 61 62 ENDLOOP. 63 ENDFORM. " FRM_SAVE_FILE
View Code
23.ABAP 动态拼接Where 语句
1 *&---------------------------------------------------------------------* 2 *& Report ZCHENH043 3 *& 4 *&---------------------------------------------------------------------* 5 *& 6 *& 7 *&---------------------------------------------------------------------* 8 9 REPORT zchenh043. 10 TABLES: zchenh001. 11 12 DATA where_tab(80) OCCURS 10 WITH HEADER LINE. 13 DATA : count_rec TYPE i. 14 15 SELECT-OPTIONS: s_zhigh FOR zchenh001-zhigh NO INTERVALS OBLIGATORY DEFAULT '185'. 16 17 MOVE 'zhigh in s_zhigh' TO where_tab. 18 APPEND where_tab. 19 20 CONCATENATE 'and zname like' '''%陈辉%''' 21 INTO where_tab SEPARATED BY space. 22 APPEND where_tab. 23 CLEAR where_tab. 24 25 SELECT COUNT( * ) INTO count_rec 26 FROM zchenh001 27 WHERE (where_tab). 28 29 WRITE:'共查询到',count_rec.
View Code
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18032.html