sap abap下面是手动创建搜索帮助,并且分别把搜索的结果分别赋值给输入框的最小值和最大值,及单选框控制屏幕显示等
下面是手动创建搜索帮助,并且分别把搜索的结果分别赋值给输入框的最小值和最大值
abap:
*&---------------------------------------------------------------------*
*& Report ZPROGRAM_F0056_1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZPROGRAM_F0056_1.
TABLES VBAK.
DATA LV_DATA1 TYPE CHAR5 VALUE 'FLORA'.
SET PARAMETER ID 'P1' FIELD LV_DATA1.
DATA LV_DATA TYPE CHAR5 VALUE 'SIMON'.
"parameter p_p1 type char5 default 'FLORA' memory id obligatory as CHECKBOX . "长度报错
" data mystring type char20.
SELECTION-SCREEN BEGIN of BLOCK B1 WITH FRAME TItLE mystring ." “选择屏幕 TEXT-001 是使用系统定义的 变量,而 mystring 是无需提前定义的,只要在 INITIALIZATION 后面赋值即可。
"parameter p_p1 type char1 default 'FLORA' memory id obligatory as CHECKBOX .
parameter p_p1 type char1 as CHECKBOX USER-COMMAND FLAG . " 功能码
parameter p_p2 RADIOBUTTON GROUP g1.
parameter p_p3 RADIOBUTTON GROUP g1.
SELECTION-SCREEN END of BLOCK B1. " “选择屏幕
parameter p_p4 RADIOBUTTON GROUP g2.
parameter p_p5 RADIOBUTTON GROUP g2.
parameter p_p6 RADIOBUTTON GROUP g2.
parameter p_p7 RADIOBUTTON GROUP g2.
" parameter p_p8 type string VISIBLE LENGTH 10 .
parameter p_p8 type string VISIBLE LENGTH 10 MODIF ID f1 .
parameter p_p9 type char5 as LISTBOX VISIBLE LENGTH 10 MODIF ID f1. " 下拉框
parameter p_p10 type char12 MATCHCODE OBJECT USER_COMP . " 引用系统已经存在的搜索帮助 ,这个是搜索用户名的搜索帮助,通过 su01 打开实际的对话框,选择 F1 打开技术信息
"不加 MATCHCODE OBJECT USER_COMP 就是一个输入框。
" SELECT-OPTIONS NAME FOR DATA .
SELECT-OPTIONS S_S1 FOR VBAK-VBELN.
SELECT-OPTIONS S_S2 FOR VBAK-VBELN DEFAULT 44 TO 55.
SELECT-OPTIONS S_S3 FOR VBAK-VBELN DEFAULT 44 OPTION LE SIGN I.
SELECT-OPTIONS S_S4 FOR VBAK-VBELN DEFAULT 44 TO 55 OPTION NB SIGN I.
SELECT-OPTIONS S_S5 FOR VBAK-VBELN DEFAULT 44 TO 55 OPTION BT SIGN E.
SELECT-OPTIONS S_S6 FOR VBAK-VBELN DEFAULT 44 TO 55 OPTION NB SIGN I.
SELECT-OPTIONS S_S7 FOR VBAK-VBELN DEFAULT 44 TO 55 OPTION NB SIGN I NO-EXTENSION. "NO INTERVALS 无扩展功能,无法输入多行
SELECTION-SCREEN COMMENT /50(83) TEXT-001. "在当前位置输出 在text-xxx中的文本,类似一个lable,且显示文本需要定义 50是距离左边的长度,
" 83是文本最长的长度,在文本元素中的textSymbole中可以定义132个字符.。
SELECTION-SCREEN begin of screen 1001. "定义SELECTION-SCREEN ,这个是在选择屏幕中 再定义一个选择屏幕 。SELECT-OPTIONS 和 PARAMETER 都是选择屏幕他们默认的窗口号是1000,
PARAMETERS s_p7 type vbak-vbeln.
SELECTION-SCREEN end of screen 1001.
" CALL SELECTION-SCREEN 1001. "定义了上述 定义SELECTION-SCREEN 后,只有执行这句才会弹出 选择屏幕对话框。
*BREAK-POINT.
*
INITIALIZATION.
mystring ='我自己自定义字符串'.
**——————初始化-----*
*p_p1 = sy-uname.
* s_s1-sign = 'I'. "针对 SELECT-OPTIONS 的变量,其实是一个内表。为啥这里报错:选择"I",而 标记S_S1错误
*s_s1-low = '555'.
*s_s1-option = 'EQ'.
*APPEND S_S1.
AT SELECTION-SCREEN OUTPUT.
loop at screen. "问题二:这个是screen是那个 screen 是当前窗口的整个SCREEN吗?
if p_p1 = ''.
if screen-group1 = 'F1'.
SCREEN-ACTIVE = 0. "问题二: 这个是screen是那个 screen 是当前窗口的整个SCREEN吗?为啥仅 modif id 是 F1 的隐藏了啊?
MODIFY SCREEN.
endif.
ENDIF.
endloop.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_S1-LOW. "局部的搜索帮助.在SE11中没有的.
* perform frm_search_help_for_s1 . "默认的方法,下面改用动态参数传递。
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_S1-low. "局部的搜索帮助.在SE11中没有的.
perform frm_search_help_for_s1 USING S_S1-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_S1-HIGH. "局部的搜索帮助.在SE11中没有的.
perform frm_search_help_for_s1 USING S_S1-HIGH.
"----------------------
*PARAMETERS show_all AS CHECKBOX USER-COMMAND flag.
*
*SELECTION-SCREEN BEGIN OF BLOCK d1 WITH FRAME.
*PARAMETERS: p1 TYPE c LENGTH 10,
* p2 TYPE c LENGTH 10,
* p3 TYPE c LENGTH 10.
*SELECTION-SCREEN END OF BLOCK d1.
*
*SELECTION-SCREEN BEGIN OF BLOCK d2 WITH FRAME.
*PARAMETERS: p4 TYPE c LENGTH 10 MODIF ID dl2,
* p5 TYPE c LENGTH 10 MODIF ID dl2,
* p6 TYPE c LENGTH 10 MODIF ID dl2.
*SELECTION-SCREEN END OF BLOCK d2.
*
*AT SELECTION-SCREEN OUTPUT. "当show_all值改变时会触发此事件
* LOOP AT SCREEN.
* IF show_all <> 'X' AND
* screen-group1 = 'DL2'. "
* screen-active = '0'. "设置组内设置屏幕的显示和隐藏
* ENDIF.
* MODIFY SCREEN. "把弃置应用到当前屏幕
* ENDLOOP.
"--------------------
*PARAMETERS p_rd1 RADIOBUTTON GROUP gp1 USER-COMMAND mxx."用来隐藏 p_lclfil
*PARAMETERS p_rd2 RADIOBUTTON GROUP gp1 DEFAULT 'X'."用来显示 p_lclfil
*"当通过程序动态修改屏幕元素属性 required 后,会忽略掉这里的 OBLIGATORY 选项
**PARAMETERS p_lclfil(128) AS LISTBOX VISIBLE LENGTH 20 MODIF ID mxy OBLIGATORY .
*PARAMETERS p_lclfil(128) MODIF ID mxy OBLIGATORY .
*PARAMETERS: c AS CHECKBOX."没什么作用,用来测试 CHECKBOX 的可输入性
*"当 C2 被钩选时,屏幕上的其他输入元素均不可输入
*PARAMETERS: c2 AS CHECKBOX USER-COMMAND ddd DEFAULT 'X'.
*
*AT SELECTION-SCREEN OUTPUT.
* LOOP AT SCREEN .
* "当 C2 没有钩选时,其他元素都设置为可输入
* IF screen-name <> 'C2' AND c2 IS INITIAL .
* screen-input = 1.
* MODIFY SCREEN.
* ELSEIF screen-name <> 'C2' AND c2 IS NOT INITIAL .
* screen-input = 0."C2钩选时,所以屏幕输入元素禁止输入
* MODIFY SCREEN.
* ENDIF.
* "控制下拉列表(文本框也是一样)的必输性:外观上打钩,但不自动校验
* IF p_rd2 = 'X' AND screen-group1 = 'MXY'.
* "显示
* screen-active = '1'.
** screen-input = '1'."显示前设为可输入
* screen-required = '2'."外观上打钩,但不自动校验
* MODIFY SCREEN.
* ELSEIF screen-group1 = 'MXY'. "
* "隐藏
* screen-active = '0'.
* screen-required = '2'.
* MODIFY SCREEN.
* ENDIF.
* ENDLOOP.
*
*AT SELECTION-SCREEN ON p_lclfil.
* IF p_rd2 IS NOT INITIAL"手动检验:但当点击单选按钮与复选框 C2 时,不校验
* AND sy-ucomm <> 'MXX' AND sy-ucomm <> 'DDD' AND p_lclfil IS INITIAL.
* MESSAGE e055(00).
* ENDIF.
"-------------------
*&---------------------------------------------------------------------*
*& Form FRM_SEARCH_HELP_FOR_S1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_search_help_for_s1 USING P_FILENAME.
types: BEGIN OF ty_vbak,
MANDT TYPE VBAK-MANDT,
VBELN TYPE VBAK-VBELN,
ERZET TYPE VBAK-ERZET,
ERNAM TYPE VBAK-ERNAM,
ANGDT TYPE VBAK-ANGDT,
end of ty_vbak.
" DATA:LT_VALUE_TAB TYPE TABLE OF VBAK. " 不能被注释掉,否则下面要报错的。
DATA:LT_VALUE_TAB TYPE TABLE OF ty_vbak.
data lt_return type table of DDSHRETVAL .
data wa_return type DDSHRETVAL .
SELECT MANDT VBELN FROM VBAK INTO TABLE LT_VALUE_TAB UP TO 20 ROWS.
*SELECT MANDT VBELN INTO CORRESPONDING FIELDS OF TABLE LT_VALUE_TAB " 用* 全部字段的话,
* FROM VBAK
* UP TO 20 ROWS.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
* DDIC_STRUCTURE = ' '
retfield = 'MANDT' "VBELN "设置要返回的字段。
* PVALKEY = ' '
DYNPPROG = sy-repid
DYNPNR = sy-dynnr
* DYNPROFIELD = ' '
* STEPL = 0
* WINDOW_TITLE =
* VALUE = ' '
VALUE_ORG = 'S'
* MULTIPLE_CHOICE = ' '
* DISPLAY = ' '
* CALLBACK_PROGRAM = ' '
* CALLBACK_FORM = ' '
* CALLBACK_METHOD =
* MARK_TAB =
* IMPORTING
* USER_RESET =
tables
value_tab = LT_VALUE_TAB "参考表
* FIELD_TAB =
RETURN_TAB = lt_return "设置要返回的内表。
* DYNPFLD_MAPPING =
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE lt_return into wa_return INDEX 1.
if sy-subrc = 0 .
P_FILENAME = wa_return-fieldval. ""设置要返回的字段。
ENDIF.
ENDFORM.
post SAP-Garson
原文链接:https://blog.csdn.net/handsome1234/article/details/112254733文章来自于网络,如果侵犯了您的权益,请联系站长删除!