目的:用户希望用BDC实现,自动创建EPIC_PROC银企直连的"付款建议"按钮功能
(本想实现以下步骤,创建付款状态,但无法实现)
难点:EPIC_PROC事务码直接录屏没办法捕捉到该按钮(失败了很多次)
解决方法:创建一个新程序,调用标准函数 EPIC_PR_SEL_POPUP,对该事务码进行BDC录屏
解释:EPIC_PR_SEL_POPUP 该函数是通过debug事务码EPIC_PROC的时候,定位到,弹出"付款建议"窗口时,是调用的该函数,所以我们可以绕过前边步骤,直接调用该函数,弹出"付款建议"窗口进行录屏,成功!
步骤:
1)创建程序:ZFICOM008(事务码:ZFICOM008),调用:EPIC_PR_SEL_POPUP
*&---------------------------------------------------------------------*
*& Report ZFICOM008
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zficom008.
CALL FUNCTION 'EPIC_PR_SEL_POPUP'.
2)DBC录屏:调用事务码ZFICOM008,会弹出以下窗口,成功录屏
代码参考:
LOOP AT lt_item_1 INTO ls_item_1.
lt_ztfico_mkyz003-zformbizcode = ls_item_1-zformbizcode. "来源单据号
lt_ztfico_mkyz003-zlsch = lv_fkfs. "ls_item_1-zlsch. "付款方式
lt_ztfico_mkyz003-zpayamount = ls_item_1-zpayamount. "付款金额(比例)
lt_ztfico_mkyz003-lifnr = i_lifnr. "供应商
lt_ztfico_mkyz003-bukrs = i_bukrs. "公司代码
lt_ztfico_mkyz003-zformdatacode = it_header-zformdatacode. "单据code
lt_ztfico_mkyz003-zprocessinstanceid = it_header-zprocessinstanceid. "流程实例Id
lt_ztfico_mkyz003-ztaskid = it_header-ztaskid. "流程节点Id
lt_ztfico_mkyz003-zformtype = it_header-zformtype. "单据类型
lt_ztfico_mkyz003-zdqr = ls_item_1-zdqr. "到期日
lt_ztfico_mkyz003-zpaytotalamount = it_header-zpaytotalamount. "总待付款金额
lt_ztfico_mkyz003-zwaitpayamount = ls_item_1-zwaitpayamount. "待付款金额明细
lt_ztfico_mkyz003-waers = ls_item_1-waers. "待付款金额-币别
lt_ztfico_mkyz003-zdate = sy-datum.
lt_ztfico_mkyz003-ztime = sy-uzeit.
lt_ztfico_mkyz003-zdjje = ls_item_1-zdjje. "单据金额
READ TABLE lt_002 WITH KEY zbelnr = ls_item_1-zformbizcode_1 BINARY SEARCH.
IF sy-subrc EQ 0.
lt_ztfico_mkyz003-zdfje = lt_002-zdfje. "付款总金额
lt_ztfico_mkyz003-tsl = lt_002-tsl. "发票金额
ENDIF.
"凭证号
lv_belnr = ls_item_1-zformbizcode+0(10). "前10位为凭证号
lv_docln = ls_item_1-zformbizcode+13(3). "后3位为行项目号
lv_gjahr = ls_item_1-zformbizcode+20(4). "年份
lt_ztfico_mkyz003-belnr = lv_belnr.
lt_ztfico_mkyz003-docln = lv_docln.
lt_ztfico_mkyz003-gjahr = lv_gjahr.
"计算折扣金额 modify by 80007687 20210323
lv_zpayamount = lt_ztfico_mkyz003-zpayamount.
IF lt_ztfico_mkyz003-zdfje = lt_ztfico_mkyz003-tsl AND lv_zpayamount <= 100 .
lt_ztfico_mkyz003-zzkje = '0'.
ELSEIF lt_ztfico_mkyz003-zdfje < lt_ztfico_mkyz003-tsl AND lv_zpayamount <= 100 .
lt_ztfico_mkyz003-zzkje = lt_ztfico_mkyz003-tsl - lt_ztfico_mkyz003-zdfje.
ENDIF.
"end 80007687 20210323
"下一个过账日期
IF lt_ztfico_mkyz003-zdqr <= lv_date1. "到期日<当天日期,下一个过账日期 = 当天日期 + 1天
lv_date2 = lv_date1 + 1.
ELSE.
lv_date2 = lt_ztfico_mkyz003-zdqr.
ENDIF.
**------------------bdc录屏 epic_proc 电子支付集成 数据准备------start------
PERFORM bdc_dynpro1 USING 'SAPLEPIC_PROC' '3010' CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'BDC_OKCODE'
'=3010_EXEC' CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'BDC_CURSOR'
'S_BSEG_P-LOW' CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'P_BUK_P'
i_bukrs CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'S_LIF_P-LOW'
i_lifnr CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'P_BUD_P'
lv_date1 CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'P_GRD_P'
lv_date1 CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'P_NED_P'
lv_date2 CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'P_ZWE_P'
lv_fkfs CHANGING bdcdata.
APPEND bdcdata.
PERFORM bdc_field1 USING 'S_BSEG_P-LOW'
lv_belnr CHANGING bdcdata.
APPEND bdcdata.
CALL TRANSACTION 'ZFICOM008' USING bdcdata
MODE lv_mode
UPDATE 'S'
MESSAGES INTO lt_message.
**------------------BDC录屏 EPIC_PROC 电子支付集成 数据准备------END------
APPEND lt_ztfico_mkyz003.
CLEAR: ls_item_1, lt_ztfico_mkyz003,bdcdata[].
ENDLOOP.
FORM bdc_dynpro1 USING program dynpro
CHANGING bdcdata LIKE bdcdata.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
ENDFORM.
FORM bdc_field1 USING fnam fval
CHANGING bdcdata LIKE bdcdata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
CONDENSE bdcdata-fval.
ENDFORM.