SAP 预制发票BAPI:BAPI_INCOMINGINVOICE_PARK

创建预制发票
BAPI:BAPI_INCOMINGINVOICE_PARK
以下代码供参考:

"bapi's stru
DATA: LS_HEADERDATA          TYPE BAPI_INCINV_CREATE_HEADER.
DATA: LV_INVOICEDOCNUMBER    LIKE BAPI_INCINV_FLD-INV_DOC_NO.
DATA: LV_FISCALYEAR          LIKE BAPI_INCINV_FLD-FISC_YEAR.
DATA: LT_ITEMDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_ITEM,
      LS_ITEMDATA TYPE BAPI_INCINV_CREATE_ITEM.
DATA: LT_TAXDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_TAX,
      LS_TAXDATA TYPE BAPI_INCINV_CREATE_TAX.
DATA: LT_GLACCOUNTDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_GL_ACCOUNT,
      LS_GLACCOUNTDATA TYPE BAPI_INCINV_CREATE_GL_ACCOUNT.
DATA: LT_EXTENSIONIN TYPE TABLE OF BAPIPAREX,
      LS_EXTENSIONIN TYPE BAPIPAREX.

DATA: LT_RETURN              TYPE STANDARD TABLE OF BAPIRET2.
DATA: LS_RETURN              TYPE BAPIRET2.

DATA: LV_ITEM TYPE BAPI_INCINV_CREATE_ITEM-INVOICE_DOC_ITEM.

DATA: LT_BAPI TYPE TABLE OF TY_OUTPUT.
DATA: LS_BAPI TYPE TY_OUTPUT.

SORT GT_OUTPUT BY XBLNR RETPO.

LT_BAPI[] = GT_OUTPUT[].
DELETE LT_BAPI WHERE SLBOX EQ ''.
DELETE LT_BAPI WHERE LIGHT EQ GC_LIGHT_R.

LOOP AT LT_BAPI ASSIGNING FIELD-SYMBOL(<LS_BAPI>).
  AT NEW RETPO.

    IF <LS_BAPI>-RETPO IS INITIAL.
      LS_HEADERDATA-INVOICE_IND = 'X'. "发票
      LS_HEADERDATA-DELIV_POSTING = 'S'. "
      LS_HEADERDATA-RETURN_POSTING = 'H'. "

      LS_HEADERDATA-GROSS_AMOUNT = <LS_BAPI>-ZWRBTRZ1. "抬头金额

      LS_TAXDATA-TAX_AMOUNT = <LS_BAPI>-ZWRBTRZ_ALL. "税额

      "总账科目的科目金额
*      CLEAR LV_ITEM.
*      IF <LS_BAPI>-ZWRBTR2_ALL IS NOT INITIAL .
*        LV_ITEM = LV_ITEM + 1.
*        LS_GLACCOUNTDATA-INVOICE_DOC_ITEM = LV_ITEM.
*        LS_GLACCOUNTDATA-GL_ACCOUNT = '1404060000'.
*        LS_GLACCOUNTDATA-ITEM_AMOUNT = <LS_BAPI>-ZWRBTR2_SUM.
*        LS_GLACCOUNTDATA-DB_CR_IND = 'S'.
*        LS_GLACCOUNTDATA-TAX_CODE = <LS_BAPI>-MWSKZ.
*        LS_GLACCOUNTDATA-COMP_CODE = <LS_BAPI>-BUKRS.
*        APPEND LS_GLACCOUNTDATA TO LT_GLACCOUNTDATA.
*        CLEAR LS_GLACCOUNTDATA.
*      ENDIF.

    ELSE.
      LS_HEADERDATA-INVOICE_IND = ''. "贷方凭证
      LS_HEADERDATA-DELIV_POSTING = 'H'. "
      LS_HEADERDATA-RETURN_POSTING = 'H'. "

      LS_HEADERDATA-GROSS_AMOUNT = <LS_BAPI>-ZWRBTRZ1. "抬头金额

      LS_TAXDATA-TAX_AMOUNT = <LS_BAPI>-ZWRBTRZ_ALL. "税额
    ENDIF.

    LS_HEADERDATA-DOC_DATE = <LS_BAPI>-BUDAT. "发票日期
    LS_HEADERDATA-PSTNG_DATE = <LS_BAPI>-BUDAT. "过账日期
    LS_HEADERDATA-COMP_CODE = <LS_BAPI>-BUKRS. "公司
    LS_HEADERDATA-ITEM_TEXT = <LS_BAPI>-XBLNR. "项目文本

    "货币
    SELECT SINGLE
      WAERS
      INTO LS_HEADERDATA-CURRENCY
      FROM EKKO
      WHERE EBELN EQ <LS_BAPI>-EBELN.

    "税码
    LS_TAXDATA-TAX_CODE = <LS_BAPI>-MWSKZ.
    APPEND LS_TAXDATA TO LT_TAXDATA.
    CLEAR LS_TAXDATA.


    CLEAR LV_ITEM.
  ENDAT.

  LV_ITEM = LV_ITEM + 1.
  LS_ITEMDATA-INVOICE_DOC_ITEM = LV_ITEM. "
  LS_ITEMDATA-PO_NUMBER = <LS_BAPI>-EBELN. "采购订单
  LS_ITEMDATA-PO_ITEM = <LS_BAPI>-EBELP. "采购订单行项目
  LS_ITEMDATA-REF_DOC = <LS_BAPI>-BELNR. "参考凭证号
  LS_ITEMDATA-REF_DOC_YEAR = <LS_BAPI>-MJAHR. "参考凭证号年度
  LS_ITEMDATA-REF_DOC_IT = <LS_BAPI>-BUZEI. "参考凭证号行项目
  LS_ITEMDATA-QUANTITY = <LS_BAPI>-MENGE. "数量
  LS_ITEMDATA-PO_UNIT = <LS_BAPI>-MEINS. "单位
  LS_ITEMDATA-TAX_CODE = <LS_BAPI>-MWSKZ. "税码
  LS_ITEMDATA-ITEM_AMOUNT = <LS_BAPI>-ZWRBTR3. "不含税金额
  LS_ITEMDATA-ITEM_TEXT = <LS_BAPI>-XBLNR. "开票通知单号

  APPEND LS_ITEMDATA TO LT_ITEMDATA.
  CLEAR LS_ITEMDATA.

  AT END OF RETPO.
    CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
      EXPORTING
        HEADERDATA       = LS_HEADERDATA
*       ADDRESSDATA      = ADDRESSDATA
      IMPORTING
        INVOICEDOCNUMBER = LV_INVOICEDOCNUMBER
        FISCALYEAR       = LV_FISCALYEAR
      TABLES
        ITEMDATA         = LT_ITEMDATA
*       ACCOUNTINGDATA   = ACCOUNTINGDATA
        GLACCOUNTDATA    = LT_GLACCOUNTDATA
*       MATERIALDATA     = MATERIALDATA
        TAXDATA          = LT_TAXDATA
*       WITHTAXDATA      = WITHTAXDATA
*       VENDORITEMSPLITDATA       = VENDORITEMSPLITDATA
        RETURN           = LT_RETURN
*       EXTENSIONIN      = LT_EXTENSIONIN
*       TM_ITEMDATA      = TM_ITEMDATA
*       NFMETALLITMS     = NFMETALLITMS
*       ASSETDATA        = ASSETDATA
      .

    READ TABLE LT_RETURN TRANSPORTING NO FIELDS WITH KEY TYPE = 'E'.
    IF SY-SUBRC EQ 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.


      LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E'.
        <LS_BAPI>-LIGHT = GC_LIGHT_R.
        <LS_BAPI>-MESSAGE = <LS_BAPI>-MESSAGE && LS_RETURN-MESSAGE.
      ENDLOOP.
      MODIFY GT_OUTPUT FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE
                        WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.
      MODIFY LT_BAPI FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE
                          WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.
    ELSE.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.

      <LS_BAPI>-LIGHT = GC_LIGHT_G.
      <LS_BAPI>-MESSAGE = '发票预制成功'.
      <LS_BAPI>-BELNR_FP = LV_INVOICEDOCNUMBER.
      "回写消息状态和生成的发票号到ALV
      MODIFY GT_OUTPUT FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE BELNR_FP
                        WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.
      MODIFY LT_BAPI FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE BELNR_FP
                          WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.

    ENDIF.

    CLEAR: LS_HEADERDATA,
                LS_TAXDATA,LT_TAXDATA,
                LS_GLACCOUNTDATA,LT_GLACCOUNTDATA,
                LS_ITEMDATA,LT_ITEMDATA,
                LS_RETURN,LT_RETURN,
                LV_INVOICEDOCNUMBER,LV_FISCALYEAR.

  ENDAT.
ENDLOOP.

代码中以同一单号正向的做正向发票,采购退的做贷方凭证,具体可看代码中的传值。
OVER…

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以了解到BAPI_INCOMINGINVOICE_CREATE1是一个用于创建进货发票的标准BAPI。而BAPI_INCOMINGINVOICE_PARK是一个用于将进货发票暂存的标准BAPI。下面是一个简单的示例代码,演示如何使用BAPI_INCOMINGINVOICE_PARK: ```ABAP DATA: lt_invoice_header TYPE STANDARD TABLE OF bapivbrk, lt_invoice_item TYPE STANDARD TABLE OF bapivbrp, ls_invoice_header LIKE LINE OF lt_invoice_header, ls_invoice_item LIKE LINE OF lt_invoice_item, ls_return LIKE bapiret2. * 填充进货发票头信息 ls_invoice_header-companycode = '1000'. ls_invoice_header-docdate = '20220101'. ls_invoice_header-pstngdate = '20220101'. ls_invoice_header-duedate = '20220131'. ls_invoice_header-vendor = '10000001'. APPEND ls_invoice_header TO lt_invoice_header. * 填充进货发票行项目信息 ls_invoice_item-material = 'MATERIAL001'. ls_invoice_item-quantity = 10. ls_invoice_item-netvalue = 1000. APPEND ls_invoice_item TO lt_invoice_item. * 调用BAPI_INCOMINGINVOICE_PARK CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK' EXPORTING headerdata = ls_invoice_header TABLES itemdata = lt_invoice_item return = lt_return. * 检查返回结果 IF lt_return IS NOT INITIAL. LOOP AT lt_return INTO ls_return. WRITE: / ls_return-type, ls_return-id, ls_return-number, ls_return-message. ENDLOOP. ENDIF. ``` 上述代码中,我们首先定义了进货发票的头信息和行项目信息,并将其填充到对应的表中。然后,我们调用了BAPI_INCOMINGINVOICE_PARK,并将进货发票的头信息作为EXPORTING参数传递给该BAPI,将进货发票的行项目信息作为TABLES参数传递给该BAPI。最后,我们检查了返回结果,如果有错误信息,则将其输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值