这是一个 Select Screen 的复杂案例,含:

    • 指定选择屏幕号
    • 一行多个内容
    • 注释性文本 ```abap &——————————————————————————————————- & 包含 ZMMRR2130_SEL &——————————————————————————————————-*
    • ——-> 文本 C00 采购组织 C01 供方类别 C02 供方编码 C03 申请日期 C04 供方名称 C05 申请号 C06 供方科目类别 C07 供方范围 G01 候选 G02 试用 G03 合格 G04 不合格 G05 冻结 G06 黑名单 T01 待审核 T02 审核中 T03 审核通过 T04 审核拒绝 T05 已创建 T06 已扩展 T07 已入黑名单 T08 已删除 T09 添加可供范围 T10 删除可供范围 T11 退回修改 T12 工程类一次性供应商 T13 拆迁户类别
    • <——- 文本 SELECTION-SCREEN BEGIN OF SCREEN 9100 AS SUBSCREEN. SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME .

    SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(13) text-c00 FOR FIELD p_ekorg. PARAMETERS: p_ekorg TYPE lfm1-ekorg .”改成区域OBLIGATORY SELECTION-SCREEN: COMMENT 23(40) g_etxt FOR FIELD p_ekorg. SELECTION-SCREEN: END OF LINE.

    SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(13) text-c01 FOR FIELD p_ktokk.”45(13) PARAMETERS: p_ktokk TYPE lfa1-ktokk . SELECTION-SCREEN: COMMENT 23(40) g_ktxt FOR FIELD p_ktokk.”60(20) SELECTION-SCREEN: END OF LINE.

    SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(13) text-c02 FOR FIELD p_lifnr. PARAMETERS: p_lifnr TYPE lfa1-lifnr MATCHCODE OBJECT zhlp_vendor. SELECTION-SCREEN: COMMENT 26(40) g_ltxt FOR FIELD p_lifnr. SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(10) text-c06 FOR FIELD s_tykm. SELECT-OPTIONS: s_tykm FOR zmmr1007-ztykm. SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(13) text-c04 FOR FIELD p_lifnr. PARAMETERS: p_name1 TYPE lfa1-name1. SELECTION-SCREEN: END OF LINE.

    SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(10) text-c05 FOR FIELD s_shenqh. SELECT-OPTIONS: s_shenqh FOR zmmr1007-shenqh. SELECTION-SCREEN: END OF LINE.

    SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(10) text-c03 FOR FIELD s_erdat. SELECT-OPTIONS: “S_EKORG FOR LFM1-EKORG OBLIGATORY, s_erdat FOR lfa1-erdat, s_ekorg FOR lfm1-ekorg NO-DISPLAY, s_ktokk FOR lfa1-ktokk NO-DISPLAY. SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr NO-DISPLAY . SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(10) text-c07 FOR FIELD s_gffw. SELECT-OPTIONS: s_gffw FOR zmmr1011-zgfbm NO INTERVALS. SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN: BEGIN OF LINE. SELECTION-SCREEN: COMMENT 1(13) text-t13 FOR FIELD p_zcqhlb MODIF ID cq1. PARAMETERS: p_zcqhlb TYPE zmmr1007-zcqhlb AS LISTBOX VISIBLE LENGTH 10 MODIF ID cq1. SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: p_ycxgys AS CHECKBOX . SELECTION-SCREEN COMMENT 3(16) text-t12. SELECTION-SCREEN: END OF LINE. SELECTION-SCREEN END OF BLOCK block1.

    SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: p_ybaoc AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 3(5) text-t01. PARAMETERS: p_dshpi AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 11(5) text-t02. PARAMETERS: p_thxg AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 19(7) text-t11. PARAMETERS: p_spitg AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 29(7) text-t03. PARAMETERS: p_jujue AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 39(7) text-t04. PARAMETERS: p_ychji AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 49(5) text-t05. PARAMETERS: p_ykuoz AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 57(5) text-t06. PARAMETERS: p_yshch AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 65(9) text-t08. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: p_houx AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 3(5) text-g01. PARAMETERS: p_shiy AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 11(5) text-g02. PARAMETERS: p_heg AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 19(7) text-g03. PARAMETERS: p_bheg AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 29(7) text-g04. PARAMETERS: p_dongj AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 39(7) text-g05. PARAMETERS: p_heimd AS CHECKBOX DEFAULT ‘X’. SELECTION-SCREEN COMMENT 49(5) text-g06. SELECTION-SCREEN END OF LINE.

    SELECTION-SCREEN END OF BLOCK block2.

    SELECTION-SCREEN END OF SCREEN 9100.

    DATA: gv_executed TYPE char01.

    AT SELECTION-SCREEN OUTPUT. PERFORM frm_restrict_option. DATA: gv_gffw_help TYPE char01.

    PERFORM frm_set_for_cqh.

    IF gv_errflg IS NOT INITIAL. SET CURSOR FIELD gs_break_field-cursor. CLEAR: gs_break_field, gv_errflg. ENDIF.

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ktokk. PERFORM frm_f4_ktokk.

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_gffw-low. PERFORM frm_f4_gffw.

    &——————————————————————————————————- & Form FRM_F4_KTOKK &——————————————————————————————————-*

    • text

    • —> p1 text
    • <— p2 text

    FORM frm_f4_ktokk . DATA: BEGIN OF ls_t077k, ktokk TYPE t077k-ktokk, txt30 TYPE t077y-txt30, END OF ls_t077k, lt_t077k LIKE TABLE OF ls_t077k.

    SELECT ktokk INTO CORRESPONDING FIELDS OF TABLE lt_t077k FROM t077k WHERE ktokk IN (‘Z001’, ‘Z002’, ‘Z003’ ).

    LOOP AT lt_t077k INTO ls_t077k. SELECT SINGLE txt30 INTO ls_t077k-txt30 FROM t077y WHERE ktokk = ls_t077k-ktokk. MODIFY lt_t077k FROM ls_t077k. ENDLOOP.

    CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’ EXPORTING retfield = ‘KTOKK’ dynpprog = sy-repid dynpnr = ‘0101’ dynprofield = ‘P_KTOKK’ value_org = ‘S’ TABLES value_tab = lt_t077k EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. ENDFORM. “ FRM_F4_KTOKK &——————————————————————————————————- & Form FRM_F4_GFFW &——————————————————————————————————-*

    • text

    • —> p1 text
    • <— p2 text

    FORM frm_f4_gffw . TYPES: BEGIN OF l_typ_zmmr1011, zgfbm TYPE zmmr1011-zgfbm, zgfname TYPE zmmr1011-zgfname, END OF l_typ_zmmr1011. DATA: lt_zmmr1011 TYPE STANDARD TABLE OF l_typ_zmmr1011, ls_zmmr1011 TYPE l_typ_zmmr1011, lt_tmp TYPE STANDARD TABLE OF zmmr1011, ls_tmp TYPE zmmr1011, lt_return TYPE STANDARD TABLE OF ddshretval, ls_return TYPE ddshretval, lv_value TYPE dynpread-fieldvalue.

    REFRESH: lt_tmp, lt_zmmr1011. SELECT * FROM zmmr1011 INTO TABLE lt_tmp WHERE zgfbm <> space. LOOP AT lt_tmp INTO ls_tmp. MOVE-CORRESPONDING ls_tmp TO ls_zmmr1011. APPEND ls_zmmr1011 TO lt_zmmr1011. ENDLOOP.

    LOOP AT lt_zmmr1011 INTO ls_zmmr1011. READ TABLE lt_tmp INTO ls_tmp WITH KEY parent = ls_zmmr1011-zgfbm. IF sy-subrc = 0. DELETE TABLE lt_zmmr1011 FROM ls_zmmr1011. ENDIF. ENDLOOP. CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’ EXPORTING retfield = ‘ZGFBM’ dynpprog = sy-repid dynpnr = sy-dynnr

    • dynprofield = ‘S_GFFW-LOW’ value_org = ‘S’ multiple_choice = ‘X’ callback_program = sy-repid TABLES value_tab = lt_zmmr1011 return_tab = lt_return.

    IF lt_return[] IS NOT INITIAL. REFRESH: s_gffw. READ TABLE lt_return INTO ls_return INDEX 1. APPEND ls_return TO lt_return. LOOP AT lt_return INTO ls_return. s_gffw-sign = ‘I’. s_gffw-option = ‘EQ’. s_gffw-low = ls_return-fieldval. COLLECT s_gffw INTO s_gffw. ENDLOOP. SORT s_gffw BY sign option low. DELETE ADJACENT DUPLICATES FROM s_gffw COMPARING ALL FIELDS. ENDIF. ENDFORM. “ FRM_F4_GFFW &——————————————————————————————————- & Form FRM_RESTRICT_OPTION &——————————————————————————————————-*

    • text

    • —> p1 text
    • <— p2 text

    FORM frm_restrict_option . DATA: lt_restrict TYPE sscr_restrict, lw_opt_list_tab TYPE sscr_opt_list, lw_ass_tab TYPE sscr_ass. CHECK gv_executed IS INITIAL. gv_executed = ‘X’. CLEAR: lw_opt_list_tab, lt_restrict. lw_opt_list_tab-name = ‘OBJECTKEY1’. lw_opt_list_tab-options-eq = ‘X’. APPEND lw_opt_list_tab TO lt_restrict-opt_list_tab.

    CLEAR: lw_ass_tab. lw_ass_tab-kind = ‘S’. lw_ass_tab-name = ‘S_GFFW’. lw_ass_tab-sg_main = ‘I’. lw_ass_tab-op_main = ‘OBJECTKEY1’. APPEND lw_ass_tab TO lt_restrict-ass_tab.

    CALL FUNCTION ‘SELECT_OPTIONS_RESTRICT’ EXPORTING program = sy-repid restriction = lt_restrict EXCEPTIONS too_late = 1 repeated = 2 selopt_without_options = 3 selopt_without_signs = 4 invalid_sign = 5 empty_option_list = 6 invalid_kind = 7 repeated_kind_a = 8 OTHERS = 9. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. “ FRM_RESTRICT_OPTION &——————————————————————————————————- & Form FRM_SET_FOR_CQH &——————————————————————————————————-*

    • text

    • —> p1 text
    • <— p2 text

    FORM frm_set_for_cqh .

    p_ktokk = ‘Z001’. LOOP AT SCREEN. IF screen-name = ‘P_KTOKK’. “ 不可编辑 screen-input = 0. MODIFY SCREEN. ENDIF.

    • IF screen-name = ‘P_ZCQHLB’.
    • “ 必输显示
    • screen-required = ‘2’.
    • MODIFY SCREEN.
    • ENDIF. ENDLOOP.

    ENDFORM. “ FRM_SET_FOR_CQH ```