创建预制发票
BAPI:BAPI_INCOMINGINVOICE_PARK
以下代码供参考:
"bapi's stru
DATA: LS_HEADERDATA TYPE BAPI_INCINV_CREATE_HEADER.
DATA: LV_INVOICEDOCNUMBER LIKE BAPI_INCINV_FLD-INV_DOC_NO.
DATA: LV_FISCALYEAR LIKE BAPI_INCINV_FLD-FISC_YEAR.
DATA: LT_ITEMDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_ITEM,
LS_ITEMDATA TYPE BAPI_INCINV_CREATE_ITEM.
DATA: LT_TAXDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_TAX,
LS_TAXDATA TYPE BAPI_INCINV_CREATE_TAX.
DATA: LT_GLACCOUNTDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_GL_ACCOUNT,
LS_GLACCOUNTDATA TYPE BAPI_INCINV_CREATE_GL_ACCOUNT.
DATA: LT_EXTENSIONIN TYPE TABLE OF BAPIPAREX,
LS_EXTENSIONIN TYPE BAPIPAREX.
DATA: LT_RETURN TYPE STANDARD TABLE OF BAPIRET2.
DATA: LS_RETURN TYPE BAPIRET2.
DATA: LV_ITEM TYPE BAPI_INCINV_CREATE_ITEM-INVOICE_DOC_ITEM.
DATA: LT_BAPI TYPE TABLE OF TY_OUTPUT.
DATA: LS_BAPI TYPE TY_OUTPUT.
SORT GT_OUTPUT BY XBLNR RETPO.
LT_BAPI[] = GT_OUTPUT[].
DELETE LT_BAPI WHERE SLBOX EQ ''.
DELETE LT_BAPI WHERE LIGHT EQ GC_LIGHT_R.
LOOP AT LT_BAPI ASSIGNING FIELD-SYMBOL(<LS_BAPI>).
AT NEW RETPO.
IF <LS_BAPI>-RETPO IS INITIAL.
LS_HEADERDATA-INVOICE_IND = 'X'. "发票
LS_HEADERDATA-DELIV_POSTING = 'S'. "
LS_HEADERDATA-RETURN_POSTING = 'H'. "
LS_HEADERDATA-GROSS_AMOUNT = <LS_BAPI>-ZWRBTRZ1. "抬头金额
LS_TAXDATA-TAX_AMOUNT = <LS_BAPI>-ZWRBTRZ_ALL. "税额
"总账科目的科目金额
* CLEAR LV_ITEM.
* IF <LS_BAPI>-ZWRBTR2_ALL IS NOT INITIAL .
* LV_ITEM = LV_ITEM + 1.
* LS_GLACCOUNTDATA-INVOICE_DOC_ITEM = LV_ITEM.
* LS_GLACCOUNTDATA-GL_ACCOUNT = '1404060000'.
* LS_GLACCOUNTDATA-ITEM_AMOUNT = <LS_BAPI>-ZWRBTR2_SUM.
* LS_GLACCOUNTDATA-DB_CR_IND = 'S'.
* LS_GLACCOUNTDATA-TAX_CODE = <LS_BAPI>-MWSKZ.
* LS_GLACCOUNTDATA-COMP_CODE = <LS_BAPI>-BUKRS.
* APPEND LS_GLACCOUNTDATA TO LT_GLACCOUNTDATA.
* CLEAR LS_GLACCOUNTDATA.
* ENDIF.
ELSE.
LS_HEADERDATA-INVOICE_IND = ''. "贷方凭证
LS_HEADERDATA-DELIV_POSTING = 'H'. "
LS_HEADERDATA-RETURN_POSTING = 'H'. "
LS_HEADERDATA-GROSS_AMOUNT = <LS_BAPI>-ZWRBTRZ1. "抬头金额
LS_TAXDATA-TAX_AMOUNT = <LS_BAPI>-ZWRBTRZ_ALL. "税额
ENDIF.
LS_HEADERDATA-DOC_DATE = <LS_BAPI>-BUDAT. "发票日期
LS_HEADERDATA-PSTNG_DATE = <LS_BAPI>-BUDAT. "过账日期
LS_HEADERDATA-COMP_CODE = <LS_BAPI>-BUKRS. "公司
LS_HEADERDATA-ITEM_TEXT = <LS_BAPI>-XBLNR. "项目文本
"货币
SELECT SINGLE
WAERS
INTO LS_HEADERDATA-CURRENCY
FROM EKKO
WHERE EBELN EQ <LS_BAPI>-EBELN.
"税码
LS_TAXDATA-TAX_CODE = <LS_BAPI>-MWSKZ.
APPEND LS_TAXDATA TO LT_TAXDATA.
CLEAR LS_TAXDATA.
CLEAR LV_ITEM.
ENDAT.
LV_ITEM = LV_ITEM + 1.
LS_ITEMDATA-INVOICE_DOC_ITEM = LV_ITEM. "
LS_ITEMDATA-PO_NUMBER = <LS_BAPI>-EBELN. "采购订单
LS_ITEMDATA-PO_ITEM = <LS_BAPI>-EBELP. "采购订单行项目
LS_ITEMDATA-REF_DOC = <LS_BAPI>-BELNR. "参考凭证号
LS_ITEMDATA-REF_DOC_YEAR = <LS_BAPI>-MJAHR. "参考凭证号年度
LS_ITEMDATA-REF_DOC_IT = <LS_BAPI>-BUZEI. "参考凭证号行项目
LS_ITEMDATA-QUANTITY = <LS_BAPI>-MENGE. "数量
LS_ITEMDATA-PO_UNIT = <LS_BAPI>-MEINS. "单位
LS_ITEMDATA-TAX_CODE = <LS_BAPI>-MWSKZ. "税码
LS_ITEMDATA-ITEM_AMOUNT = <LS_BAPI>-ZWRBTR3. "不含税金额
LS_ITEMDATA-ITEM_TEXT = <LS_BAPI>-XBLNR. "开票通知单号
APPEND LS_ITEMDATA TO LT_ITEMDATA.
CLEAR LS_ITEMDATA.
AT END OF RETPO.
CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
EXPORTING
HEADERDATA = LS_HEADERDATA
* ADDRESSDATA = ADDRESSDATA
IMPORTING
INVOICEDOCNUMBER = LV_INVOICEDOCNUMBER
FISCALYEAR = LV_FISCALYEAR
TABLES
ITEMDATA = LT_ITEMDATA
* ACCOUNTINGDATA = ACCOUNTINGDATA
GLACCOUNTDATA = LT_GLACCOUNTDATA
* MATERIALDATA = MATERIALDATA
TAXDATA = LT_TAXDATA
* WITHTAXDATA = WITHTAXDATA
* VENDORITEMSPLITDATA = VENDORITEMSPLITDATA
RETURN = LT_RETURN
* EXTENSIONIN = LT_EXTENSIONIN
* TM_ITEMDATA = TM_ITEMDATA
* NFMETALLITMS = NFMETALLITMS
* ASSETDATA = ASSETDATA
.
READ TABLE LT_RETURN TRANSPORTING NO FIELDS WITH KEY TYPE = 'E'.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE EQ 'E'.
<LS_BAPI>-LIGHT = GC_LIGHT_R.
<LS_BAPI>-MESSAGE = <LS_BAPI>-MESSAGE && LS_RETURN-MESSAGE.
ENDLOOP.
MODIFY GT_OUTPUT FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE
WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.
MODIFY LT_BAPI FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE
WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
<LS_BAPI>-LIGHT = GC_LIGHT_G.
<LS_BAPI>-MESSAGE = '发票预制成功'.
<LS_BAPI>-BELNR_FP = LV_INVOICEDOCNUMBER.
"回写消息状态和生成的发票号到ALV
MODIFY GT_OUTPUT FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE BELNR_FP
WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.
MODIFY LT_BAPI FROM <LS_BAPI> TRANSPORTING LIGHT MESSAGE BELNR_FP
WHERE XBLNR = <LS_BAPI>-XBLNR AND RETPO = <LS_BAPI>-RETPO.
ENDIF.
CLEAR: LS_HEADERDATA,
LS_TAXDATA,LT_TAXDATA,
LS_GLACCOUNTDATA,LT_GLACCOUNTDATA,
LS_ITEMDATA,LT_ITEMDATA,
LS_RETURN,LT_RETURN,
LV_INVOICEDOCNUMBER,LV_FISCALYEAR.
ENDAT.
ENDLOOP.
代码中以同一单号正向的做正向发票,采购退的做贷方凭证,具体可看代码中的传值。
OVER…