2019.03.30 Dialog demo 一个标准使用的dialog程序

mac2025-05-25  67

1 PROGRAM zdemo_dialog. 2 3 INCLUDE zdemo_dialogtop. 4 INCLUDE zdemo_dialogo01. 5 INCLUDE zdemo_dialogi01. 6 INCLUDE zdemo_dialogf01. 7 INCLUDE zdemo_dialoghelp. *&---------------------------------------------------------------------* *& 包含               ZDEMO_DIALOGTOP *&---------------------------------------------------------------------* "屏幕元素定义 DATA"ok_code      TYPE sy-ucomm,   input_one    TYPE char10,   input_two    TYPE char10,   output_three TYPE char10,   cb_descri    TYPE char1. DATA subinput_one TYPE char10. TABLES:t001w,t001l,makt,marc. *&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TABSTRIP_01' CONSTANTSBEGIN OF c_tabstrip_01,              tab1 LIKE sy-ucomm VALUE 'TABSTRIP_01_FC1'"功能代码              tab2 LIKE sy-ucomm VALUE 'TABSTRIP_01_FC2',              tab3 LIKE sy-ucomm VALUE 'TABSTRIP_01_FC3',            END OF c_tabstrip_01. *&SPWIZARD: DATA FOR TABSTRIP 'TABSTRIP_01' CONTROLS:  tabstrip_01 TYPE TABSTRIP. DATABEGIN OF g_tabstrip_01,         subscreen   LIKE sy-dynnr, "子屏幕         prog        LIKE sy-repid VALUE 'ZDEMO_DIALOG'"程序名         pressed_tab LIKE sy-ucomm VALUE c_tabstrip_01-tab1, "按下去得按钮       END OF g_tabstrip_01. DATA:      ok_code LIKE sy-ucomm. *排除按钮 EXCLUDING BUTTON DATA :gt_status TYPE TABLE OF sy-ucomm, "EXCLUDING GT_STATUS       gs_status TYPE sy-ucomm. " *标题 TITLE DATA gv_title TYPE  c LENGTH 10. "标识 SIGN DATA gv_sign_01 TYPE c. *内表 TABLE CTRL 显示 表 TYPES:BEGIN OF ty_tab,         id    TYPE id,         matnr TYPE mard-matnr,         werks TYPE mard-werks,         lgort TYPE mard-lgort,       END OF ty_tab. DATA: lt_tab TYPE TABLE OF ty_tab,       ls_tab TYPE  ty_tab. *table control 控制表 TYPES:BEGIN OF ty_tab_crl,         cbox  TYPE checkbox,         id    TYPE id,         matnr TYPE mard-matnr,         werks TYPE mard-werks,         lgort TYPE mard-lgort,       END OF ty_tab_crl. DATA:gt_tab TYPE TABLE OF ty_tab_crl,      gs_tab TYPE ty_tab_crl. *TABLE CONTROL 控制表2 DATA :gt_tab_1 TYPE TABLE OF ty_tab_crl,       gs_tab_1 TYPE ty_tab_crl. *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL' ITSELF CONTROLS: tc_ctrl TYPE TABLEVIEW USING SCREEN 0120"table control 的控制器 *&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL' DATA:     g_tc_ctrl_lines  LIKE sy-loopc."行数 *DATA:     OK_CODE LIKE SY-UCOMM. *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL_TAB' ITSELF CONTROLS: tc_ctrl_tab TYPE TABLEVIEW USING SCREEN 0130. *&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL_TAB' DATA:     g_tc_ctrl_tab_lines  LIKE sy-loopc. DATA gv_field TYPE lvc_s_fcat-fieldname. DATA gv_lines TYPE i. *DATA:     OK_CODE LIKE SY-UCOMM. *创建选择界面 SELECTION-SCREEN BEGIN OF SCREEN 0111 AS SUBSCREEN. SELECT-OPTIONS s_werks FOR marc-werks. SELECTION-SCREEN END OF SCREEN 0111. *&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_CTRL_TAB_1' ITSELF CONTROLS: tc_ctrl_tab_1 TYPE TABLEVIEW USING SCREEN 0110. *&SPWIZARD: LINES OF TABLECONTROL 'TC_CTRL_TAB_1' DATA:     g_tc_ctrl_tab_1_lines  LIKE sy-loopc. *DATA:     OK_CODE LIKE SY-UCOMM. 1 *&---------------------------------------------------------------------* 2 *& 包含               ZDEMO_DIALOGO01 3 *&---------------------------------------------------------------------* 4 *&---------------------------------------------------------------------* 5 *& Module STATUS_0100 OUTPUT 6 *&---------------------------------------------------------------------* 7 *& 8 *&---------------------------------------------------------------------* 9 MODULE status_0100 OUTPUT. 10   SET PF-STATUS 'STATUS_0100' EXCLUDING gt_status. 11   SET TITLEBAR 'TITLE_0100' WITH gv_title. 12 ENDMODULE. 13 *&---------------------------------------------------------------------* 14 *& Module PBO_0100 OUTPUT 15 *&---------------------------------------------------------------------* 16 *& 17 *&---------------------------------------------------------------------* 18 MODULE pbo_0100 OUTPUT. 19   IF input_one IS NOT INITIAL. 20     output_three = input_one. 21   ELSE. 22     output_three = 'NONE'. 23   ENDIF. 24 25   IF gv_sign_01 = abap_off. 26     cb_descri = 'X'. 27   ENDIF. 28 29 30   IF cb_descri EQ abap_on. 31     LOOP AT SCREEN . 32       IF screen-group1 = 'GP1'. 33         screen-active = '1'. 34       ENDIF. 35       MODIFY SCREEN. 36     ENDLOOP. 37   ELSE. 38     LOOP AT SCREEN . 39       IF screen-group1 = 'GP1'. 40         screen-active = '0'. 41       ENDIF. 42       MODIFY SCREEN. 43     ENDLOOP. 44   ENDIF. 45 46 47 ENDMODULE. 48 49 *&SPWIZARD: OUTPUT MODULE FOR TS 'TABSTRIP_01'. DO NOT CHANGE THIS LINE! 50 *&SPWIZARD: SETS ACTIVE TAB 51 MODULE tabstrip_01_active_tab_set OUTPUT. 52   tabstrip_01-activetab = g_tabstrip_01-pressed_tab. 53   CASE g_tabstrip_01-pressed_tab."根据 按下得页签 来 获取 子屏幕 54     WHEN c_tabstrip_01-tab1. 55       g_tabstrip_01-subscreen = '0110'. 56       gv_title = '-Create'. 57     WHEN c_tabstrip_01-tab2. 58       g_tabstrip_01-subscreen = '0120'. 59       gv_title = '-Modify'. 60     WHEN c_tabstrip_01-tab3. 61       g_tabstrip_01-subscreen = '0130'. 62       gv_title = '-Display'. 63     WHEN OTHERS. 64 *&SPWIZARD:      DO NOTHING 65   ENDCASE. 66 ENDMODULE. 67 *&---------------------------------------------------------------------* 68 *& Module STATUS_0110 OUTPUT 69 *&---------------------------------------------------------------------* 70 *& 71 *&---------------------------------------------------------------------* 72 MODULE status_0110 OUTPUT. 73 * SET PF-STATUS 'xxxxxxxx'. 74 * SET TITLEBAR 'xxx'. 75   subinput_one = input_two. 76 77 ENDMODULE. 78 79 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE! 80 *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR 81 MODULE tc_ctrl_change_tc_attr OUTPUT. 82   DESCRIBE TABLE lt_tab LINES tc_ctrl-lines."获取行数 83 *  DESCRIBE TABLE LT_TAB OCCURS LV_LINES."初始化大小 84   DESCRIBE TABLE lt_tab OCCURS DATA(lv_lines)."初始化大小 85   DESCRIBE TABLE lt_tab KIND DATA(lv_type)."表类型 86 87 ENDMODULE. 88 89 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE! 90 *&SPWIZARD: GET LINES OF TABLECONTROL 91 MODULE tc_ctrl_get_lines OUTPUT. 92   g_tc_ctrl_lines = sy-loopc. 93   CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' 94     EXPORTING 95       input  = ls_tab-matnr 96     IMPORTING 97       output = ls_tab-matnr. 98 99 *  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 100 *    EXPORTING 101 *      input  = ls_tab-id 102 *    IMPORTING 103 *      output = ls_tab-id. 104 ENDMODULE. 105 *&---------------------------------------------------------------------* 106 *& Module GET_TABLE_DATA OUTPUT 107 *&---------------------------------------------------------------------* 108 *& 109 *&---------------------------------------------------------------------* 110 MODULE get_table_data OUTPUT. 111 112   IF lt_tab[] IS INITIAL. 113     SELECT matnr werks lgort FROM mard INTO CORRESPONDING FIELDS OF TABLE lt_tab 114       UP TO 50 ROWS 115       ORDER BY werks lgort. 116     LOOP AT lt_tab ASSIGNING FIELD-SYMBOL(<fs>). 117       <fs>-id = sy-tabix. 118     ENDLOOP. 119   ENDIF. 120 121 ENDMODULE. 122 123 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE! 124 *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR 125 MODULE tc_ctrl_tab_change_tc_attr OUTPUT. 126   DESCRIBE TABLE gt_tab LINES tc_ctrl_tab-lines. 127 ENDMODULE. 128 129 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE! 130 *&SPWIZARD: GET LINES OF TABLECONTROL 131 MODULE tc_ctrl_tab_get_lines OUTPUT. 132   g_tc_ctrl_tab_lines = sy-loopc. 133   CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' 134     EXPORTING 135       input  = gs_tab-matnr 136     IMPORTING 137       output = gs_tab-matnr. 138 139 *  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 140 *    EXPORTING 141 *      input  = gs_tab-id 142 *    IMPORTING 143 *      output = gs_tab-id. 144 ENDMODULE. 145 *&---------------------------------------------------------------------* 146 *& Module GET_TABLE_DATA_130 OUTPUT 147 *&---------------------------------------------------------------------* 148 *& 149 *&---------------------------------------------------------------------* 150 MODULE get_table_data_130 OUTPUT. 151   IF gt_tab[] IS INITIAL. 152     SELECT matnr werks lgort FROM mard INTO CORRESPONDING FIELDS OF TABLE gt_tab 153       UP TO 50 ROWS 154       ORDER BY werks lgort. 155     LOOP AT gt_tab ASSIGNING FIELD-SYMBOL(<fs1>). 156       <fs1>-id = sy-tabix. 157     ENDLOOP. 158   ENDIF. 159 ENDMODULE. 160 161 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LIN 162 *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR 163 MODULE tc_ctrl_tab_1_change_tc_attr OUTPUT. 164   DESCRIBE TABLE gt_tab_1 LINES tc_ctrl_tab_1-lines. 165 ENDMODULE. 166 167 *&SPWIZARD: OUTPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LIN 168 *&SPWIZARD: GET LINES OF TABLECONTROL 169 MODULE tc_ctrl_tab_1_get_lines OUTPUT. 170   g_tc_ctrl_tab_1_lines = sy-loopc. 171 ENDMODULE. 172 *&---------------------------------------------------------------------* 173 *& Module GET_TABLE_DATA_110 OUTPUT 174 *&---------------------------------------------------------------------* 175 *& 176 *&---------------------------------------------------------------------* 177 MODULE get_table_data_110 OUTPUT. 178   IF gt_tab_1[] IS INITIAL. 179     APPEND INITIAL LINE TO gt_tab_1. 180   ENDIF. 181 ENDMODULE. 182 *&---------------------------------------------------------------------* 183 *& Module TC_CTRL_TAB_CHANGE_FIELD_ATTR OUTPUT 184 *&---------------------------------------------------------------------* 185 *& 186 *&---------------------------------------------------------------------* 187 MODULE tc_ctrl_tab_change_field_attr OUTPUT. 188 *  IF gs_tab-cbox = 'X'. 189 *    LOOP AT SCREEN."控制摸个单元格可输入 可输出 190 *      IF screen-name = 'GS_TAB-ID'. 191 *        screen-input = '1'. 192 *        MODIFY SCREEN. 193 *      ENDIF. 194 *    ENDLOOP. 195 *  ENDIF. 196 "光标处回车 可编辑 197   IF tc_ctrl_tab-current_line = gv_lines + tc_ctrl_tab-top_line - 1. 198     LOOP AT SCREEN. 199       IF screen-name = gv_field. 200         screen-input = '1'. 201         MODIFY SCREEN. 202       ENDIF. 203     ENDLOOP. 204   ENDIF. 205 ENDMODULE. 1 *&---------------------------------------------------------------------* 2 *& 包含               ZDEMO_DIALOGI01 3 *&---------------------------------------------------------------------* 4 *&---------------------------------------------------------------------* 5 *&      Module  USER_COMMAND_0100  INPUT 6 *&---------------------------------------------------------------------* 7 *       text 8 *----------------------------------------------------------------------* 9 MODULE user_command_0100 INPUT. 10 11   ok_code = sy-ucomm. 12 13   CASE ok_code. 14     WHEN 'BACK' OR 'CANC'. 15       LEAVE TO SCREEN 0. 16     WHEN 'EXIT'. 17       LEAVE PROGRAM. 18     WHEN 'BT_BACK'. 19       LEAVE TO SCREEN 0. 20 *  WHEN 'BT_EXIT'. 21 *    LEAVE PROGRAM. 22   ENDCASE. 23 24   "滚轮和回车都会触发 PBO 和 PAI 所以需要在function code 使用过后清空 25   CLEAR ok_code. 26   CLEAR sy-ucomm. 27 ENDMODULE. 28 *&---------------------------------------------------------------------* 29 *&      Module  EXIT_COMMAND  INPUT 30 *&---------------------------------------------------------------------* 31 *       text 32 *----------------------------------------------------------------------* 33 MODULE exit_command INPUT. 34   ok_code = sy-ucomm. 35   CASE ok_code. 36 *    WHEN 'BACK' OR 'CANC'. 37 *      LEAVE TO SCREEN 0. 38 *    WHEN 'EXIT'. 39 *      LEAVE PROGRAM. 40 *    WHEN 'BT_BACK'. 41 *      LEAVE TO SCREEN 0. 42     WHEN 'BT_EXIT'. 43       LEAVE PROGRAM. 44   ENDCASE. 45 46   CLEAR ok_code. 47   CLEAR sy-ucomm. 48 ENDMODULE. 49 *&---------------------------------------------------------------------* 50 *&      Module  CHECK_PLANT  INPUT 51 *&---------------------------------------------------------------------* 52 *       text 53 *----------------------------------------------------------------------* 54 MODULE check_plant INPUT. 55 56   SELECT SINGLE name1 INTO t001w-name1 FROM t001w 57     WHERE werks = t001w-werks. 58   IF sy-subrc NE 0. 59     CLEAR :t001w-werks,t001w-name1. 60   ENDIF. 61 62 63 ENDMODULE. 64 *&---------------------------------------------------------------------* 65 *&      Module  CHECK_WAREHOUSE  INPUT 66 *&---------------------------------------------------------------------* 67 *       text 68 *----------------------------------------------------------------------* 69 MODULE check_warehouse INPUT. 70 71   IF t001w-werks IS NOT INITIAL. 72     SELECT SINGLE lgobe INTO t001l-lgobe FROM t001l 73       WHERE werks = t001w-werks AND lgort = t001l-lgort. 74     IF sy-subrc NE 0. 75       CLEAR: t001l-lgort,t001l-lgobe. 76     ENDIF. 77   ELSE. 78     CLEAR: t001l-lgort,t001l-lgobe. 79   ENDIF. 80 ENDMODULE. 81 *&---------------------------------------------------------------------* 82 *&      Module  CHECK_MATERIAL  INPUT 83 *&---------------------------------------------------------------------* 84 *       text 85 *----------------------------------------------------------------------* 86 MODULE check_material INPUT. 87   IF t001w-werks IS NOT INITIAL 88   AND t001l-lgort IS NOT INITIAL. 89     SELECT SINGLE maktx INTO makt-maktx FROM makt 90       WHERE matnr = makt-matnr AND spras = sy-langu. 91   ELSE. 92     CLEAR:makt-matnr,makt-maktx. 93   ENDIF. 94 ENDMODULE. 95 96 *&SPWIZARD: INPUT MODULE FOR TS 'TABSTRIP_01'. DO NOT CHANGE THIS LINE! 97 *&SPWIZARD: GETS ACTIVE TAB 98 MODULE tabstrip_01_active_tab_get INPUT. 99   ok_code = sy-ucomm. 100   CASE ok_code. 101     WHEN c_tabstrip_01-tab1. 102       g_tabstrip_01-pressed_tab = c_tabstrip_01-tab1. 103       REFRESH gt_status. 104 *      gs_status = 'SAVE'."隐藏按钮 105 *      APPEND gs_status TO gt_status. 106 *      CLEAR gs_status. 107     WHEN c_tabstrip_01-tab2. 108       g_tabstrip_01-pressed_tab = c_tabstrip_01-tab2. 109       REFRESH gt_status. 110     WHEN c_tabstrip_01-tab3. 111       g_tabstrip_01-pressed_tab = c_tabstrip_01-tab3. 112       REFRESH gt_status. 113       gs_status = 'SAVE'."隐藏按钮 114       APPEND gs_status TO gt_status. 115       CLEAR gs_status. 116     WHEN OTHERS. 117 *&SPWIZARD:      DO NOTHING 118   ENDCASE. 119 ENDMODULE. 120 *&---------------------------------------------------------------------* 121 *&      Module  SET_SIGNAL  INPUT 122 *&---------------------------------------------------------------------* 123 *       text 124 *----------------------------------------------------------------------* 125 MODULE set_signal INPUT. 126   gv_sign_01 = 'X'. 127 ENDMODULE. 128 *&---------------------------------------------------------------------* 129 *&      Module  USER_COMMAND_0110  INPUT 130 *&---------------------------------------------------------------------* 131 *       text 132 *----------------------------------------------------------------------* 133 MODULE user_command_0110 INPUT. 134 135   ok_code = sy-ucomm. 136 137   CASE ok_code. 138     WHEN 'SUBCK'. 139       IF subinput_one = input_one. 140         MESSAGE 'Data is right' TYPE 'I' DISPLAY LIKE 'S'. 141         g_tabstrip_01-pressed_tab = c_tabstrip_01-tab2. 142         REFRESH gt_status. 143       ELSE. 144         MESSAGE 'No match' TYPE 'I' DISPLAY LIKE 'E'. 145         RETURN. 146       ENDIF. 147   ENDCASE. 148 149 150 ENDMODULE. 151 152 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL'. DO NOT CHANGE THIS LINE! 153 *&SPWIZARD: PROCESS USER COMMAND 154 MODULE tc_ctrl_user_command INPUT. 155   ok_code = sy-ucomm. 156   PERFORM user_ok_tc USING    'TC_CTRL' 157                               'LT_TAB' 158                               ' ' 159                      CHANGING ok_code. 160   sy-ucomm = ok_code. 161 ENDMODULE. 162 163 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE! 164 *&SPWIZARD: MODIFY TABLE 165 MODULE tc_ctrl_tab_modify INPUT. 166   MODIFY gt_tab 167     FROM gs_tab 168     INDEX tc_ctrl_tab-current_line."只能修改不能新增 169 ENDMODULE. 170 171 *&SPWIZARD: INPUT MODUL FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE! 172 *&SPWIZARD: MARK TABLE 173 MODULE tc_ctrl_tab_mark INPUT. 174   DATA: g_tc_ctrl_tab_wa2 LIKE LINE OF gt_tab. 175   IF tc_ctrl_tab-line_sel_mode = 1 176   AND gs_tab-cbox = 'X'. 177     LOOP AT gt_tab INTO g_tc_ctrl_tab_wa2 178       WHERE cbox = 'X'. 179       g_tc_ctrl_tab_wa2-cbox = ''. 180       MODIFY gt_tab 181         FROM g_tc_ctrl_tab_wa2 182         TRANSPORTING cbox. 183     ENDLOOP. 184   ENDIF. 185   MODIFY gt_tab 186     FROM gs_tab 187     INDEX tc_ctrl_tab-current_line 188     TRANSPORTING cbox."修改选中的行 189 ENDMODULE. 190 191 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB'. DO NOT CHANGE THIS LINE! 192 *&SPWIZARD: PROCESS USER COMMAND 193 MODULE tc_ctrl_tab_user_command INPUT. 194   ok_code = sy-ucomm. 195   PERFORM user_ok_tc USING    'TC_CTRL_TAB' 196                               'GT_TAB' 197                               'CBOX' 198                      CHANGING ok_code. 199   sy-ucomm = ok_code. 200 ENDMODULE. 201 202 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LINE 203 *&SPWIZARD: MODIFY TABLE 204 MODULE tc_ctrl_tab_1_modify INPUT. 205   MODIFY gt_tab_1 206     FROM gs_tab_1 207     INDEX tc_ctrl_tab_1-current_line. 208 ENDMODULE. 209 210 *&SPWIZARD: INPUT MODUL FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LINE! 211 *&SPWIZARD: MARK TABLE 212 MODULE tc_ctrl_tab_1_mark INPUT. 213   DATA: g_tc_ctrl_tab_1_wa2 LIKE LINE OF gt_tab_1. 214   IF tc_ctrl_tab_1-line_sel_mode = 1 215   AND gs_tab_1-cbox = 'X'. 216     LOOP AT gt_tab_1 INTO g_tc_ctrl_tab_1_wa2 217       WHERE cbox = 'X'. 218       g_tc_ctrl_tab_1_wa2-cbox = ''. 219       MODIFY gt_tab_1 220         FROM g_tc_ctrl_tab_1_wa2 221         TRANSPORTING cbox. 222     ENDLOOP. 223   ENDIF. 224   MODIFY gt_tab_1 225     FROM gs_tab_1 226     INDEX tc_ctrl_tab_1-current_line 227     TRANSPORTING cbox. 228 ENDMODULE. 229 230 *&SPWIZARD: INPUT MODULE FOR TC 'TC_CTRL_TAB_1'. DO NOT CHANGE THIS LINE 231 *&SPWIZARD: PROCESS USER COMMAND 232 MODULE tc_ctrl_tab_1_user_command INPUT. 233   ok_code = sy-ucomm. 234   PERFORM user_ok_tc USING    'TC_CTRL_TAB_1' 235                               'GT_TAB_1' 236                               'CBOX' 237                      CHANGING ok_code. 238   sy-ucomm = ok_code. 239 ENDMODULE. 240 *&---------------------------------------------------------------------* 241 *&      Module  USER_COMMAND_0130  INPUT 242 *&---------------------------------------------------------------------* 243 *       text 244 *----------------------------------------------------------------------* 245 MODULE user_command_0130 INPUT. 246   ok_code = sy-ucomm. 247 248   CASE ok_code. 249     WHEN 'ID_BT'."modify table control lines 250       PERFORM frm_modify_lines. 251     WHEN OTHERS. 252   ENDCASE. 253 254   CLEAR ok_code. 255   CLEAR sy-ucomm. 256 ENDMODULE. 257 *&---------------------------------------------------------------------* 258 *&      Module  GET_CURSOR  INPUT 259 *&---------------------------------------------------------------------* 260 *       text 261 *----------------------------------------------------------------------* 262 MODULE get_cursor INPUT. 263   GET CURSOR FIELD gv_field LINE gv_lines. 264 ENDMODULE. 1 *&---------------------------------------------------------------------* 2 *& 包含               ZDEMO_DIALOGF01 3 *&---------------------------------------------------------------------* 4 5 *----------------------------------------------------------------------* 6 *   INCLUDE TABLECONTROL_FORMS                                         * 7 *----------------------------------------------------------------------* 8 9 *&---------------------------------------------------------------------* 10 *&      Form  USER_OK_TC 11 *&      标准FORM 标准按钮  引导自动创建              * 12 *&---------------------------------------------------------------------* 13 *&---------------------------------------------------------------------* 14  FORM user_ok_tc USING    p_tc_name TYPE dynfnam 15                           p_table_name 16                           p_mark_name 17                  CHANGING p_ok      LIKE sy-ucomm. 18 19 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 20    DATA: l_ok     TYPE sy-ucomm, 21          l_offset TYPE i. 22 *&SPWIZARD: END OF LOCAL DATA------------------------------------------* 23 24 *&SPWIZARD: Table control specific operations                          * 25 *&SPWIZARD: evaluate TC name and operations                            * 26    SEARCH p_ok FOR p_tc_name. 27    IF sy-subrc <> 0. 28      EXIT. 29    ENDIF. 30    l_offset = strlen( p_tc_name ) + 1. 31    l_ok = p_ok+l_offset. 32 *&SPWIZARD: execute general and TC specific operations                 * 33    CASE l_ok. 34      WHEN 'INSR'.                      "insert row 35        PERFORM fcode_insert_row USING    p_tc_name 36                                          p_table_name. 37        CLEAR p_ok. 38 39      WHEN 'DELE'.                      "delete row 40        PERFORM fcode_delete_row USING    p_tc_name 41                                          p_table_name 42                                          p_mark_name. 43        CLEAR p_ok. 44 45      WHEN 'P--' OR                     "top of list 46           'P-'  OR                     "previous page 47           'P+'  OR                     "next page 48           'P++'.                       "bottom of list 49        PERFORM compute_scrolling_in_tc USING p_tc_name 50                                              l_ok. 51        CLEAR p_ok. 52 *     WHEN 'L--'.                       "total left 53 *       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME. 54 * 55 *     WHEN 'L-'.                        "column left 56 *       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME. 57 * 58 *     WHEN 'R+'.                        "column right 59 *       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME. 60 * 61 *     WHEN 'R++'.                       "total right 62 *       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME. 63 * 64      WHEN 'MARK'.                      "mark all filled lines 65        PERFORM fcode_tc_mark_lines USING p_tc_name 66                                          p_table_name 67                                          p_mark_name   . 68        CLEAR p_ok. 69 70      WHEN 'DMRK'.                      "demark all filled lines 71        PERFORM fcode_tc_demark_lines USING p_tc_name 72                                            p_table_name 73                                            p_mark_name . 74        CLEAR p_ok. 75 76 *     WHEN 'SASCEND'   OR 77 *          'SDESCEND'.                  "sort column 78 *       PERFORM FCODE_SORT_TC USING P_TC_NAME 79 *                                   l_ok. 80 81    ENDCASE. 82 83  ENDFORM.                              " USER_OK_TC 84 85 *&---------------------------------------------------------------------* 86 *&      Form  FCODE_INSERT_ROW                                         * 87 *&---------------------------------------------------------------------* 88  FORM fcode_insert_row 89                USING    p_tc_name           TYPE dynfnam 90                         p_table_name             . 91 92 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 93    DATA l_lines_name       LIKE feld-name. 94    DATA l_selline          LIKE sy-stepl. 95    DATA l_lastline         TYPE i. 96    DATA l_line             TYPE i. 97    DATA l_table_name       LIKE feld-name. 98    FIELD-SYMBOLS <tc>                 TYPE cxtab_control. 99    FIELD-SYMBOLS <table>              TYPE STANDARD TABLE. 100    FIELD-SYMBOLS <lines>              TYPE i. 101 *&SPWIZARD: END OF LOCAL DATA------------------------------------------* 102 103    ASSIGN (p_tc_name) TO <tc>. 104 105 *&SPWIZARD: get the table, which belongs to the tc                     * 106    CONCATENATE p_table_name '[]' INTO l_table_name. "table body 107    ASSIGN (l_table_name) TO <table>.                "not headerline 108 109 *&SPWIZARD: get looplines of TableControl                              * 110    CONCATENATE 'G_' p_tc_name '_LINES' INTO l_lines_name. 111    ASSIGN (l_lines_name) TO <lines>. 112 113 *&SPWIZARD: get current line                                           * 114    GET CURSOR LINE l_selline. 115    IF sy-subrc <> 0.                   " append line to table 116      l_selline = <tc>-lines + 1. 117 *&SPWIZARD: set top line                                               * 118      IF l_selline > <lines>. 119        <tc>-top_line = l_selline - <lines> + 1 . 120      ELSE. 121        <tc>-top_line = 1. 122      ENDIF. 123    ELSE.                               " insert line into table 124      l_selline = <tc>-top_line + l_selline - 1. 125      l_lastline = <tc>-top_line + <lines> - 1. 126    ENDIF. 127 *&SPWIZARD: set new cursor line                                        * 128    l_line = l_selline - <tc>-top_line + 1. 129 130 *&SPWIZARD: insert initial line                                        * 131    INSERT INITIAL LINE INTO <table> INDEX l_selline. 132    <tc>-lines = <tc>-lines + 1. 133 *&SPWIZARD: set cursor                                                 * 134    SET CURSOR LINE l_line. 135 136  ENDFORM.                              " FCODE_INSERT_ROW 137 138 *&---------------------------------------------------------------------* 139 *&      Form  FCODE_DELETE_ROW                                         * 140 *&---------------------------------------------------------------------* 141  FORM fcode_delete_row 142                USING    p_tc_name           TYPE dynfnam 143                         p_table_name 144                         p_mark_name   . 145 146 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 147    DATA l_table_name       LIKE feld-name. 148 149    FIELD-SYMBOLS <tc>         TYPE cxtab_control. 150    FIELD-SYMBOLS <table>      TYPE STANDARD TABLE. 151    FIELD-SYMBOLS <wa>. 152    FIELD-SYMBOLS <mark_field>. 153 *&SPWIZARD: END OF LOCAL DATA------------------------------------------* 154 155    ASSIGN (p_tc_name) TO <tc>. 156 157 *&SPWIZARD: get the table, which belongs to the tc                     * 158    CONCATENATE p_table_name '[]' INTO l_table_name. "table body 159    ASSIGN (l_table_name) TO <table>.                "not headerline 160 161 *&SPWIZARD: delete marked lines                                        * 162    DESCRIBE TABLE <table> LINES <tc>-lines. 163 164    LOOP AT <table> ASSIGNING <wa>. 165 166 *&SPWIZARD: access to the component 'FLAG' of the table header         * 167      ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>. 168 169      IF <mark_field> = 'X'. 170        DELETE <table> INDEX syst-tabix. 171        IF sy-subrc = 0. 172          <tc>-lines = <tc>-lines - 1. 173        ENDIF. 174      ENDIF. 175    ENDLOOP. 176 177  ENDFORM.                              " FCODE_DELETE_ROW 178 179 *&---------------------------------------------------------------------* 180 *&      Form  COMPUTE_SCROLLING_IN_TC 181 *&---------------------------------------------------------------------* 182 *       text 183 *----------------------------------------------------------------------* 184 *      -->P_TC_NAME  name of tablecontrol 185 *      -->P_OK       ok code 186 *----------------------------------------------------------------------* 187  FORM compute_scrolling_in_tc USING    p_tc_name 188                                        p_ok. 189 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 190    DATA l_tc_new_top_line     TYPE i. 191    DATA l_tc_name             LIKE feld-name. 192    DATA l_tc_lines_name       LIKE feld-name. 193    DATA l_tc_field_name       LIKE feld-name. 194 195    FIELD-SYMBOLS <tc>         TYPE cxtab_control. 196    FIELD-SYMBOLS <lines>      TYPE i. 197 *&SPWIZARD: END OF LOCAL DATA------------------------------------------* 198 199    ASSIGN (p_tc_name) TO <tc>. 200 *&SPWIZARD: get looplines of TableControl                              * 201    CONCATENATE 'G_' p_tc_name '_LINES' INTO l_tc_lines_name. 202    ASSIGN (l_tc_lines_name) TO <lines>. 203 204 205 *&SPWIZARD: is no line filled?                                         * 206    IF <tc>-lines = 0. 207 *&SPWIZARD: yes, ...                                                   * 208      l_tc_new_top_line = 1. 209    ELSE. 210 *&SPWIZARD: no, ...                                                    * 211      CALL FUNCTION 'SCROLLING_IN_TABLE' 212        EXPORTING 213          entry_act      = <tc>-top_line 214          entry_from     = 1 215          entry_to       = <tc>-lines 216          last_page_full = 'X' 217          loops          = <lines> 218          ok_code        = p_ok 219          overlapping    = 'X' 220        IMPORTING 221          entry_new      = l_tc_new_top_line 222        EXCEPTIONS 223 *        NO_ENTRY_OR_PAGE_ACT  = 01 224 *        NO_ENTRY_TO    = 02 225 *        NO_OK_CODE_OR_PAGE_GO = 03 226          OTHERS         = 0. 227    ENDIF. 228 229 *&SPWIZARD: get actual tc and column                                   * 230    GET CURSOR FIELD l_tc_field_name 231               AREA  l_tc_name. 232 233    IF syst-subrc = 0. 234      IF l_tc_name = p_tc_name. 235 *&SPWIZARD: et actual column                                           * 236        SET CURSOR FIELD l_tc_field_name LINE 1. 237      ENDIF. 238    ENDIF. 239 240 *&SPWIZARD: set the new top line                                       * 241    <tc>-top_line = l_tc_new_top_line. 242 243 244  ENDFORM.                              " COMPUTE_SCROLLING_IN_TC 245 246 *&---------------------------------------------------------------------* 247 *&      Form  FCODE_TC_MARK_LINES 248 *&---------------------------------------------------------------------* 249 *       marks all TableControl lines 250 *----------------------------------------------------------------------* 251 *      -->P_TC_NAME  name of tablecontrol 252 *----------------------------------------------------------------------* 253  FORM fcode_tc_mark_lines USING p_tc_name 254                                 p_table_name 255                                 p_mark_name. 256 *&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------* 257    DATA l_table_name       LIKE feld-name. 258 259    FIELD-SYMBOLS <tc>         TYPE cxtab_control. 260    FIELD-SYMBOLS <table>      TYPE STANDARD TABLE. 261    FIELD-SYMBOLS <wa>. 262    FIELD-SYMBOLS <mark_field>. 263 *&SPWIZARD: END OF LOCAL DATA------------------------------------------* 264 265    ASSIGN (p_tc_name) TO <tc>. 266 267 *&SPWIZARD: get the table, which belongs to the tc                     * 268    CONCATENATE p_table_name '[]' INTO l_table_name. "table body 269    ASSIGN (l_table_name) TO <table>.                "not headerline 270 271 *&SPWIZARD: mark all filled lines                                      * 272    LOOP AT <table> ASSIGNING <wa>. 273 274 *&SPWIZARD: access to the component 'FLAG' of the table header         * 275      ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>. 276 277      <mark_field> = 'X'. 278    ENDLOOP. 279  ENDFORM.                                          "fcode_tc_mark_lines 280 281 *&---------------------------------------------------------------------* 282 *&      Form  FCODE_TC_DEMARK_LINES 283 *&---------------------------------------------------------------------* 284 *       demarks all TableControl lines 285 *----------------------------------------------------------------------* 286 *      -->P_TC_NAME  name of tablecontrol 287 *----------------------------------------------------------------------* 288  FORM fcode_tc_demark_lines USING p_tc_name 289                                   p_table_name 290                                   p_mark_name . 291 *&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------* 292    DATA l_table_name       LIKE feld-name. 293 294    FIELD-SYMBOLS <tc>         TYPE cxtab_control. 295    FIELD-SYMBOLS <table>      TYPE STANDARD TABLE. 296    FIELD-SYMBOLS <wa>. 297    FIELD-SYMBOLS <mark_field>. 298 *&SPWIZARD: END OF LOCAL DATA------------------------------------------* 299 300    ASSIGN (p_tc_name) TO <tc>. 301 302 *&SPWIZARD: get the table, which belongs to the tc                     * 303    CONCATENATE p_table_name '[]' INTO l_table_name. "table body 304    ASSIGN (l_table_name) TO <table>.                "not headerline 305 306 *&SPWIZARD: demark all filled lines                                    * 307    LOOP AT <table> ASSIGNING <wa>. 308 309 *&SPWIZARD: access to the component 'FLAG' of the table header         * 310      ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>. 311 312      <mark_field> = space. 313    ENDLOOP. 314  ENDFORM.                                          "fcode_tc_mark_lines 315 *&---------------------------------------------------------------------* 316 *& Form FRM_MODIFY_LINES 317 *&---------------------------------------------------------------------* 318 *& text 319 *&---------------------------------------------------------------------* 320 *& -->  p1        text 321 *& <--  p2        text 322 *&---------------------------------------------------------------------* 323  FORM frm_modify_lines . 324    DATA ls_cols LIKE LINE OF tc_ctrl_tab-cols. 325 326    LOOP AT tc_ctrl_tab-cols INTO ls_cols. 327      IF ls_cols-index = '1'. 328        IF ls_cols-screen-input = '0'. 329          ls_cols-screen-input = '1'. 330        ELSE. 331          ls_cols-screen-input = '0'. 332        ENDIF. 333        MODIFY tc_ctrl_tab-cols FROM ls_cols. 334      ENDIF. 335    ENDLOOP . 336  ENDFORM. 1 *----------------------------------------------------------------------* 2 ***INCLUDE ZDEMO_DIALOGHELP. 3 *----------------------------------------------------------------------* 4 *&---------------------------------------------------------------------* 5 *&      Module  F4_HELP_WAREHOUSE  INPUT 6 *&---------------------------------------------------------------------* 7 *       text 8 *----------------------------------------------------------------------* 9 MODULE f4_help_warehouse INPUT. 10   TYPES:BEGIN OF lty_lgort, 11           werks TYPE t001l-werks, 12           lgort TYPE t001l-lgort, 13           lgobe TYPE t001l-lgobe, 14         END OF lty_lgort. 15 16   DATA:lt_lgort TYPE TABLE OF lty_lgort. 17 18   IF t001w-werks IS NOT INITIAL. 19     SELECT werks lgort lgobe INTO TABLE lt_lgort FROM t001l WHERE werks = t001w-werks. 20 21     CHECK sy-subrc EQ 0. 22     CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' 23       EXPORTING 24 *       DDIC_STRUCTURE         = ' ' 25         retfield     = 'LGORT' 26 *       PVALKEY      = ' ' 27         dynpprog     = sy-cprog 28         dynpnr       = sy-dynnr 29         dynprofield  = 'T001L-LGORT' 30 *       STEPL        = 0 31         window_title = 'WAREHOUSE SELECTION' 32 *       VALUE        = ' ' 33         value_org    = 'S' 34 *       MULTIPLE_CHOICE        = ' ' 35 *       DISPLAY      = ' ' 36 *       CALLBACK_PROGRAM       = ' ' 37 *       CALLBACK_FORM          = ' ' 38 *       CALLBACK_METHOD        = 39 *       MARK_TAB     = 40 *     IMPORTING 41 *       USER_RESET   = 42       TABLES 43         value_tab    = lt_lgort 44 *       FIELD_TAB    = 45 *       RETURN_TAB   = 46 *       DYNPFLD_MAPPING        = 47 *     EXCEPTIONS 48 *       PARAMETER_ERROR        = 1 49 *       NO_VALUES_FOUND        = 2 50 *       OTHERS       = 3 51       . 52     IF sy-subrc <> 0. 53 * Implement suitable error handling here 54     ENDIF. 55 56   ELSE. 57     CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' 58       EXPORTING 59         tabname     = 'T001L' 60         fieldname   = 'LGORT' 61 *       SEARCHHELP  = ' ' 62 *       SHLPPARAM   = ' ' 63         dynpprog    = sy-repid 64         dynpnr      = sy-dynnr 65         dynprofield = 'T001L-LGORT' 66 *       STEPL       = 0 67 *       VALUE       = ' ' 68 *       MULTIPLE_CHOICE           = ' ' 69 *       DISPLAY     = ' ' 70 *       SUPPRESS_RECORDLIST       = ' ' 71 *       CALLBACK_PROGRAM          = ' ' 72 *       CALLBACK_FORM             = ' ' 73 *       CALLBACK_METHOD           = 74 *       SELECTION_SCREEN          = ' ' 75 *     IMPORTING 76 *       USER_RESET  = 77 *     TABLES 78 *       RETURN_TAB  = 79 *     EXCEPTIONS 80 *       FIELD_NOT_FOUND           = 1 81 *       NO_HELP_FOR_FIELD         = 2 82 *       INCONSISTENT_HELP         = 3 83 *       NO_VALUES_FOUND           = 4 84 *       OTHERS      = 5 85       . 86     IF sy-subrc <> 0. 87 * Implement suitable error handling here 88     ENDIF. 89 90 91   ENDIF. 92 ENDMODULE. 93 *&---------------------------------------------------------------------* 94 *&      Module  F4_HELP_MATERIAL  INPUT 95 *&---------------------------------------------------------------------* 96 *       text 97 *----------------------------------------------------------------------* 98 MODULE f4_help_material INPUT. 99   TYPES:BEGIN OF lty_matnr, 100           werks TYPE mard-werks, 101           lgort TYPE mard-lgort, 102           matnr TYPE mard-matnr, 103           maktx TYPE makt-maktx, 104         END OF lty_matnr. 105 106   DATA:lt_matnr TYPE TABLE OF lty_matnr. 107 108   IF t001w-werks IS NOT INITIAL 109    AND t001l-lgort IS NOT INITIAL. 110     SELECT a~werks a~lgort a~matnr b~maktx 111       INTO TABLE lt_matnr 112       FROM mard AS a 113       INNER JOIN makt AS b ON b~matnr = a~matnr AND b~spras = sy-langu 114       WHERE a~werks = t001w-werks 115       AND a~lgort = t001l-lgort. 116 117     CHECK sy-subrc EQ 0. 118     CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' 119       EXPORTING 120 *       DDIC_STRUCTURE         = ' ' 121         retfield     = 'MATNR' 122 *       PVALKEY      = ' ' 123         dynpprog     = sy-cprog 124         dynpnr       = sy-dynnr 125         dynprofield  = 'MAKT-MATNR' 126 *       STEPL        = 0 127         window_title = 'MATERIAL SELECTION' 128 *       VALUE        = ' ' 129         value_org    = 'S' 130 *       MULTIPLE_CHOICE        = ' ' 131 *       DISPLAY      = ' ' 132 *       CALLBACK_PROGRAM       = ' ' 133 *       CALLBACK_FORM          = ' ' 134 *       CALLBACK_METHOD        = 135 *       MARK_TAB     = 136 *     IMPORTING 137 *       USER_RESET   = 138       TABLES 139         value_tab    = lt_matnr 140 *       FIELD_TAB    = 141 *       RETURN_TAB   = 142 *       DYNPFLD_MAPPING        = 143 *     EXCEPTIONS 144 *       PARAMETER_ERROR        = 1 145 *       NO_VALUES_FOUND        = 2 146 *       OTHERS       = 3 147       . 148     IF sy-subrc <> 0. 149 * Implement suitable error handling here 150     ENDIF. 151 152   ELSE. 153     CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' 154       EXPORTING 155         tabname     = 'MAKT' 156         fieldname   = 'MATNR' 157 *       SEARCHHELP  = ' ' 158 *       SHLPPARAM   = ' ' 159         dynpprog    = sy-repid 160         dynpnr      = sy-dynnr 161         dynprofield = 'MAKT-MATNR' 162 *       STEPL       = 0 163 *       VALUE       = ' ' 164 *       MULTIPLE_CHOICE           = ' ' 165 *       DISPLAY     = ' ' 166 *       SUPPRESS_RECORDLIST       = ' ' 167 *       CALLBACK_PROGRAM          = ' ' 168 *       CALLBACK_FORM             = ' ' 169 *       CALLBACK_METHOD           = 170 *       SELECTION_SCREEN          = ' ' 171 *     IMPORTING 172 *       USER_RESET  = 173 *     TABLES 174 *       RETURN_TAB  = 175 *     EXCEPTIONS 176 *       FIELD_NOT_FOUND           = 1 177 *       NO_HELP_FOR_FIELD         = 2 178 *       INCONSISTENT_HELP         = 3 179 *       NO_VALUES_FOUND           = 4 180 *       OTHERS      = 5 181       . 182     IF sy-subrc <> 0. 183 * Implement suitable error handling here 184     ENDIF. 185 186 187   ENDIF. 188 ENDMODULE.

DEMO 得效果图如下,屏幕就自己画下哈, TABLE Control he  tablstrip 都是用引导功能画得

 

最新回复(0)