FUNCTION BAPI_INCOMINGINVOICE_CREATE.
*"----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*" VALUE(I_MM1_0030) TYPE ZTPSSC_MM1_0030 OPTIONAL
*" VALUE(I_FIX) TYPE CHAR1 OPTIONAL
*" EXPORTING
*" VALUE(OUTPUT) TYPE MSG
*" VALUE(E_BELNR) TYPE RE_BELNR
*" VALUE(E_GJAHR) TYPE GJAHR
*" TABLES
*" T_MM1_0030I STRUCTURE ZTPSSC_MM1_0030I
*"----------------------------------------------------------------------
DATA: vp_eind(1),
ls_headerdata LIKE bapi_incinv_create_header,
lt_itemdata LIKE TABLE OF bapi_incinv_create_item,
ls_itemdata LIKE bapi_incinv_create_item,
lt_materialdata LIKE TABLE OF bapi_incinv_create_material,
ls_materialdata LIKE bapi_incinv_create_material,
lt_taxdata LIKE TABLE OF bapi_incinv_create_tax,
ls_taxdata LIKE bapi_incinv_create_tax,
lt_return LIKE TABLE OF bapiret2 WITH HEADER LINE,
ls_return LIKE bapiret2,
lv_invoicedocnumber LIKE bapi_incinv_fld-inv_doc_no,
lv_fiscalyear LIKE bapi_incinv_fld-fisc_year.
DATA: lv_mwskz LIKE ekpo-mwskz.
DATA: lv_rblgp TYPE rblgp.
DATA: lv_ekko TYPE ekko,
lv_ebeln LIKE ekko-ebeln.
DATA: ls_essr TYPE essr,
lt_essr TYPE TABLE OF essr.
DATA: lt_mm1_0030 LIKE TABLE OF ztpssc_mm1_0030.
DATA: lt_mm1_0030i LIKE TABLE OF ztpssc_mm1_0030i.
DATA: lw_mm1_0030 LIKE LINE OF lt_mm1_0030.
DATA: lw_mm1_0030i LIKE LINE OF lt_mm1_0030i.
DATA: lw_lfm1 TYPE lfm1.
CLEAR: e_belnr,e_gjahr.
lw_mm1_0030 = i_mm1_0030.
lt_mm1_0030i[] = t_mm1_0030i[].
IF i_fix = ‘X’.
lw_mm1_0030-bldat = ‘20211008’.
lw_mm1_0030-budat = ‘20211008’.
lw_mm1_0030-bukrs = '5200'.
lw_mm1_0030-rmwwr = '201880.00'. "总金额
lw_mm1_0030-wmwst1 = '22809.66'. "税额
lw_mm1_0030-zuonr = '52002021090115'. "合同号
lw_mm1_0030-xblnr = '666666'. "发票号.
ENDIF.
-
BAPI赋值
ls_headerdata-invoice_ind = ‘X’. "sp_head-xrech. "发票标志
ls_headerdata-doc_type = ‘RE’. "sp_head-blart.
ls_headerdata-pymt_meth = ‘U’. "sp_head-blart.
ls_headerdata-bus_area = ‘1000’. "sp_head-GSBER. "业务范围
ls_headerdata-doc_date = lw_mm1_0030-bldat. "sp_head-bldat.
ls_headerdata-pstng_date = lw_mm1_0030-budat. "sp_head-budat.
ls_headerdata-bline_date = lw_mm1_0030-zfbdt. "sp_head-zfbdt.
ls_headerdata-dsct_days1 = lw_mm1_0030-netdt - lw_mm1_0030-zfbdt.ls_headerdata-comp_code = lw_mm1_0030-bukrs.
ls_headerdata-del_costs_taxc = lw_mm1_0030-mwskz1. "‘J2’.ls_headerdata-header_txt = lw_mm1_0030-sgtxt. "文本
ls_headerdata-item_text = lw_mm1_0030-sgtxt. "文本"基线日期/付款计算的起始日期 发票抬头数据:RBKP_ZFBDT付款基准日期=RBKP_BUDAT过账日期
ls_headerdata-currency = lw_mm1_0030-waers. "货币
ls_headerdata-gross_amount = lw_mm1_0030-rmwwr. "‘24’."sp_head-rmwwr. "总金额ls_headerdata-alloc_nmbr = lw_mm1_0030-zuonr. "合同号
-
ls_headerdata-diff_inv = sp_head-lifnr. "出票方/供应商
ls_headerdata-ref_doc_no = lw_mm1_0030-xblnr. "发票号
"填弃税表值 lt_taxdata
FREE: lt_taxdata.
CLEAR: ls_taxdata.
ls_taxdata-tax_code = lw_mm1_0030-mwskz1. "‘J2’. "lw_mm1_0030i-mwskz. "税码
IF i_fix = ‘X’.
ls_taxdata-tax_amount = ‘11809.29’. "税额
ELSE.
ls_taxdata-tax_amount = lw_mm1_0030-wmwst1. "‘11809.29’. "税额
ENDIF.
ls_taxdata-itemno_tax = ‘000001’.
APPEND ls_taxdata TO lt_taxdata.
IF i_fix = ‘X’.
lw_mm1_0030i-buzei = ‘000001’.
lw_mm1_0030i-ebeln = ‘4500022557’.
lw_mm1_0030i-ebelp = ‘10’.
lw_mm1_0030i-wrbtr = '90840.71'.
lw_mm1_0030i-menge = '41.060'.
lw_mm1_0030i-bstme = 'TO'.
lw_mm1_0030i-mwskz = 'J2'.
ELSE.
CLEAR lv_ebeln.
CLEAR ls_essr.
CLEAR lt_essr.
LOOP AT lt_mm1_0030i INTO lw_mm1_0030i.
lv_ebeln = lw_mm1_0030i-ebeln.
SELECT * INTO TABLE lt_essr
FROM essr
WHERE ebeln = lv_ebeln.
EXIT.
ENDLOOP.
CLEAR: ls_itemdata.
LOOP AT lt_mm1_0030i INTO lw_mm1_0030i.
CLEAR: ls_itemdata.
ls_itemdata-invoice_doc_item = lw_mm1_0030i-buzei. "发票行项目号
ls_itemdata-po_number = lw_mm1_0030i-ebeln. "PO号码
ls_itemdata-po_item = lw_mm1_0030i-ebelp. "PO行项目号
CLEAR ls_essr.
READ TABLE lt_essr INTO ls_essr WITH KEY ebeln = lw_mm1_0030i-ebeln
ebelp = lw_mm1_0030i-ebelp
loekz = ''.
IF sy-subrc EQ 0.
ls_itemdata-sheet_no = ls_essr-lblni.
ls_itemdata-GRIR_CLEAR_SRV = 'X'. "服务:采购订单行项目已清算
ELSE.
ls_itemdata-quantity = lw_mm1_0030i-menge. "发票数量
ls_itemdata-po_unit = lw_mm1_0030i-bstme. "单位
DATA: lv_po_pr_uom LIKE ekpo-bprme.
SELECT SINGLE bprme INTO lv_po_pr_uom
FROM ekpo WHERE ebeln = lw_mm1_0030i-ebeln
AND ebelp = lw_mm1_0030i-ebelp.
ls_itemdata-po_pr_uom = lv_po_pr_uom. "'TO'. "lw_mm1_0030i-bstme.
ENDIF.
ls_itemdata-item_amount = lw_mm1_0030i-wrbtr. "不含税金额
ls_itemdata-tax_code = lw_mm1_0030i-mwskz. "税码 mwskz = 'J1'.
IF lw_mm1_0030i-lfbnr IS NOT INITIAL.
ls_itemdata-ref_doc = lw_mm1_0030i-lfbnr.
ls_itemdata-ref_doc_year = lw_mm1_0030i-lfgja.
ls_itemdata-ref_doc_it = lw_mm1_0030i-lfpos.
ENDIF.
APPEND ls_itemdata TO lt_itemdata.
ENDLOOP.
ENDIF.
-
CLEAR: ls_taxdata.
-
ENDLOOP.
-
ENDLOOP.
CALL FUNCTION ‘BAPI_INCOMINGINVOICE_CREATE’
EXPORTING
headerdata = ls_headerdata
-
ADDRESSDATA =
IMPORTING
invoicedocnumber = lv_invoicedocnumber
fiscalyear = lv_fiscalyear
TABLES
itemdata = lt_itemdata -
ACCOUNTINGDATA =
-
GLACCOUNTDATA =
-
materialdata = lt_materialdata taxdata = lt_taxdata
-
WITHTAXDATA =
-
VENDORITEMSPLITDATA = return = lt_return.
IF lv_invoicedocnumber IS INITIAL OR lv_fiscalyear IS INITIAL.
vp_eind = ‘X’.
ENDIF.IF vp_eind = ‘X’.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.LOOP AT lt_return WHERE type = ‘E’ OR type = ‘A’.
CONCATENATE output lt_return-message ';'INTO output.
ENDLOOP.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.e_belnr = lv_invoicedocnumber.
e_gjahr = lv_fiscalyear.CONCATENATE ‘发票校验成功!:’ lv_invoicedocnumber ‘发票年度:’ lv_fiscalyear INTO output.
ENDIF.
ENDFUNCTION.