ABAP使用BDC录屏实现供应商付款功能(F-02)

功能需求为实现一个接口,进行供应商付款业务。要求可使用现金、银行存款、汇票等过账方式,本想用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.

以下为数据结构====================

在这里插入图片描述
在这里插入图片描述
参数中使用的表

有些字段未放入录屏中,如有需求可自行添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值