ABNA с вариантами

Есть у пользователей транзакцией 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. Остаётся непонятным, почему эта транзакция изначально нарушает стандартное поведение основных транзакций, когда при сохранении документа происходит выход в главное меню.

Опубликовано 22.08.2014 в 15:23 · Автор ivan · Ссылка
Рубрики: ABAP

Написать комментарий