TYPE TABLE OF accchg WITH HEADER LINE.
DATA:lv_buzei TYPE bseg-buzei.
DATA myref TYPE REF TO cx_sy_arithmetic_error.
DATA err_text TYPE string.
LOOP AT gt_data INTO gs_data WHERE checkbox = 'X'.
CLEAR:gt_accchg[],lv_buzei,gs_data-message_txt.
IF gs_data-docln IS NOT INITIAL.
gt_accchg-fdname = 'SGTXT'. "更改字段
gt_accchg-newval = gs_data-sgtxt. "新的值
APPEND gt_accchg .
lv_buzei = gs_data-docln+3(3).
ELSE.
gt_accchg-fdname = 'BKTXT'. "更改字段
gt_accchg-newval = gs_data-sgtxt. "新的值
APPEND gt_accchg .
ENDIF.
TRY .
CALL FUNCTION 'FI_DOCUMENT_CHANGE'
EXPORTING
i_bukrs = gs_data-rbukrs
i_belnr = gs_data-belnr
i_gjahr = gs_data-gjahr
i_buzei = lv_buzei
x_lock = 'X'
i_upd_fqm = 'X'
TABLES
t_accchg = gt_accchg[]
EXCEPTIONS
no_reference = 1
no_document = 2
many_documents = 3
wrong_input = 4
overwrite_creditcard = 5
error_message = 6
OTHERS = 7.
ENDTRY.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO gs_data-message_txt
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
CONCATENATE '@8O@' gs_data-message_txt INTO gs_data-message_txt.
ELSE.
COMMIT WORK.
CONCATENATE gs_data-message_txt '更新成功' INTO gs_data-message_txt.
ENDIF.
MODIFY gt_data FROM gs_data.
CLEAR gs_data.
ENDLOOP.