下例演示了如何通过BAPI创建FI 凭证
TYPE-POOLS: slis.
DATA ls_header TYPE bapiache08.
DATA lt_accountgl TYPE STANDARD TABLE OF bapiacgl08 WITH HEADER LINE.
DATA lt_currencyamount TYPE STANDARD TABLE OF bapiaccr08 WITH HEADER LINE.
DATA lt_extension1 TYPE STANDARD TABLE OF bapiextc WITH HEADER LINE.
DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
DATA lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: BEGIN OF lt_msg_txt OCCURS 1,
msg_tp TYPE bapiret2-type,
doc_no TYPE bapiret2-message_v2,
msg_txt TYPE bapiret2-message,
END OF lt_msg_txt.
START-OF-SELECTION.
ls_header-username = sy-uname.
ls_header-comp_code = '1000'.
ls_header-fisc_year = sy-datum+0(4).
ls_header-doc_date = sy-datum.
ls_header-pstng_date = sy-datum.
ls_header-fis_period = sy-datum+4(2).
ls_header-doc_type = 'SA'.
lt_accountgl-itemno_acc = '1'.
lt_accountgl-gl_account = '0000060220' .
lt_accountgl-comp_code = '1000'.
lt_accountgl-pstng_date = sy-datum.
lt_accountgl-doc_type = 'SA'.
lt_accountgl-fisc_year = sy-datum+0(4).
lt_accountgl-fis_period = sy-datum+4(2).
APPEND lt_accountgl.
CLEAR lt_accountgl.
lt_accountgl-itemno_acc = '2'.
lt_accountgl-gl_account = '0000045010' .
lt_accountgl-comp_code = '1000'.
lt_accountgl-pstng_date = sy-datum.
lt_accountgl-doc_type = 'SA'.
lt_accountgl-fisc_year = sy-datum+0(4).
lt_accountgl-fis_period = sy-datum+4(2).
* lt_accountgl-costcenter = '13100'.
APPEND lt_accountgl.
CLEAR lt_accountgl.
lt_currencyamount-itemno_acc = '1'.
lt_currencyamount-currency = 'USD'.
lt_currencyamount-amt_doccur = 100. "( For Debit / 'S')
APPEND lt_currencyamount.
CLEAR lt_currencyamount.
lt_currencyamount-itemno_acc = '2'.
lt_currencyamount-currency = 'USD'.
lt_currencyamount-amt_doccur = -100. "( For credit /'H')
APPEND lt_currencyamount.
CLEAR lt_currencyamount.
lt_extension1-field1 = 'BAPI-PARK'.
lt_extension1-field2 = '1'.
APPEND lt_extension1.
lt_fieldcat-fieldname = 'MSG_TP'.
lt_fieldcat-seltext_m = 'message type'.
TRANSLATE lt_fieldcat-seltext_m+0(1) to UPPER CASE.
APPEND lt_fieldcat.
lt_fieldcat-fieldname = 'DOC_NO'.
lt_fieldcat-seltext_m = 'document number'.
TRANSLATE lt_fieldcat-seltext_m+0(1) to UPPER CASE.
APPEND lt_fieldcat.
lt_fieldcat-fieldname = 'MSG_TXT'.
lt_fieldcat-seltext_m = 'message text'.
TRANSLATE lt_fieldcat-seltext_m+0(1) to UPPER CASE.
APPEND lt_fieldcat.
CALL FUNCTION 'BAPI_ACC_GL_POSTING_POST'
EXPORTING
documentheader = ls_header
* IMPORTING
* obj_key = obj_key
TABLES
accountgl = lt_accountgl[]
currencyamount = lt_currencyamount[]
return = lt_return[].
* extension1 = lt_extension1[].
DELETE lt_return[] WHERE type = 'S'.
IF lt_return[] is INITIAL.
refresh lt_return.
CALL FUNCTION 'BAPI_ACC_GL_POSTING_POST'
EXPORTING
documentheader = ls_header
* IMPORTING
* obj_key = obj_key
TABLES
accountgl = lt_accountgl[]
currencyamount = lt_currencyamount[]
return = lt_return[].
* extension1 = lt_extension1[].
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
LOOP AT lt_return.
IF lt_return-type = 'S'.
lt_msg_txt-msg_tp = 'S'.
lt_msg_txt-doc_no = lt_return-message_v2+0(10).
lt_msg_txt-msg_txt = 'success'.
ELSE.
IF sy-tabix = 1.
lt_msg_txt-msg_tp = 'E'.
lt_msg_txt-doc_no = ''.
lt_msg_txt-msg_txt = 'errors in document:'.
ELSE.
lt_msg_txt-msg_tp = 'E'.
lt_msg_txt-doc_no = ''.
lt_msg_txt-msg_txt = lt_return-message.
ENDIF.
ENDIF.
APPEND lt_msg_txt.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = lt_fieldcat[]
TABLES
t_outtab = lt_msg_txt[].
DATA ls_header TYPE bapiache08.
DATA lt_accountgl TYPE STANDARD TABLE OF bapiacgl08 WITH HEADER LINE.
DATA lt_currencyamount TYPE STANDARD TABLE OF bapiaccr08 WITH HEADER LINE.
DATA lt_extension1 TYPE STANDARD TABLE OF bapiextc WITH HEADER LINE.
DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
DATA lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: BEGIN OF lt_msg_txt OCCURS 1,
msg_tp TYPE bapiret2-type,
doc_no TYPE bapiret2-message_v2,
msg_txt TYPE bapiret2-message,
END OF lt_msg_txt.
START-OF-SELECTION.
ls_header-username = sy-uname.
ls_header-comp_code = '1000'.
ls_header-fisc_year = sy-datum+0(4).
ls_header-doc_date = sy-datum.
ls_header-pstng_date = sy-datum.
ls_header-fis_period = sy-datum+4(2).
ls_header-doc_type = 'SA'.
lt_accountgl-itemno_acc = '1'.
lt_accountgl-gl_account = '0000060220' .
lt_accountgl-comp_code = '1000'.
lt_accountgl-pstng_date = sy-datum.
lt_accountgl-doc_type = 'SA'.
lt_accountgl-fisc_year = sy-datum+0(4).
lt_accountgl-fis_period = sy-datum+4(2).
APPEND lt_accountgl.
CLEAR lt_accountgl.
lt_accountgl-itemno_acc = '2'.
lt_accountgl-gl_account = '0000045010' .
lt_accountgl-comp_code = '1000'.
lt_accountgl-pstng_date = sy-datum.
lt_accountgl-doc_type = 'SA'.
lt_accountgl-fisc_year = sy-datum+0(4).
lt_accountgl-fis_period = sy-datum+4(2).
* lt_accountgl-costcenter = '13100'.
APPEND lt_accountgl.
CLEAR lt_accountgl.
lt_currencyamount-itemno_acc = '1'.
lt_currencyamount-currency = 'USD'.
lt_currencyamount-amt_doccur = 100. "( For Debit / 'S')
APPEND lt_currencyamount.
CLEAR lt_currencyamount.
lt_currencyamount-itemno_acc = '2'.
lt_currencyamount-currency = 'USD'.
lt_currencyamount-amt_doccur = -100. "( For credit /'H')
APPEND lt_currencyamount.
CLEAR lt_currencyamount.
lt_extension1-field1 = 'BAPI-PARK'.
lt_extension1-field2 = '1'.
APPEND lt_extension1.
lt_fieldcat-fieldname = 'MSG_TP'.
lt_fieldcat-seltext_m = 'message type'.
TRANSLATE lt_fieldcat-seltext_m+0(1) to UPPER CASE.
APPEND lt_fieldcat.
lt_fieldcat-fieldname = 'DOC_NO'.
lt_fieldcat-seltext_m = 'document number'.
TRANSLATE lt_fieldcat-seltext_m+0(1) to UPPER CASE.
APPEND lt_fieldcat.
lt_fieldcat-fieldname = 'MSG_TXT'.
lt_fieldcat-seltext_m = 'message text'.
TRANSLATE lt_fieldcat-seltext_m+0(1) to UPPER CASE.
APPEND lt_fieldcat.
CALL FUNCTION 'BAPI_ACC_GL_POSTING_POST'
EXPORTING
documentheader = ls_header
* IMPORTING
* obj_key = obj_key
TABLES
accountgl = lt_accountgl[]
currencyamount = lt_currencyamount[]
return = lt_return[].
* extension1 = lt_extension1[].
DELETE lt_return[] WHERE type = 'S'.
IF lt_return[] is INITIAL.
refresh lt_return.
CALL FUNCTION 'BAPI_ACC_GL_POSTING_POST'
EXPORTING
documentheader = ls_header
* IMPORTING
* obj_key = obj_key
TABLES
accountgl = lt_accountgl[]
currencyamount = lt_currencyamount[]
return = lt_return[].
* extension1 = lt_extension1[].
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
LOOP AT lt_return.
IF lt_return-type = 'S'.
lt_msg_txt-msg_tp = 'S'.
lt_msg_txt-doc_no = lt_return-message_v2+0(10).
lt_msg_txt-msg_txt = 'success'.
ELSE.
IF sy-tabix = 1.
lt_msg_txt-msg_tp = 'E'.
lt_msg_txt-doc_no = ''.
lt_msg_txt-msg_txt = 'errors in document:'.
ELSE.
lt_msg_txt-msg_tp = 'E'.
lt_msg_txt-doc_no = ''.
lt_msg_txt-msg_txt = lt_return-message.
ENDIF.
ENDIF.
APPEND lt_msg_txt.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = lt_fieldcat[]
TABLES
t_outtab = lt_msg_txt[].