BAPI_ACC_DOCUMENT_POST
该过账 BAPI 需要和模拟过账的 BAPI BAPI_ACC_DOCUMENT_CHECK 搭配使用,这样先执行模拟过账,成功了再执行真正的过账,这样就不会因为执行失败产生废弃的凭证,还要再进行冲销,造成底表数据冗余无用。
模拟过账:BAPI_ACC_DOCUMENT_CHECK
DATA:
LS_DOCUMENTHEADER LIKE BAPIACHE09,
LS_ACCOUNTGL LIKE BAPIACGL09,
LS_ACCOUNTRECEIVABLE LIKE BAPIACAR09,
LS_ZFIS002 TYPE ZFIS0002,
LS_CURRENCYAMOUNT TYPE BAPIACCR09,
LS_EXTENSION1 TYPE BAPIACEXTC,
LS_EXTENSION2 TYPE BAPIPAREX,
LS_RETURN TYPE BAPIRET2,
LT_ACCOUNTGL TYPE TABLE OF BAPIACGL09 WITH HEADER LINE,
LT_ACCOUNTRECEIVABLE LIKE TABLE OF BAPIACAR09 WITH HEADER LINE,
LT_CURRENCYAMOUNT LIKE TABLE OF BAPIACCR09 WITH HEADER LINE,
LT_RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE,
LT_PAYABLE LIKE TABLE OF BAPIACAP09 WITH HEADER LINE,
LT_EXTENSION1 LIKE TABLE OF BAPIACEXTC WITH HEADER LINE,
LT_EXTENSION2 LIKE TABLE OF BAPIPAREX WITH HEADER LINE.
DATA: LV_TYPE LIKE LS_DOCUMENTHEADER-OBJ_TYPE,
LV_KEY LIKE LS_DOCUMENTHEADER-OBJ_KEY,
LV_SYS LIKE LS_DOCUMENTHEADER-OBJ_SYS.
DATA: G_SIMU_ERROR TYPE FLAG,
G_POST_ERROR TYPE FLAG.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
exporting
documentheader = LS_DOCUMENTHEADER
tables
accountgl = LT_ACCOUNTGL
accountreceivable = LT_ACCOUNTRECEIVABLE
accountpayable = LT_PAYABLE
currencyamount = LT_CURRENCYAMOUNT
extension1 = LT_EXTENSION1
extension2 = LT_EXTENSION2
return = LT_RETURN.
LOOP AT it_return.
IF it_return-type eq 'E'.
g_simu_error = 'X'.
ENDIF.
ENDLOOP.
IF g_simu_error eq 'X'.
WRITE: / 'I 凭证生成错误,实际未生成任何会计凭证'.
ELSE.
* 当模拟过账成功,就可以执行真正的BAPI过账:BAPI_ACC_DOCUMENT_POST
ENDIF.
执行过账:BAPI_ACC_DOCUMENT_POST
call function 'BAPI_ACC_DOCUMENT_POST'
exporting
documentheader = LS_DOCUMENTHEADER
* CUSTOMERCPD =
* CONTRACTHEADER =
importing
obj_type = LV_TYPE
obj_key = LV_KEY
obj_sys = LV_SYS
tables
accountgl = LT_ACCOUNTGL
accountreceivable = LT_ACCOUNTRECEIVABLE
accountpayable = LT_PAYABLE
currencyamount = LT_CURRENCYAMOUNT
extension1 = LT_EXTENSION1
extension2 = LT_EXTENSION2
return = LT_RETURN.
loop at lt_return.
if lt_return-type = 'E'.
g_post_error = 'X'.
endif.
endloop.
if g_post_error eq 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
else.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
endif.
if lv_key is not initial.
if p_flag eq 'X'.
clear: p_zsfkdh-d_gjahr, p_zsfkdh-d_belnr.
move f_obj_key(10) to p_zsfkdh-d_belnr.
move f_obj_key+14(4) to p_zsfkdh-d_gjahr.
else.
clear: p_zsfkdh-d_gjahr, p_zsfkdh-zkf_belnr.
move f_obj_key(10) to p_zsfkdh-zkf_belnr.
move f_obj_key+14(4) to p_zsfkdh-d_gjahr.
endif.
endif.