BAPI_INCOMINGINVOICE_CREATE 发票校验

发票校验的四种类型

1.基于采购订单的发票校验:填写采购订单(根据配置决定是否需要采购订单收货)

2.基于收货的发票校验:填写采购订单和收货物料凭证的参考凭证。需要采购订单勾选,基于收货的发票校验(勾选了之后也只能基于收货做发票了)

3.没有订单的发票校验:不填写采购订单,直接计入总账或资产科目

 

错误:

如果没有填写lt_bapi_item-po_unit,会产生 没有指定 ISO-CodeSPACE 的测量单位 的错误

如果收货做了贷项或者退货做的正向的会报错:迄今为止冲销数量大于贷出数量

如果发票校验数量大于参考凭证可做数量,会报错“冲销数量大于目前以开票数量”,比如做折扣时如果折扣金额大于总金额,

金额为负做贷项凭证时,就会报这个错误(采购订单项目非退货)(所以这个方案行不通)。

M8147 - Account Determination for entry not possible:这个是金额差异太大,gross_amount不等于行项目金额+税额

 

发票校验的差异

如果发票校验行项目金额和采购订单行项目金额不一致,根据配置有两种记差异的方法。

1.发票校验时行项目和抬头填入实际金额,根据配置,生成会计凭证的时候自动计一笔物料差异科目,此时差异科目是带物料号的。

2.发票校验时行项目填入采购订单金额,抬头填入实际金额,另外记一笔差异科目,金额 = 抬头金额 - 税额 - 行项目金额。此时会计入库存商品科目,同时会有一笔差异科目(手工记的),此时差异是不带物料号的。

 

问题

M8 088 发出数量为0的错误,

如果是基于收货的发票校验,传入的参考凭证被冲销了,即使采购订单确实收货了,也会报这个错误

可以通过OMRM配置,注意标准是W表示MIRO不会报错,所以

No measurement unit is assigned to ISO code &

原因:订单计量单位和订单价格单位不一致,需要填写PO_PR_UOM_ISO、PO_PR_UOM

 

4.取发票校验参考数据

ME_READ_HEADER_INVOICE

ME_READ_ITEM_INVOICE 

 

DEMO

form post  using    ut_out type ty_t_out

           changing cv_belnr cv_msg.

  data ls_out type ty_out.

 

*BAPI

  data: ls_header like bapi_incinv_create_header,

        ls_item type bapi_incinv_create_item,

        lt_item type table of bapi_incinv_create_item,

        ls_tax type bapi_incinv_create_tax,

        lt_tax type table of bapi_incinv_create_tax,

        ls_return type bapiret2 ,

        lt_return type table of bapiret2 .

 

  data:

*        lv_invno like bapi_incinv_fld-inv_doc_no,

        lv_fyear like bapi_incinv_fld-fisc_year.

 

  clear:cv_belnr,cv_msg.

 

*基于采购订单的发票校验

  loop at ut_out into ls_out.

    ls_item-invoice_doc_item = sy-tabix.

    ls_item-po_number = ls_out-ebeln.    "ENTER THE PO NUMBER

    ls_item-po_item = ls_out-ebelp.           "ENTER THE PO ITEM NUMBER

    ls_item-tax_code = ls_out-mwskz. "税码

    ls_item-item_amount = ls_out-netwr. "不含税金额

    ls_item-quantity = ls_out-fkimg. "数量

    ls_item-po_unit = ls_out-meins. "单位

    ls_item-ITEM_TEXT = p_sh. "税号

    append ls_item to lt_item.

 

    ls_header-gross_amount = ls_header-gross_amount + ls_out-hsje.

    ls_tax-tax_amount  = ls_tax-tax_amount + ls_out-mwsbp. "税额

  endloop.

 

  append ls_tax to lt_tax.

 

  ls_header-invoice_ind = 'X'. "记帐发票(正向)

  ls_header-pmnttrms = ls_out-zterm. "付款条件

  ls_header-doc_date = P_DATUM.   "ENTER THE DOCUMENT DATE

  ls_header-pstng_date = ls_out-budat. "ENTER THE POSTING DATE

  ls_header-ref_doc_no = p_sh.

  ls_header-comp_code = p_bukrs.

  ls_header-gross_amount = ls_header-gross_amount.  "发票总金额(含税)

*  ls_header-calc_tax_ind = 'X'. "自动计算税额(不能修改税额了,不需要传入taxdata,但是gross_amount好像还是要算?所以还是取税率计算)

  ls_header-currency = 'CNY'.

 

 

 

  call function 'BAPI_INCOMINGINVOICE_CREATE'

    exporting

      headerdata          = ls_header

*     ADDRESSDATA         =

    importing

      invoicedocnumber    = cv_belnr

      fiscalyear          = lv_fyear

    tables

      itemdata            = lt_item

*     ACCOUNTINGDATA      =

*     GLACCOUNTDATA       =

*     MATERIALDATA        =

      taxdata             = lt_tax

*     WITHTAXDATA         =

*     VENDORITEMSPLITDATA =

      return              = lt_return

*     EXTENSIONIN         =

    .

 

  if cv_belnr is not initial.

    call function 'BAPI_TRANSACTION_COMMIT'

      exporting

        wait = 'X'.

*    cv_msg = '发票校验成功,发票号:' && cv_belnr.

  else.

    call function 'BAPI_TRANSACTION_ROLLBACK'.

    cv_msg = '发票校验失败' .

    loop at lt_return into ls_return where type = 'E' or type = 'A' or type = 'X'.

      cv_msg = cv_msg && ',' && ls_return-message.

    endloop.

  endif.

 

endform.                    " POST

 

 

猜你喜欢

转载自blog.csdn.net/cylcylcylcylwo/article/details/114014892