SELECTION-SCREEN 作为弹窗调用
SAP SE38 DEMO: DEMO_CALL_SELECTION_SCREEN
创建屏幕
SELECTION-SCREEN BEGIN OF SCREEN 200 AS WINDOW. . PARAMETERS p_zddlx TYPE ztpp100a_17-zddlx OBLIGATORY MODIF ID x. PARAMETERS p_zlcjd TYPE ztpp100a_17-zlcjd OBLIGATORY MODIF ID x. PARAMETERS p_zxh TYPE ztpp100a_17-zxh. PARAMETERS p_zjdsm TYPE ztpp100a_17-zjdsm. PARAMETERS p_zsfyfj TYPE ztpp100a_17-zsfyfj VISIBLE LENGTH 4 AS LISTBOX. PARAMETERS p_zfzrgh TYPE ztpp100a_17-zfzrgh. PARAMETERS p_zfzrxm TYPE ztpp100a_17-zfzrxm MODIF ID z. SELECTION-SCREEN END OF SCREEN 200.通过 CALL SELECTION-SCREEN 201 STARTING AT 1 1. 调用
CALL SELECTION-SCREEN 201 STARTING AT 1 1.
输入完值判断他点的执行 还是 X 可以通过 SY-SUBRC判断
CALL SELECTION-SCREEN 200 STARTING AT 1 1. IF sy-subrc = 0. ls_ztpp100a_17-zddlx = p_zddlx. ls_ztpp100a_17-zlcjd = p_zlcjd. ls_ztpp100a_17-zxh = p_zxh. ls_ztpp100a_17-zjdsm = p_zjdsm. ls_ztpp100a_17-zsfyfj = p_zsfyfj. ls_ztpp100a_17-zfzrgh = p_zfzrgh. ls_ztpp100a_17-zfzrxm = p_zfzrxm. ls_ztpp100a_17-werks = p_werks. ls_ztpp100a_17-crnam = sy-uname. ls_ztpp100a_17-crdat = sy-datum. ls_ztpp100a_17-crtim = sy-uzeit. SELECT COUNT(*) FROM ztpp100a_02 WHERE werks = p_werks AND zbh_pp = p_zddlx. IF sy-subrc <> 0. MESSAGE '' && p_zddlx && '' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. SELECT COUNT(*) FROM ztpp100a_11 WHERE werks = p_werks AND zbh_gh = p_zfzrgh. IF sy-subrc <> 0. MESSAGE '' && p_zfzrgh && '' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. SELECT COUNT(*) FROM ztpp100a_17 WHERE zddlx = ls_ztpp100a_17-zddlx AND zlcjd = ls_ztpp100a_17-zlcjd AND werks = p_werks. IF sy-subrc IS INITIAL. MESSAGE '' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF. INSERT ztpp100a_17 FROM ls_ztpp100a_17. COMMIT WORK AND WAIT. SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_data FROM ztpp100a_17 WHERE werks = p_werks AND crdat IN s_crdat AND crnam IN s_crnam. ELSE. MESSAGE '取消操作' TYPE 'S' DISPLAY LIKE 'E'. RETURN. ENDIF.
做隐藏字段 是否可编辑 下拉框赋值可以通过 AT SELECTION-SCREEN OUTPUT.设置
AT SELECTION-SCREEN OUTPUT. IF p_lists = 'wwwww'. DATA: vid TYPE vrm_id, list TYPE vrm_values, value LIKE LINE OF list. value-key = 'Y'. value-text = '是'. APPEND value TO list. value-key = 'N'. value-text = '否'. APPEND value TO list. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = 'P_ZSFYFJ' values = list. LOOP AT SCREEN. IF screen-group1 = 'X' AND gv_ucomm = 'ZXG' OR screen-group1 = 'Z'. screen-input = '0'. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF.对字段做搜索帮助 可以通过 AT SELECTION-SCREEN ON VALUE-REQUEST 事件设置
如果想要 某两个字段做关联 在搜索帮助 选完值后带出 其他字段值 例如选完 负责人工号 带出负责人姓名 就要做带返回值的 F4 帮助 其中函数 SAPGUI_SET_FUNCTIONCODE 相当于按了一次回车 如果没有这个 即使对 字段赋值 屏幕不刷新 字段虽然有值 但是 屏幕显示 还是空的
TYPES :BEGIN OF ty_selection, code TYPE zsmm_ckd_header-cklx, string TYPE char20, END OF ty_selection. DATA lt_selection TYPE TABLE OF ty_selection. SELECT zbh_gh AS code zbh_ght AS string FROM ztpp100a_11 INTO TABLE lt_selection WHERE werks = p_werks. DATA lt_ddshretval TYPE TABLE OF ddshretval. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'CODE' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_ZFZRGH' value_org = 'S' callback_program = sy-repid TABLES value_tab = lt_selection return_tab = lt_ddshretval EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc = 0. READ TABLE lt_ddshretval INTO DATA(ls_ddshretval) INDEX 1. READ TABLE lt_selection INTO DATA(ls_selection) WITH KEY code = ls_ddshretval-fieldval. IF sy-subrc = 0. p_zfzrxm = ls_selection-string. p_zfzrgh = ls_ddshretval-fieldval. ENDIF. ELSE. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE' EXPORTING functioncode = 'DUMMY'.
如果不需要做联动 搜索帮助 就不需要添加返回值表
TYPES :BEGIN OF ty_selection, code TYPE zsmm_ckd_header-cklx, string TYPE char20, END OF ty_selection. DATA lt_selection TYPE TABLE OF ty_selection. SELECT zbh_pp AS code zbh_ppt AS string FROM ztpp100a_02 INTO TABLE lt_selection WHERE werks = p_werks. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'CODE' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_ZDDLX' window_title = 'WINDOW--TITLE' value_org = 'S' "C表示cell,S表示structure * MULTIPLE_CHOICE = 'X' "多项选择,用于SELECT-OPTIONS * DISPLAY = 'F' "C则只能显示,不能选择 callback_program = sy-repid TABLES value_tab = lt_selection EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.