*&---------------------------------------------------------------------*
*& Form FRM_CREATE_INVOICE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_CREATE_INVOICE.
ATA: LS_CREATORDATAIN TYPE BAPICREATORDATA,
LT_BILLING TYPE STANDARD TABLE OF BAPIVBRK,
LT_RETURN1 TYPE STANDARD TABLE OF BAPIRETURN1,
LT_ERRORS TYPE STANDARD TABLE OF BAPIVBRKERRORS,
LT_SUCCESS TYPE STANDARD TABLE OF BAPIVBRKSUCCESS,
LS_BILLING TYPE BAPIVBRK,
LS_RETURN1 TYPE BAPIRETURN1,
LS_ERRORS TYPE BAPIVBRKERRORS,
LS_SUCCESS TYPE BAPIVBRKSUCCESS.
*创建发票
LS_CREATORDATAIN-CREATED_BY = SY-UNAME.
LS_CREATORDATAIN-CREATED_ON = '20190108'.
LS_BILLING-REF_DOC = CS_OUTTAB-VBELN.
LS_BILLING-BILL_DATE = '20190131'.
LS_BILLING-REF_DOC_CA = 'K'. " 'L'.
LS_BILLING-COSTCENTER = P_KOSTL. " 成本中心 K时
APPEND LS_BILLING TO LT_BILLING.
CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'
* exporting
* creatordatain = ls_creatordatain
TABLES
BILLINGDATAIN = LT_BILLING
ERRORS = LT_ERRORS
RETURN = LT_RETURN1
SUCCESS = LT_SUCCESS.
IF LT_SUCCESS[] IS NOT INITIAL.
READ TABLE LT_SUCCESS INTO LS_SUCCESS INDEX 1.
IF SY-SUBRC EQ 0.
CS_OUTTAB-VBELF = LS_SUCCESS-BILL_DOC."发票凭证
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
LOOP AT LT_RETURN1 INTO LS_RETURN1 WHERE TYPE = 'E' .
CS_OUTTAB-MESSAGE = LS_RETURN1-MESSAGE.
EXIT.
ENDLOOP.
ENDIF.
ELSE.
CLEAR CS_OUTTAB-MESSAGE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT LT_ERRORS INTO LS_ERRORS WHERE TYPE = 'E' OR TYPE = 'A'.
CONCATENATE CS_OUTTAB-MESSAGE LS_ERRORS-MESSAGE INTO CS_OUTTAB-MESSAGE.
CLEAR LS_ERRORS.
ENDLOOP.
ENDIF.
ENDFORM. "FRM_CREATE_INVOICE