Есть у пользователей транзакцией ABNA, а транзакция ABNAN их кое-чем не устраивает. Любое серийное использование подобных транзакций рано или поздно обрастает вариантами. И вот порешили сделать два варианта транзакции. И тут возникли затруднения.
Проблема 1. ABNA не умеет работать с вариантами транзакций
Для решения этой проблемы делается прослойка в виде программы запуска:
REPORT ZAM_ABNA_START.
CALL TRANSACTION ‘ABNA’.
К программе делается транзакция ZABNA. И вот уже к этой транзакции можно делать варианты ZABNA1, ZABNA2.
Проблема 2. После сохранения транзакция сбрасывает вариант и возвращается на первый экран
Это чревато тем, что пользователи по запарке продолжают вбивать движения для других основных средств, но уже без навязанного вариантом шаблона. С вытекающими последствиями.
С этим сложнее.
Сначала я нашёл место, где это происходит (MA01BF00):
COMMIT WORK.
LEAVE TO CURRENT TRANSACTION.
Вот так просто. Происходит переход в базовую транзакцию и ничего не попишешь. Или попишешь?
Заставить пользователей перейти на ABNAN?
Первый вариант приходит в голову. Если дать права на транзакцию с вариантом, но отнять права на базовую транзакцию, то эффект будет очень неприятным. Вариант отметается.
Второй вариант приходит в голову. Можно написать wrap-пакетник на эту транзакцию. Сложный и сомнительный вариант. Вариант отметается.
Третий вариант приходит в голову. Семь бед – один ответ: всех спасёт enhancement point. Чуть выше нужного кода есть PERFORM, который можно безопасно расширить. Основные моменты:
Используем
call function ‘RS_HDSYS_GET_TC_VARIANT’ …
для определения действующего варианта.
А затем можно перезапустить транзакцию с вариантом
commit work.
leave to transaction lv_tcode.
или просто выйти из транзакции.
PS. Остаётся непонятным, почему эта транзакция изначально нарушает стандартное поведение основных транзакций, когда при сохранении документа происходит выход в главное меню.