Besa написал:
REVERSE_CLEARING?
FM_REVERSE_CLEARING?
Вроде через REVERSE_CLEARING получилось, но пришлось немного по извращаться )...
Code:
DATA: BEGIN OF lt_items OCCURS 50,
xauth(1) TYPE c, " Berechtigung?
xhell(1) TYPE c. " Hell anzeigen?
INCLUDE STRUCTURE rfpos. " Listanzeigen-Struktur
INCLUDE rfeposc9. " Kunden-Sonderfelder
DATA: xbkpf(1) TYPE c, " BKPF nachgelesen?
xbseg(1) TYPE c, " BSEG nachgelesen?
xbsec(1) TYPE c, " BSEC nachgelesen?
xbsed(1) TYPE c, " BSED nachgelesen?
xpayr(1) TYPE c, " PAYR nachgelesen?
xbsegc(1) TYPE c, " BSEGC nachgelesen?
xbsbv(1) TYPE c, " BSBV nachgelesen?
xmod(1) TYPE c, " POSTAB modifiziert?
END OF lt_items.
.
DATA: l_bvorg TYPE bkpf-bvorg
, l_augdt TYPE bseg-augdt
, l_rfzei TYPE bseg-rfzei
, l_xkdf
, l_xskv
, lt_accnt TYPE STANDARD TABLE OF rf05r_acct
, l_xerlk TYPE rfpdo1-f140xdel
, l_stodt TYPE bkpf-budat
, lt_bkorm TYPE TABLE OF bkorm WITH HEADER LINE
, lt_ragl1 TYPE TABLE OF ragl1 WITH HEADER LINE
, lt_ragl2 TYPE TABLE OF ragl2 WITH HEADER LINE
, lt_ragl3 TYPE TABLE OF ragl3 WITH HEADER LINE
.
.
CALL FUNCTION 'GET_CLEARED_ITEMS'
EXPORTING
i_bvorg = l_bvorg
i_bukrs = p_ls_bsad_bukrs
i_belnr = p_ls_bsad_augbl
i_gjahr = p_ls_bsad_gjahr
i_augdt = l_augdt
i_rfzei = l_rfzei
IMPORTING
e_xkdf = l_xkdf
e_xskv = l_xskv
TABLES
t_items = lt_items
t_accnt = lt_accnt
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
INTO g_logt
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
g_subr = 'E'.
PERFORM write_logfile USING g_logt.
PERFORM add_log USING 'E' g_logt.
RETURN.
ENDIF.
LOOP AT lt_items.
AT NEW belnr.
READ TABLE lt_items INDEX sy-tabix.
IF p_ls_bsad_augbl NE lt_items-belnr "Ausgleichsbelegnummer ist
OR p_ls_bsad_bukrs NE lt_items-bukrs "bereits gesperrt
OR p_ls_bsad_gjahr NE lt_items-gjahr.
PERFORM belegnummer_sperren_rc(sapff001)
USING lt_items-bukrs lt_items-belnr lt_items-gjahr sy-subrc.
CASE sy-subrc.
WHEN 1.
* MESSAGE a302(f5) WITH lt_items-belnr lt_items-bukrs.
MESSAGE ID 'f5' TYPE 'A' NUMBER '302'
INTO g_logt
WITH lt_items-belnr lt_items-bukrs.
g_subr = 'E'.
PERFORM write_logfile USING g_logt.
PERFORM add_log USING 'E' g_logt.
WHEN 2.
* MESSAGE a288(f5).
MESSAGE ID 'f5' TYPE 'A' NUMBER '288'
INTO g_logt.
g_subr = 'E'.
PERFORM write_logfile USING g_logt.
PERFORM add_log USING 'E' g_logt.
ENDCASE.
ENDIF.
ENDAT.
MOVE-CORRESPONDING lt_items TO lt_ragl1.
APPEND lt_ragl1.
ENDLOOP.
CHECK g_subr NE 'E'.
CALL FUNCTION 'REVERSE_CLEARING'
EXPORTING
i_augbu = p_ls_bsad_bukrs
i_augbl = p_ls_bsad_augbl
i_auggj = p_ls_bsad_gjahr
i_xerlk = l_xerlk
i_stodt = l_stodt
TABLES
t_bkorm = lt_bkorm
t_ragl1 = lt_ragl1
t_ragl2 = lt_ragl2
t_ragl3 = lt_ragl3.
IF sy-subrc NE 0.
ROLLBACK WORK.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
INTO g_logt
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
g_subr = 'E'.
IF g_logt IS NOT INITIAL.
PERFORM write_logfile USING g_logt.
PERFORM add_log USING 'E' g_logt.
ELSE.
PERFORM write_logfile USING 'Ошибка при отмене выравнивания'.
PERFORM add_log USING 'E' 'Ошибка при отмене выравнивания'.
ENDIF.
RETURN.
ENDIF.
COMMIT WORK AND WAIT.
REFRESH: lt_items
, lt_accnt
.
CALL FUNCTION 'GET_CLEARED_ITEMS'
EXPORTING
i_bvorg = l_bvorg
i_bukrs = p_ls_bsad_bukrs
i_belnr = p_ls_bsad_augbl
i_gjahr = p_ls_bsad_gjahr
i_augdt = l_augdt
i_rfzei = l_rfzei
IMPORTING
e_xkdf = l_xkdf
e_xskv = l_xskv
TABLES
t_items = lt_items
t_accnt = lt_accnt
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
g_subr = 'S'.
PERFORM write_logfile USING 'Выравнивание отменено'.
PERFORM add_log USING 'S' 'Выравнивание отменено'.
RETURN.
ELSE.
ROLLBACK WORK.
ENDIF.