美文网首页
SAP发票接口 BAPI_INCOMINGINVOICE_CRE

SAP发票接口 BAPI_INCOMINGINVOICE_CRE

作者: 拓跋猫儿 | 来源:发表于2021-12-10 17:22 被阅读0次

问题描述

MIRO 发票签收可用 BAPI_INCOMINGINVOICE_CREATE ,通常情况下中只需要传 itemdata,taxdata 参数。有种特殊业务,必须使用 accountingdata 参数。当按照通常情况调用接口会提示“M8 377 项目 000001 至少完成 ACCOUNTINGDATA 的一行”

图1 报错代码截图
向上追踪堆栈可得知,不传递 accountingdata 参数程序必然报错。

问题分析

要解决问题必须重现问题。
ME23N,采购订单行科目分配界面,找到 twrkz 字段,确实订单ekpo.twrkz字段不为空。

图2 订单行 科目分配信息
进入MIRO界面,输入采购订单号后,可以发现界面多了一个科目分配,需要在弹出框中填入信息,检查确认。
图3 MIRO截图
采购订单科目分配信息存在EKKN中,主键有(ebeln,ebelp,zekkn)。MIRO界面的数据必须关联EKBE采购订单收货信息,EKBE关联MSEG收货信息。
图4 MIGO收货信息&EKBE收货信息

解决方案

在调用BAPI前,检查采购订单行科目分配类型,部分开票标识。如果满足要求,需要传递accountingdata 参数。
取数逻辑可参考

        SELECT
             mseg~mblnr,
             mseg~mjahr,
             mseg~ebeln,
             mseg~ebelp,
             mseg~dmbtr,
             mseg~erfmg,
             mseg~kokrs,
             mseg~anln1,
             mseg~anln2,
             mseg~zekkn,
             ekkn~prctr,
             ekkn~sakto
          FROM mseg INNER JOIN ekkn
            ON mseg~ebeln = ekkn~ebeln AND mseg~ebelp = ekkn~ebelp
           AND mseg~zekkn = ekkn~zekkn
          WHERE mseg~mblnr = @gs_line-mblnr
            AND mseg~ebeln = @gs_line-ebeln
            AND mseg~ebelp = @gs_line-ebelp
            AND mseg~bwart = '101'
        APPENDING CORRESPONDING FIELDS OF TABLE @lt_a_twrkz

参考代码如下:

IF ls_po_history-knttp = 'A' AND  ls_po_history-twrkz is not INITIAL.
      CLEAR: lv_quantity ,lv_tr_dmbtr.
      LOOP AT lt_a_twrkz INTO ls_a_twrkz WHERE mblnr = gs_line-mblnr
                                          AND mjahr = ls_po_history-gjahr
                                          AND ebeln = ls_po_history-ebeln
                                          AND ebelp = ls_po_history-ebelp.
        ls_account-invoice_doc_item = lv_index . "  lv_index 行号
        ls_account-serial_no = ls_a_twrkz-zekkn .
        ls_account-tax_code = gs_line-zreserve_i_f2 . " 税码
        ls_account-item_amount = ls_a_twrkz-dmbtr . " 金额
        ls_account-quantity = ls_a_twrkz-erfmg . " 数量
        ls_account-gl_account = ls_a_twrkz-sakto . " 科目
        ls_account-asset_no = ls_a_twrkz-anln1. " 资产号
        ls_account-sub_number = ls_a_twrkz-anln2 . " 资产子码
        ls_account-profit_ctr = ls_a_twrkz-prctr . " 利润中心
        ls_account-co_area = ls_a_twrkz-kokrs . " 控制范围
        ls_account-po_unit   =  ls_po_history-meins.   " 单位 默认值
        ls_account-po_pr_uom =  ls_po_history-bprme .  "  单位
        APPEND ls_account TO lt_account . CLEAR: ls_account .
        lv_quantity = lv_quantity + ls_a_twrkz-erfmg .
        lv_tr_dmbtr = lv_tr_dmbtr + ls_a_twrkz-dmbtr .
      ENDLOOP.
      IF   gs_line-menge <> lv_quantity. " 开票数量 <> 收货数量 直接报错
        lv_message = '收货数量必须与开票数量一致' .
        EXIT.
      ENDIF.
      IF gs_line-netpr  - lv_tr_dmbtr <> 0. " 实际开票金额 <> 收货金额,差异分配到第一个资产中
        READ TABLE lt_account ASSIGNING FIELD-SYMBOL(<ls_account>) WITH KEY invoice_doc_item = lv_index .
        IF sy-subrc =  '0'. " 在第一行分配差异
          <ls_account>-item_amount = <ls_account>-item_amount +   gs_line-netpr  - lv_tr_dmbtr .
        ENDIF.
      ENDIF.
    ENDIF.

接口方案可参考:

    <it_row>
        <ebeln>4500081527</ebeln>
        <ebelp>00010</ebelp>
        <menge>2</menge><!-- 开票数量-->
        <dmbtr>210</dmbtr><!-- 开票金额-->
        <wmwst>38</wmwst><!-- 税额-->
        <mwskz>J1</mwskz><!-- 税码-->
        <mblnr>5000105912</mblnr><!-- ekbe.belnr-->
        <zeile>0001</zeile><!-- ekbe.buzei-->
    </it_row>

相关文章

网友评论

      本文标题:SAP发票接口 BAPI_INCOMINGINVOICE_CRE

      本文链接:https://www.haomeiwen.com/subject/kmncfrtx.html