功能需求为实现一个接口,进行供应商付款业务。要求可使用现金、银行存款、汇票等过账方式,本想用BDC录屏实现事务码F-02,结果测试时发现有些过账码内容不能同时使用,现记录下来,抛砖引玉,如有大神知道怎么改,请多指教,后期将另一篇文章中用bapi实现此业务。话不多说,先上代码:
FUNCTION ZFI_OA_SUPLIER_SPECEIL_PAY.
*"----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*" REFERENCE(BUKRS) TYPE BUKRS DEFAULT ‘1000’
*" REFERENCE(BLART) TYPE BLART DEFAULT ‘SA’
*" REFERENCE(BLDAT) TYPE BLDAT DEFAULT SY-DATUM
*" REFERENCE(BUDAT) TYPE BUDAT DEFAULT SY-DATUM
*" REFERENCE(XBLNR) TYPE XBLNR OPTIONAL
*" REFERENCE(KURSF) TYPE KURSF OPTIONAL
*" REFERENCE(WAERS) TYPE WAERS
*" REFERENCE(BKTXT) TYPE BKTXT
*" EXPORTING
*" REFERENCE(RTYPE) TYPE BAPI_MTYPE
*" REFERENCE(RTMSG) TYPE BAPI_MSG
*" REFERENCE(BELNR) TYPE BELNR_D
*" REFERENCE(GJAHR) TYPE GJAHR
*" TABLES
*" IT_ITEM STRUCTURE ZF02ITEM
*"----------------------------------------------------------------------
DATA BEGIN OF ITAB OCCURS 0.
INCLUDE TYPE ZF02ITEM.
DATA:NUM TYPE SY-TABIX,
END OF ITAB,
WA LIKE LINE OF ITAB,
WRBTR1 TYPE CHAR23,
WRBTR2 TYPE CHAR23,
MONAT TYPE CHAR2,
KURSFC TYPE CHAR9.
DATA:BDCMSG LIKE ARRANG_ERR,
MSG TYPE BAPI_MSG.
IF IT_ITEM[] IS NOT INITIAL.
CLEAR:BDCDATA[],MESSTAB[],BELNR,GJAHR,RTMSG,RTYPE.
MONAT = BUDAT+4(2).
APPEND LINES OF IT_ITEM TO ITAB.
PERFORM BDC_DYNPRON USING 'SAPMF05A' '0100'."头数据录入
PERFORM BDC_FIELDN USING 'BDC_CURSOR'
'RF05A-NEWKO'.
PERFORM BDC_FIELDN USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELDN USING 'BKPF-BLDAT' BLDAT ."凭证日期
PERFORM BDC_FIELDN USING 'BKPF-BLART' BLART."凭证类型 总账科目凭证 默认SA
PERFORM BDC_FIELDN USING 'BKPF-BUKRS' BUKRS. "公司代码 默认1000
PERFORM BDC_FIELDN USING 'BKPF-BUDAT' BUDAT. "过账日期
PERFORM BDC_FIELDN USING 'BKPF-MONAT' MONAT."记账期间
PERFORM BDC_FIELDN USING 'BKPF-WAERS' WAERS."货币 默认CNY
PERFORM BDC_FIELDN USING 'BKPF-BKTXT' BKTXT."抬头文本
PERFORM BDC_FIELDN USING 'FS006-DOCID' '*' .
IF KURSF IS NOT INITIAL.
PERFORM BDC_FIELDN USING 'BKPF-KURSF' KURSF. "汇率
ENDIF.
LOOP AT ITAB.
WRBTR1 = ITAB-WRBTR.
CONDENSE WRBTR1 NO-GAPS.
IF ITAB-NEWUM EQ 'W'.
PERFORM BDC_FIELDN USING 'RF05A-NEWBS' ITAB-BSCHL."过账码
PERFORM BDC_FIELDN USING 'RF05A-NEWKO' ITAB-HKONT. "科目
PERFORM BDC_FIELDN USING 'RF05A-NEWUM' ITAB-NEWUM."特别总账标识
PERFORM BDC_DYNPRON USING 'SAPMF05A' '0320'.
PERFORM BDC_FIELDN USING 'BDC_CURSOR'
'RF05A-NEWBS'.
PERFORM BDC_FIELDN USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELDN USING 'BSEG-WRBTR' WRBTR1 . "金额
PERFORM BDC_FIELDN USING 'BSEG-ZFBDT' ITAB-ZFBDT. "汇票到期日期
PERFORM BDC_FIELDN USING 'BSED-WNAME' ITAB-WNAME. "收款人名字
-
PERFORM BDC_FIELD USING 'BSED-WORT1' ."收款人城市
-
PERFORM BDC_FIELD USING 'BSED-REGIO' ."收款人城市码 PERFORM BDC_FIELDN USING 'BSED-WBZOG' ITAB-WBZOG."付款人
-
PERFORM BDC_FIELD USING 'BSED-WORT2' . "付款人城市 PERFORM BDC_FIELDN USING 'BSEG-ZUONR' ITAB-ZUONR."分配 PERFORM BDC_FIELDN USING 'BSEG-SGTXT' ITAB-SGTXT."文本 PERFORM BDC_FIELDN USING 'BSED-WBANK' ITAB-WBANK."指定支付地点 PERFORM BDC_FIELDN USING 'BSED-WLZBP' ITAB-WLZBP."中央银行位置 PERFORM BDC_FIELDN USING 'BSED-BOENO' ITAB-BOENO."Check Number ELSE . PERFORM BDC_FIELDN USING 'RF05A-NEWBS' ITAB-BSCHL."过账码 PERFORM BDC_FIELDN USING 'RF05A-NEWKO' ITAB-HKONT. "科目 IF ITAB-BSCHL EQ '50'. PERFORM BDC_DYNPRON USING 'SAPMF05A' '0300'. PERFORM BDC_FIELDN USING 'BDC_OKCODE' '/00'. PERFORM BDC_FIELDN USING 'BSEG-WRBTR' WRBTR1 . "金额 PERFORM BDC_FIELDN USING 'BSEG-ZUONR' ITAB-ZUONR."分配 PERFORM BDC_FIELDN USING 'BSEG-SGTXT' ITAB-SGTXT."文本 PERFORM BDC_FIELDN USING 'BDC_OKCODE' '/00'. PERFORM BDC_DYNPRON USING 'SAPLKACB' '0002'. PERFORM BDC_DYNPRON USING 'SAPMF05A' '0330'. PERFORM BDC_FIELDN USING 'BSEG-RSTGR' ITAB-RSTGR."原因码 PERFORM BDC_FIELDN USING 'BDC_OKCODE' '/00'. ELSE . PERFORM BDC_DYNPRON USING 'SAPMF05A' '0302'. PERFORM BDC_FIELDN USING 'BDC_OKCODE' '/00'. PERFORM BDC_FIELDN USING 'BSEG-WRBTR' WRBTR1 . "金额 PERFORM BDC_FIELDN USING 'BSEG-MWSKZ' '**'."税码 PERFORM BDC_FIELDN USING 'BSEG-ZFBDT' ITAB-ZFBDT. "付款起算日期 PERFORM BDC_FIELDN USING 'BSEG-ZUONR' ITAB-ZUONR."分配 PERFORM BDC_FIELDN USING 'BSEG-SGTXT' ITAB-SGTXT."文本 PERFORM BDC_FIELDN USING 'BDC_OKCODE' '/00'. ENDIF. ENDIF. CLEAR ITAB.
ENDLOOP.
PERFORM BDCFM TABLES BDCDATA MESSTAB USING ‘F-02’ ‘N’.
READ TABLE MESSTAB WITH KEY MSGTYP = ‘E’.
IF SY-SUBRC = 0.
PERFORM BDCMSG TABLES MESSTAB CHANGING RTMSG.
RTYPE = ‘E’.
ELSE.
RTMSG = ‘警告,未执行完’.
RTYPE = ‘W’.
READ TABLE MESSTAB WITH KEY MSGTYP = ‘S’ MSGID = ‘F5’ MSGNR = ‘312’ .
IF SY-SUBRC = 0.
BELNR = MESSTAB-MSGV1.
GJAHR = BUDAT+0(4).
RTMSG = ‘成功’.
RTYPE = ‘S’.
ELSE.
RTMSG = ‘警告,执行完,但未生成记录’.
RTYPE = ‘W’.
ENDIF.ENDIF .
ENDIF .
ENDFUNCTION.
以下为数据结构====================
有些字段未放入录屏中,如有需求可自行添加。