ABAP DIALOG POV F4搜索帮助
"搜索帮助
PROCESS ON VALUE-REQUEST .
FIELD <FIELD1> MODULE F4_HEAD_1.
FIELD <FIELD2> MODULE F4_HEAD_2.
根据内表自定义F4的选择条目(3) 和 用已定义的搜索帮助来确定选择条目(5)
(都可以根据已知的一个字段来确定选择条目)
在tablecontrol中根据输入的MATNR,得到VBELN和POSNR的搜索帮助,选择后,同时填入vbeln和posnr
1、获取matnr的值
https://www.cnblogs.com/CtrlS/p/10755592.html
2、获取数据
定义STRUCTURE(SE11)
DATA: LT_STRU TYPE TABLE OF <STRUCTURE> WITH HEADER LINE.
SELECT ....
如果取不到数,请注意字段的前导零是否正确(CONVERSION_EXIT_ALPHA_OUTPUT)
3、调用 F4IF_INT_TABLE_VALUE_REQUEST 获取F4选择的订单号和行项目(根据内表自定义F4的选择条目)
L_DSELC-FLDNAME = 'VBELN'. L_DSELC-DYFLDNAME = 'VBELN'. APPEND L_DSELC. L_DSELC-FLDNAME = 'POSNR'. L_DSELC-DYFLDNAME = 'POSNR'. APPEND L_DSELC. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING DDIC_STRUCTURE = 'Z51_STCT'"structure名称 RETFIELD = 'VBELN' * PVALKEY = ' ' DYNPPROG = SY-REPID DYNPNR = SY-DYNNR DYNPROFIELD = 'GW_TAB-VBELN' * STEPL = 0 WINDOW_TITLE = '订单号选择' * VALUE = ' ' VALUE_ORG = 'S'"Structure * MULTIPLE_CHOICE = ' ' * DISPLAY = ' ' * CALLBACK_PROGRAM = ' ' * CALLBACK_FORM = ' ' * MARK_TAB = * IMPORTING * USER_RESET = TABLES VALUE_TAB = LT_VBELN[] FIELD_TAB = L_DFIES[] RETURN_TAB = L_DDSHRETVAL[] DYNPFLD_MAPPING = L_DSELC[] 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. ELSE. READ TABLE L_DDSHRETVAL WITH KEY FIELDNAME = 'VBELN'. L_VBELN = L_DDSHRETVAL-FIELDVAL. READ TABLE L_DDSHRETVAL WITH KEY FIELDNAME = 'POSNR'. L_POSNR = L_DDSHRETVAL-FIELDVAL. ENDIF.
4、DYNP_VALUES_READ返回订单号和行项目到屏幕
CLEAR:dynpfields[],L_LINES_VB. GET CURSOR LINE L_LINES_VB."获取当前操作行数 DYNPFIELDS-FIELDNAME = 'GW_TAB-VBELN'. DYNPFIELDS-STEPL = L_LINES_VB."当前操作行数 DYNPFIELDS-FIELDVALUE = L_VBELN. DYNPFIELDS-FIELDINP = 'X'. APPEND DYNPFIELDS. DYNPFIELDS-FIELDNAME = 'GW_TAB-POSNR'. DYNPFIELDS-STEPL = L_LINES_VB."当前操作行数 DYNPFIELDS-FIELDVALUE = L_POSNR. DYNPFIELDS-FIELDINP = 'X'. APPEND DYNPFIELDS. CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING DYNAME = SY-REPID DYNUMB = SY-DYNNR TABLES DYNPFIELDS = DYNPFIELDS[].
5调用F4IF_FIELD_VALUE_REQUEST(或F4IF_START_VALUE_REQUEST)用已定义的搜索帮助来确定选择条目
用DYNP_VALUES_READ 先得到屏幕上的S_WERKS,
CONCATENATE '=' S_WERKS INTO L_VALUE. " F4IF_FIELD_VALUE_REQUEST添加输入参数时,SHLPPARAM对应SHLP_DESCR-INTERFACE里的VALFIELD,只能输入几个字段,且数值VALUE还要加等号 "而SHLP_DESCR-SELOPT对应的可输入条件类似于range,但不知道在F4IF_FIELD_VALUE_REQUEST中如何设置。。。。。 "可用F4IF_START_VALUE_REQUEST来替换,但要从结果表中找选中的值返回屏幕值 CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST' EXPORTING TABNAME = 'MARD' FIELDNAME = 'LGORT' * SEARCHHELP = ' ' SHLPPARAM = 'WERKS' DYNPPROG = SY-REPID DYNPNR = SY-DYNNR DYNPROFIELD = 'S_LGORT' * STEPL = 0 VALUE = L_VALUE . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF.
或者用F4IF_START_VALUE_REQUEST
从L_RETURN[]中找到选中的值,再用DYRN_VALUES_UPDATE传的屏幕
DATA: L_SHLP TYPE SHLP_DESCR, L_SEL TYPE DDSHSELOPT, L_RETURN LIKE TABLE OF DDSHRETVAL WITH HEADER LINE. L_SHLP-SHLPNAME = 'H_T001L'. L_SHLP-SHLPTYPE = 'SH'. L_SEL-SHLPNAME = 'H_T001L'. "搜索帮助的名称 L_SEL-SHLPFIELD = 'WERKS'. "搜索帮助参数的名称 L_SEL-SIGN = 'I'. "ABAP/4: ID: I/E (包括/不包括值) L_SEL-OPTION = 'EQ'."ABAP/4: 选择选项 (EQ/BT/CP/...) L_SEL-LOW = 'C100'."动态选择的'一般' SELECT-OPTION * L_SEL-HIGH "动态选择的'一般' SELECT-OPTION APPEND L_SEL TO L_SHLP-SELOPT. * L_VALUE = 'C1*'.H_T001L CALL FUNCTION 'F4IF_START_VALUE_REQUEST' EXPORTING SHLP = L_SHLP * DISPONLY = ' ' * MAXRECORDS = 500 * MULTISEL = ' ' * CUCOL = SY-CUCOL * CUROW = SY-CUROW * IMPORTING * RC = TABLES RETURN_VALUES = L_RETURN[] . IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF.
post SAP-Garson
原文链接:https://www.cnblogs.com/CtrlS/p/10757431.html文章来自于网络,如果侵犯了您的权益,请联系站长删除!