美文网首页
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