1.定义
DATA: wa_headerdata TYPE bapi_incinv_create_header,
wa_invoicedocnumber TYPE bapi_incinv_fld-inv_doc_no,
wa_fiscalyear TYPE bapi_incinv_fld-fisc_year,
it_itemdata TYPE TABLE OF bapi_incinv_create_item,
is_itemdata TYPE bapi_incinv_create_item,
lt_glaccount TYPE TABLE OF bapi_incinv_create_gl_account,
ls_glaccount TYPE bapi_incinv_create_gl_account,
lt_taxdata TYPE TABLE OF bapi_incinv_create_tax,
ls_taxdata TYPE bapi_incinv_create_tax,
it_return TYPE TABLE OF bapiret2,
is_return TYPE bapiret2.
2.抬头
wa_headerdata-doc_date = input-mt_erp_mm062-bldat. "发票日期
wa_headerdata-pstng_date = input-mt_erp_mm062-budat. "过账日期
wa_headerdata-currency = input-mt_erp_mm062-waers. "币种
wa_headerdata-ref_doc_no = ' '. "参照
wa_headerdata-header_txt = input-mt_erp_mm062-sgtxt. "抬头文本
wa_headerdata-comp_code = input-mt_erp_mm062-bukrs. "公司代码
wa_headerdata-invoice_ind = 'X'.
* wa_headerdata-deliv_posting = 'S'.
* wa_headerdata-return_posting = 'H'.
* wa_headerdata-calc_tax_ind = 'X'.
wa_headerdata-gross_amount = input-mt_erp_mm062-wrbtr. "含税金额
3.行项目
is_itemdata-invoice_doc_item = lv_itemnum. "行项目号
is_itemdata-po_number = ls_item-ebeln. "采购订单号
is_itemdata-po_item = ls_item-ebelp. "采购订单行号
SEARCH ls_item-wrbtrs FOR '-'.
IF sy-subrc = 0.
is_itemdata-item_amount = ls_item-wrbtrs * ( -1 ). "金额,需传正数
* is_itemdata-de_cre_ind = 'H'.
ELSE.
is_itemdata-item_amount = ls_item-wrbtrs. "金额,需传正数
* is_itemdata-de_cre_ind = 'S'.
ENDIF.
is_itemdata-quantity = ls_item-menge. "数量
is_itemdata-po_unit = ls_item-meins. "单位
is_itemdata-ref_doc = ls_item-mblnr. "物料凭证
is_itemdata-ref_doc_year = lv_mjahr. "物料凭证年度
is_itemdata-ref_doc_it = ls_item-zeile. "物料凭证行项目
APPEND is_itemdata TO it_itemdata.
4.税额
ls_taxdata-tax_amount = input-mt_erp_mm062-wmwst. "抬头税额
APPEND ls_taxdata TO lt_taxdata.
5.扣款行
ls_glaccount-invoice_doc_item = lv_itemnum. "行项目
ls_glaccount-gl_account = ls_itemh-hkont. "总账科目
SEARCH ls_itemh-wrbtr FOR '-'.
IF sy-subrc = 0.
ls_glaccount-item_amount = ls_itemh-wrbtr * ( -1 ). "凭证货币金额
ls_glaccount-db_cr_ind = 'S'. "借方/贷方标识
ELSE.
ls_glaccount-item_amount = ls_itemh-wrbtr. "凭证货币金额
ls_glaccount-db_cr_ind = 'H'. "借方/贷方标识
ENDIF.
ls_itemh-shkzg = ls_glaccount-db_cr_ind.
ls_glaccount-comp_code = input-mt_erp_mm062-bukrs. "公司代码
ls_glaccount-tax_code = ls_itemh-mwskz. "销售/购买税代码
APPEND ls_glaccount TO lt_glaccount.
6.调用BAPI
CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
EXPORTING
headerdata = wa_headerdata
* ADDRESSDATA =
IMPORTING
invoicedocnumber = wa_invoicedocnumber
fiscalyear = wa_fiscalyear
TABLES
itemdata = it_itemdata
* ACCOUNTINGDATA =
glaccountdata = lt_glaccount
* MATERIALDATA =
taxdata = lt_taxdata
* WITHTAXDATA =
* VENDORITEMSPLITDATA =
return = it_return
* EXTENSIONIN =
* TM_ITEMDATA =
.
IF wa_invoicedocnumber IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
output-mt_erp_mm062_b-statu = 'S'.
output-mt_erp_mm062_b-belnr = wa_invoicedocnumber.
output-mt_erp_mm062_b-message = '发票创建成功!'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
READ TABLE it_return INTO is_return INDEX 1.
IF sy-subrc = 0.
output-mt_erp_mm062_b-statu = 'E'.
output-mt_erp_mm062_b-belnr = ''.
output-mt_erp_mm062_b-message = is_return-message.
ENDIF.
ENDIF.