欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【MM】基于收货的发票校验Bapi Demo

发布时间:2025/3/20 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【MM】基于收货的发票校验Bapi Demo 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

正常我们都会在供应商主档和信息记录主档中勾选“基于收货的发票校验”选项,意味着做采购发票校验的时候需要基于收货凭证。

      LS_ITEM-REF_DOC = LT_ZMSEG-MBLNR. 
      LS_ITEM-REF_DOC_YEAR = LT_ZMSEG-MJAHR.
      LS_ITEM-REF_DOC_IT = LT_ZMSEG-ZEILE.

下面分享一个简单的Demo:

1、数据准备

DATA: LS_HEADER TYPE BAPI_INCINV_CREATE_HEADER.DATA: LT_ITEMS TYPE TABLE OF BAPI_INCINV_CREATE_ITEM.PERFORM FILL_VALUES TABLES LT_ITEMSUSING LS_HEADER.PERFORM RUN_TO_CREATE_IV TABLES LT_ITEMSUSING LS_HEADER.

2、数据填充

*&---------------------------------------------------------------------* *& Form fill_values *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->PT_ITEMS text * -->PS_HEADER text *----------------------------------------------------------------------* FORM FILL_VALUES TABLES PT_ITEMS STRUCTURE BAPI_INCINV_CREATE_ITEMUSING PS_HEADER TYPE BAPI_INCINV_CREATE_HEADER.DATA: LS_ITEM LIKE LINE OF PT_ITEMS[].FIELD-SYMBOLS: <LS_ITEM> LIKE LINE OF PT_ITEMS[].DATA: LS_DATA2 LIKE LINE OF GT_DATA2.DATA: LV_AMOUNT(40).DATA: LS_EKPO TYPE EKPO.DATA: LT_ZMSEG LIKE TABLE OF ZMSEG WITH HEADER LINE.DATA: LT_ZMSEG1 LIKE TABLE OF ZMSEG WITH HEADER LINE.DATA: LV_ITEM TYPE N LENGTH 6.DATA: LV_NETWR TYPE ZMJMIMS0023-NETWR."Fill Header dataREAD TABLE GT_DATA2 INTO LS_DATA2 INDEX 1.SELECT SINGLE RETPOFROM EKPOINTO LS_EKPO-RETPOWHERE EBELN = LS_DATA2-EBELNAND EBELP = LS_DATA2-EBELP.IF LS_EKPO-RETPO = 'X'.PS_HEADER-INVOICE_IND = SPACE.ELSE.PS_HEADER-INVOICE_IND = 'X'.ENDIF.PS_HEADER-DOC_TYPE = 'RE'.PS_HEADER-DOC_DATE = ZMCAIMS0021-COMDT.PS_HEADER-PSTNG_DATE = ZMCAIMS0021-BUDAT.PS_HEADER-COMP_CODE = ZMCAIMS0021-BUKRS.PS_HEADER-CURRENCY = ZMCAIMS0021-WAERS.CLEAR: LV_AMOUNT.WRITE ZMCAIMS0021-RMWWR TO LV_AMOUNT CURRENCY ZMCAIMS0021-WAERS.REPLACE ALL OCCURRENCES OF ',' IN LV_AMOUNT WITH ''.PS_HEADER-GROSS_AMOUNT = LV_AMOUNT.PS_HEADER-PMNTTRMS = ZMCAIMS0021-ZTERM.PS_HEADER-BLINE_DATE = ZMCAIMS0021-BUDAT.PS_HEADER-PERSON_EXT = SY-UNAME.PS_HEADER-HEADER_TXT = ZMCAIMS0021-BLENO.PS_HEADER-REF_DOC_NO = ZMCAIMS0021-COMIV.CLEAR :GV_IV,LV_ITEM.SORT GT_DATA2.LOOP AT GT_DATA2 INTO LS_DATA2.REFRESH LT_ZMSEG[].CLEAR : LV_MENGE_TOL,LV_AMOUNT_TOL."合计校验SELECT * FROM ZMSEGINTO TABLE LT_ZMSEGWHERE EBELN = LS_DATA2-EBELNAND EBELP = LS_DATA2-EBELPAND BWART IN ('101','102','161','162')."剔除冲销项目LT_ZMSEG1[] = LT_ZMSEG[].LOOP AT LT_ZMSEG1 WHERE SMBLN IS NOT INITIAL.DELETE LT_ZMSEG WHERE MBLNR = LT_ZMSEG1-SMBLNAND ZEILE = LT_ZMSEG1-SMBLP.ENDLOOP.DELETE LT_ZMSEG WHERE SMBLN IS NOT INITIAL.LOOP AT LT_ZMSEG.CLEAR: LS_ITEM.CHECK LT_ZMSEG-MENGE > 0.LV_ITEM = LV_ITEM + 1.LS_ITEM-INVOICE_DOC_ITEM = LV_ITEM.LS_ITEM-PO_NUMBER = LS_DATA2-EBELN.LS_ITEM-PO_ITEM = LS_DATA2-EBELP.LS_ITEM-REF_DOC = LT_ZMSEG-MBLNR."参照收货凭证LS_ITEM-REF_DOC_YEAR = LT_ZMSEG-MJAHR.LS_ITEM-REF_DOC_IT = LT_ZMSEG-ZEILE.LS_ITEM-TAX_CODE = 'J0'.LS_ITEM-ITEM_TEXT = PS_HEADER-ITEM_TEXT.LS_ITEM-QUANTITY = LT_ZMSEG-MENGE.LS_ITEM-PO_UNIT = LT_ZMSEG-MEINS.CLEAR: LV_NETWR,LV_AMOUNT.LV_NETWR = LT_ZMSEG-MENGE * LS_DATA2-NETPR.WRITE LV_NETWR TO LV_AMOUNT CURRENCY ZMCAIMS0021-WAERS.REPLACE ALL OCCURRENCES OF ',' IN LV_AMOUNT WITH ''.LS_ITEM-ITEM_AMOUNT = LV_AMOUNT.APPEND LS_ITEM TO PT_ITEMS.ENDLOOP.ENDLOOP.ENDFORM. "fill_values

3、Bapi调用

*&---------------------------------------------------------------------* *& Form run_to_create_iv *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->PT_ITEMS text * -->PS_HEADER text *----------------------------------------------------------------------* FORM RUN_TO_CREATE_IV TABLES PT_ITEMS STRUCTURE BAPI_INCINV_CREATE_ITEMUSING PS_HEADER TYPE BAPI_INCINV_CREATE_HEADER.DATA: LT_RET TYPE TABLE OF BAPIRET2.DATA: LV_INVNO TYPE BAPI_INCINV_FLD-INV_DOC_NO,LV_FYEAR TYPE BAPI_INCINV_FLD-FISC_YEAR.DATA: LS_BKPF TYPE BKPF.CLEAR: LT_RET.CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'EXPORTINGHEADERDATA = PS_HEADER * ADDRESSDATA =IMPORTINGINVOICEDOCNUMBER = LV_INVNOFISCALYEAR = LV_FYEARTABLESITEMDATA = PT_ITEMS[] * ACCOUNTINGDATA = * GLACCOUNTDATA = * MATERIALDATA = * TAXDATA = lt_taxes * WITHTAXDATA = * VENDORITEMSPLITDATA =RETURN = LT_RET.PERFORM CHECK_BAPI_ERROR USING LT_RET.IF GV_BAPI_ERROR <> 'X'.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X' * IMPORTING * RETURN =.MESSAGE S398(00) WITH 'Invoice document(' ZMCAIMS0021-INVNO ') created'.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' * IMPORTING * RETURN =.PERFORM SHOW_MESSAGE USING LT_RET.ENDIF. ENDFORM. " run_to_create_iv*&---------------------------------------------------------------------* *& Form show_message *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->PT_MSG text *----------------------------------------------------------------------* FORM SHOW_MESSAGE USING PT_MSG TYPE BAPIRET2_T.PERFORM CHECK_BAPI_ERROR USING PT_MSG[].IF GV_BAPI_ERROR = 'X'."오류 메시지가 발생했을 경우CALL FUNCTION 'FB_MESSAGES_DISPLAY_POPUP'EXPORTING * IT_SMESG = * ID_SMESG_ZEILE =IT_RETURN = PT_MSG[] * ID_SEND_IF_ONE =EXCEPTIONSNO_MESSAGES = 1POPUP_CANCELLED = 2OTHERS = 3.ENDIF. ENDFORM. " show_message*&---------------------------------------------------------------------* *& Form check_bapi_error *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->PT_BAPI_MSG text *----------------------------------------------------------------------* FORM CHECK_BAPI_ERROR USING PT_BAPI_MSG TYPE BAPIRET2_T.CLEAR: GV_BAPI_ERROR.READ TABLE PT_BAPI_MSG TRANSPORTING NO FIELDS WITH KEY TYPE = 'E'.IF SY-SUBRC = 0.GV_BAPI_ERROR = 'X'.ENDIF.READ TABLE PT_BAPI_MSG TRANSPORTING NO FIELDS WITH KEY TYPE = 'A'.IF SY-SUBRC = 0.GV_BAPI_ERROR = 'X'.ENDIF. ENDFORM. " check_bapi_error

 

总结

以上是生活随笔为你收集整理的【MM】基于收货的发票校验Bapi Demo的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。