在录屏时每一种不同的凭证类型屏幕不同,一个个列出比较麻烦,所以借鉴了函数FI_ITEMS_MASS_CHANGE的form screen_detail。。
修改了下。。
FORM searchdynpro USING p_bukrs
p_belnr
p_gjahr
p_buzei
CHANGING dynnr_save LIKE bdcdata-dynpro.
DATA: ld_bschl LIKE bseg-bschl,
ld_buzid LIKE bseg-buzid,
ld_ktosl LIKE bseg-ktosl,
ld_mwart LIKE bseg-mwart,
ld_mwskz LIKE bseg-mwskz,
ld_umskz LIKE bseg-umskz,
ld_bstat LIKE bkpf-bstat.
SELECT SINGLE bschl mwart umskz buzid ktosl mwskz FROM bseg
INTO (ld_bschl, ld_mwart, ld_umskz, ld_buzid, ld_ktosl, ld_mwskz)
WHERE bukrs = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr
AND buzei = p_buzei.
SELECT SINGLE bstat INTO ld_bstat FROM bkpf
WHERE bukrs = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
*... determine screen number:
CALL FUNCTION 'NEXT_DYNPRO_SEARCH'
EXPORTING
i_bschl = ld_bschl
i_bukrs = p_bukrs
i_mwart = ld_mwart
i_bstat = ld_bstat
i_mwskzs = ld_mwskz
i_tcode = 'FB02'
i_umskz = ld_umskz
i_buzid = ld_buzid
i_winfk = space
i_ktosl = ld_ktosl "Note 0430101
IMPORTING
e_dynnra = dynnr_save.
ENDFORM.
这是一个凭证文本修改的程序,写了个递归
FORM subtxt USING p_bukrs p_belnr p_gjahr p_sgtxt.
DATA:dynnr_save LIKE bdcdata-dynpro.
num = num + 1.
numc = num.
PERFORM searchdynpro USING p_bukrs p_belnr p_gjahr numc CHANGING dynnr_save.
PERFORM fill_bdc_table USING '1' 'SAPMF05L' dynnr_save.
IF num < maxnum.
PERFORM fill_bdc_table USING '' 'BDC_OKCODE' '=Z+'.
ELSEIF num = maxnum.
PERFORM fill_bdc_table USING '' 'BDC_OKCODE' '=AE'.
ENDIF.
PERFORM fill_bdc_table USING '' 'BSEG-SGTXT' p_sgtxt.
*屏幕SAPMF05L 301 302 312 没有SUBSCREEM 目前只看到300有 2020.04.22
IF dynnr_save = '0300'.
PERFORM fill_bdc_table USING '1' 'SAPLKACB' '0002'.
PERFORM fill_bdc_table USING '' 'BDC_OKCODE' '=ENTE'.
ENDIF.
IF num < maxnum.
PERFORM subtxt USING p_bukrs p_belnr p_gjahr p_sgtxt.
ENDIF.
ENDFORM.