DATA: ls_headerdata LIKE bapi_incinv_create_header,
lt_itemdata LIKE TABLE OF bapi_incinv_create_item,
ls_itemdata LIKE bapi_incinv_create_item,
lt_return LIKE TABLE OF bapiret2,
ls_return LIKE bapiret2,
lv_invoicedocnumber LIKE bapi_incinv_fld-inv_doc_no.
DATA: lv_gross TYPE bapi_rmwwr.
TYPES: BEGIN OF ty_ekpo,
ebeln TYPE ekko-ebeln,
bukrs TYPE ekko-bukrs,
waers TYPE ekko-waers,
ebelp TYPE ekpo-ebelp,
netpr TYPE ekpo-netpr,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
mblnr TYPE mseg-mblnr,
zeile TYPE mseg-zeile,
mjahr TYPE mseg-mjahr,
bwart TYPE mseg-bwart,
belnr TYPE re_belnr,
msg TYPE string, "销售发票
status TYPE c LENGTH 4,
END OF ty_ekpo.
DATA: lt_ekpo TYPE TABLE OF ty_ekpo,
ls_ekpo TYPE ty_ekpo,
ls_ekpotmp TYPE ty_ekpo.
DATA:lt_vbeln TYPE TABLE OF ty_out WITH HEADER LINE.
DATA: lv_index TYPE i,
lv_mseg TYPE string.
lt_vbeln[] = lt_out[] .
DELETE lt_vbeln WHERE check <> ‘X’.
SORT lt_vbeln BY ebeln.
DELETE ADJACENT DUPLICATES FROM lt_vbeln COMPARING ebeln.
IF lt_vbeln[] IS NOT INITIAL.
SELECT
a~ebeln
a~bukrs
a~waers
b~ebelp
b~netpr
c~menge
b~meins
c~mblnr
c~zeile
c~mjahr
c~bwart
INTO CORRESPONDING FIELDS OF TABLE lt_ekpo
FROM ekko AS a
INNER JOIN ekpo AS b ON a~ebeln = b~ebeln
INNER JOIN mseg AS c ON c~ebeln = b~ebeln AND c~ebelp = b~ebelp AND bwart = ‘101’
FOR ALL ENTRIES IN lt_vbeln
WHERE a~ebeln = lt_vbeln-ebeln .
ENDIF.
SORT lt_ekpo BY ebeln mblnr.
LOOP AT lt_ekpo ASSIGNING FIELD-SYMBOL() .
lv_index = lv_index + 1.
ls_itemdata-invoice_doc_item = lv_index.
ls_itemdata-po_number = -ebeln.
ls_itemdata-po_item = -ebelp.
ls_itemdata-item_amount = -menge * -netpr.
ls_itemdata-quantity = -menge.
ls_itemdata-po_unit = -meins…
ls_itemdata-tax_code = ‘J2’.
ls_itemdata-ref_doc = -mblnr.“参考凭证项目
ls_itemdata-ref_doc_year = -mjahr.
ls_itemdata-ref_doc_it = -zeile.” 参考凭证项目
APPEND ls_itemdata TO lt_itemdata.
lv_gross = lv_gross + ls_itemdata-item_amount + ls_itemdata-item_amount * 13 / 100.
-
ls_ekpotmp = .
AT END OF ebeln.
*&header
CLEAR: ls_headerdata.
ls_headerdata-invoice_ind = ‘X’.
ls_headerdata-doc_date = sy-datum.
ls_headerdata-pstng_date = sy-datum.
ls_headerdata-comp_code = -bukrs…
ls_headerdata-currency = -waers.ls_headerdata-bline_date = sy-datum. "基准日期
ls_headerdata-calc_tax_ind = ‘X’.
ls_headerdata-deliv_posting = ‘S’.
ls_headerdata-pmnttrms = ‘0001’.
*ls_headerdata-item_text = ‘text’.
ls_headerdata-gross_amount = lv_gross.
ls_headerdata-ref_doc_no = ‘123’."参考要啥CALL FUNCTION ‘BAPI_INCOMINGINVOICE_CREATE’
EXPORTING
headerdata = ls_headerdata
IMPORTING
invoicedocnumber = lv_invoicedocnumber
TABLES
itemdata = lt_itemdata
return = lt_return.IF lv_invoicedocnumber IS NOT INITIAL .
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.-msg = ‘采购开票完成’.
-status = icon_green_light.
-belnr = lv_invoicedocnumber.
ELSE.CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’
-
IMPORTING
-
RETURN = . <fs>-msg = '采购开票失败'. <fs>-status = icon_red_light. LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A' OR type = 'X'. <fs>-msg = <fs>-msg && ',' && ls_return-message. ENDLOOP. ENDIF. LOOP AT lt_out ASSIGNING FIELD-SYMBOL(<fs_o2>) . READ TABLE lt_ekpo INTO ls_ekpo WITH KEY mblnr = <fs_o2>-mblnr BINARY SEARCH. IF sy-subrc = 0. <fs_o2>-belnr = ls_ekpo-belnr. <fs_o2>-msg2 = ls_ekpo-msg. <fs_o2>-status2 = ls_ekpo-status. "更新sto01 UPDATE ztsto_01 SET belnr = ls_ekpo-belnr WHERE ebeln = ls_ekpo-ebeln AND ebelp = ls_ekpo-ebelp AND vbeln_d = lt_vbeln-vbeln_d AND mblnr = ls_ekpo-mblnr. IF sy-subrc = 0. COMMIT WORK. ENDIF. ENDIF. CLEAR:ls_ekpo. ENDLOOP. CLEAR:lv_gross,lt_itemdata,lv_index.
ENDAT.
CLEAR:ls_ekpo,ls_itemdata,ls_ekpotmp.
ENDLOOP.