Добрый день.
Есть 2 транзакции, названия которых совпадают с репортами (Z1 и Z2). Проблема следующая: при вызове Z2 из Z1 через call transaction
using, как только выполнение Z2 доходит до commit work, дальнейшее выполнение Z2 прерывается и идет возврат в Z1. Задача состоит в том, чтобы Z2 я выполнялась дальше несмотря на commit work.
Убрав все лишнее для простоты можно представить код Z1 и Z2 следующим образом.
Код Z1:
Code:
START-OF-SELECTION.
WRITE '1st transaction before'.
AT LINE-SELECTION.
DATA: lv_mat_sel TYPE matnr,
lv_werk_sel TYPE werks_d,
lv_pknum_sel TYPE pknum,
ls_bdcdata TYPE bdcdata,
lt_bdcdata TYPE TABLE OF bdcdata,
ls_opt TYPE ctu_params.
CLEAR ls_bdcdata.
ls_bdcdata-program = 'Z2'.
ls_bdcdata-dynpro = '1000'.
ls_bdcdata-dynbegin = 'X'.
APPEND ls_bdcdata TO lt_bdcdata.
CLEAR ls_bdcdata.
ls_bdcdata-fnam = 'P1'.
ls_bdcdata-fval = '1'.
APPEND ls_bdcdata TO lt_bdcdata.
CALL TRANSACTION 'Z2' USING lt_bdcdata. "с таким вариантом выполнение транзакции Z2 завершается на commit work.
* CALL TRANSACTION 'Z2'. "если убрать USING, то проблема исчезает, но селекционник Z2 не заполняется автоматически
WRITE '1st transaction after'.
Код Z2:
Code:
PARAMETERS: p1 TYPE char1.
START-OF-SELECTION.
WRITE / '2nd transaction before trigger'.
COMMIT WORK.
WRITE / '2nd transaction after trigger'.
Изначальная задача состоит в том, что при дабл-клике какой-либо записи из таблицы, представленной на транзакции 1 должен автоматически заполняться селекционник транзакции 2. Затем пользователь нажимает F8 и на открывшемся экране может произвести некое действие на основе стандартного ФМ с завершающим COMMIT WORK. К сожалению, после этого идет возврат в транзакцию 1. А нужно остаться в транзакции 2 (к примеру, чтобы провести еще одно действие).
Есть идеи как можно это реализовать?