又来了,这次介绍的是选择屏幕的搜索帮助,在逻辑流中搜索帮助是在POV中的,在报表程序中要先申明
AT SELECTION-SCREEN ON VALUE-REQUEST
要放在主程序执行之前。
可以稍微改动就能用,值得注意,在最后必须获取选中的值给选择屏幕字段赋值,因为是S类型范围,解释在最后可以自己看看再试一下。
这里用到了PERFORM,可以看之前的文章USING CHANGING的用法。
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_BPLAN-low.
PERFORM frm_f4_BPLAN CHANGING s_BPLAN-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_BPLAN-high.
PERFORM frm_f4_BPLAN CHANGING s_BPLAN-high.
FORM FRM_F4_BPLAN USING IV_BPLAN.
ENDFORM. " FRM_F4_BPLAN
搜索帮助的代码顺便贴出来,这是根据视图取数的。
FORM FRM_F4_BPLAN USING IV_BPLAN.
DATA lt_return TYPE STANDARD TABLE OF ddshretval WITH HEADER LINE.
DATA lv_dynfield TYPE help_info-dynprofld.
TYPES:BEGIN OF ts_BPLAN,
ZBPLAN TYPE Z06PMVM0210M-BPLAN,
ZBPLAN_T TYPE Z06PMVM0210M-BPLAN_T,
END OF ts_BPLAN.
DATA:tt_BPLAN TYPE STANDARD TABLE OF ts_BPLAN,
tS_BPLAN TYPE ts_BPLAN.
DATA : LT_VIEW TYPE TABLE OF Z06PMVM0210M ,
" 可以直接参照视图定义
LS_VIEW TYPE Z06PMVM0210M.
CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
VIEW_NAME = 'Z06PMVM0210M'
TABLES
DATA = LT_VIEW.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT LT_VIEW INTO LS_VIEW WHERE WFRULE = '2715010' .
tS_BPLAN-ZBPLAN = LS_VIEW-BPLAN.
tS_BPLAN-ZBPLAN_T = LS_VIEW-BPLAN_T.
APPEND tS_BPLAN TO tt_BPLAN.
CLEAR LS_VIEW.
CLEAR tS_BPLAN.
ENDLOOP.
SORT LT_VIEW BY BPLAN.
DELETE ADJACENT DUPLICATES FROM LT_VIEW.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZSQBM'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'X'
value_org = 'S'
TABLES
value_tab = tt_BPLAN
return_tab = lt_return[]
EXCEPTIONS
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.
ELSE.
* 注意这里需要获取选着的值,并给选择屏幕字段赋值,如果不赋值就会造成乱码的错误,有兴趣的,可以写完后,单独把READ 赋值这两行代码注释了。
READ TABLE lt_return INDEX 1.
IV_BPLAN = lt_return-fieldval.
ENDIF.
ENDFORM. " FRM_F4_BPLAN