"搜索幫助
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.