**********************************************************************
DATA ls_hdr TYPE bapiache09.
DATA lt_acc TYPE TABLE OF bapiacgl09.
DATA ls_acc TYPE bapiacgl09.
DATA lt_amt TYPE TABLE OF bapiaccr09.
DATA ls_amt TYPE bapiaccr09.
DATA lt_ext TYPE TABLE OF bapiparex.
DATA ls_ext TYPE bapiparex.
DATA lt_ret TYPE TABLE OF bapiret2.
DATA lt_ret_all TYPE TABLE OF bapiret2.
DATA lv_obj_type TYPE bapiache09-obj_type.
DATA lv_obj_key TYPE bapiache09-obj_key.
DATA lv_test TYPE xfeld.
DATA lv_error TYPE xfeld.
DO 2 TIMES. " Проверим создание
кредиторского и дебиторского документа
IF sy-index EQ 1.
lv_test = 'X'.
ELSE.
CHECK lv_error IS INITIAL AND i_test IS
INITIAL.
CLEAR lt_ret_all[].
lv_test = ''.
ENDIF.
LOOP AT g_tab ASSIGNING .
* Создание корректирующей проводки – Проводка кредиторской
задолженности
CLEAR ls_hdr.
CLEAR lt_acc[].
CLEAR lt_amt[].
CLEAR lt_ret[].
CLEAR lt_ext[].
ls_hdr-username = sy-uname.
ls_hdr-comp_code = -bukrs.
ls_hdr-doc_date = date_doc.
ls_hdr-pstng_date = date_post.
ls_hdr-doc_type = blart.
CLEAR ls_acc.
ls_acc-itemno_acc = 1.
ls_acc-acct_type = 'S'.
ls_acc-gl_account = -saknr1.
INSERT ls_acc INTO TABLE lt_acc.
CLEAR ls_amt.
ls_amt-itemno_acc = ls_acc-itemno_acc.
ls_amt-currency = 'RUB'.
ls_amt-amt_doccur = - -saldo.
INSERT ls_amt INTO TABLE lt_amt.
ADD 1 TO ls_acc-itemno_acc.
ls_acc-gl_account = -saknr2.
INSERT ls_acc INTO TABLE lt_acc.
ls_amt-itemno_acc = ls_acc-itemno_acc.
ls_amt-amt_doccur = - ls_amt-amt_doccur.
INSERT ls_amt INTO TABLE lt_amt.
*
IF lv_test IS NOT INITIAL.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
documentheader = ls_hdr
TABLES
accountgl = lt_acc
currencyamount = lt_amt
extension2 = lt_ext
return = lt_ret.
ELSE.
CLEAR lv_obj_key.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_hdr
IMPORTING
obj_type =
lv_obj_type
obj_key = lv_obj_key
TABLES
accountgl = lt_acc
currencyamount = lt_amt
extension2 = lt_ext
return = lt_ret.
ENDIF.
INSERT LINES OF lt_ret INTO TABLE
lt_ret_all.
LOOP AT lt_ret TRANSPORTING NO FIELDS
WHERE type EQ 'E' OR type EQ 'A'.
lv_error = 'X'.
EXIT.
ENDLOOP.
IF lv_error IS INITIAL AND lv_test IS
INITIAL.
ls_alv = .
ls_alv-belnr = lv_obj_key+0(10).
ls_alv-gjahr = lv_obj_key+14(4).
INSERT ls_alv INTO TABLE lt_alv.
ENDIF.
ENDLOOP.
ENDDO.
*
IF i_test IS INITIAL.
IF lv_error IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDIF.
* Покажем лог, если были ошибки
IF lv_error IS NOT INITIAL.
CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
EXPORTING
it_message = lt_ret_all.
ELSEIF i_test IS NOT INITIAL.
MESSAGE 'Моделирование прошло без
ошибок' TYPE 'I'.
ENDIF.
**********************************************************************
Комментариев нет:
Отправить комментарий