Меню

Методика создания варианта транзакции: транзакция SHD0

В статье изложена методика создания собственных вариантов транзакций. Целью создания собственных вариантов для стандартной транзакция, может быть ситуация, когда необходимо выполнить предзаполнение некоторых полей стандартной транзакции определенными фиксированными значениями или же скрыть некоторые поля ввода, если стандартными способами для транзакции, такой возможности нет.

Аннотация

В статье изложена методика создания собственных вариантов транзакций. Целью создания собственных вариантов для стандартной транзакция, может быть ситуация, когда необходимо выполнить предзаполнение некоторых полей стандартной транзакции определенными фиксированными значениями или же скрыть некоторые поля ввода, если стандартными способами для транзакции, такой возможности нет.

1.  Описание проблемы.

Создание основных записей материала в системе выполняют разные сотрудники компании. Для каждого сотрудника выделен собственная отрасль и вид материала, с которыми он имеет право работать. Проблема заключается в том, что если по отрасли есть возможность стандартного ограничения для пользователя по коду (для вида) отрасли, то для вида материала стандартной настройки ограничений нет. Но система позволяет создать варианты транзакций, при этом в каждом варианте есть возможность ограничения ввода данных в полях транзакций.

Ниже будет представлено пошаговое описание процесса создания собственного варианта транзакции и создание собственной транзакции варианта.

2.  Создание варианта транзакции.

Вводим код начальной транзакции, в данном случае, транзакция создания основной записи материала это MM01 - Создание основной записи материала. Далее вводим код варианта. Для примера пусть будет ZMM01_FERT - т.е. создание ОЗМ вида FERT. После этого нажимаем кнопку создать вариант вверху экрана, рисунок:1: SHD0-1.png.

Рисунок 1: SHD0-1.png

Система переходит в режим выполнения транзакции создания материала. Вводим на экране вид отрасли E - Энергетика и вид материала FERT - готовая продукция, рисунок 2: SHD0-2.png.Так как нам не нужно предзаполнять другие экраны для ММ01 (нас интересует только первый экрана транзакции, где мы заполнили отрасль и тип материала), то для возврата к ведению варианта, необходимо нажать кнопку выхода из транзакции в верху экрана.

Рисунок 2: SHD0-2.png

После выхода из транзакции создания материала, система выдаст экран настройки параметров варианта для первого экрана транзакции. Тут следует сделать поля отрасли и вида материала, недоступными для ввода, для этого необходимо установить галки в колонке "ТлкВывод" напротив описания полей в таблице ниже, а также не забываем для этих полей поставить галки в колонке "С содержи.", это сохранит в полях введенные нами значения отрасли и вида материала. Далее вводим имя варианта экрана, в данном случае это экран 0060 для программы SAPLMGMM и его описание, после чего выбираем "Выход + Сохранить", рисунок 3: SHD0-3.png

Рисунок 3: SHD0-3.png

Так как вариант содержит только один экран 0060, то следующим шагом, мы перейдем к «легитимации» собственно самого варианта, где необходимо ввести только его описание, после чего сохраняем данные. Система запросит данные переноса, так что тут все - стандартно. После сохранения нажимаем кнопку выхода (возврата назад) на предыдущий экран, рисунок 4: SHD0-4.png

Рисунок 4: SHD0-4.png

После выхода на первый экран ведения наш вариант транзакции будет в списке

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти

Обсуждения Количество комментариев12

Комментарий от  

Константин Дудура

  |  24 мая 2017, 11:13

Полезная статья, но пример, на мой взгляд, выбран не совсем удачно.
 
Для поставленой задачи (создание материала только определённого вида) существует набор стандартных транзакций (например, MMF1 для FERT). Поэтому использование вариантов транзакций для этой цели, выглядит избыточным и не совсем жизненным.
 
Было бы интересно прочитать, какие ещё реальные задачи решались с использованием этой методики и есть ли у нёё какие-то ограничения?
 
Например, можно ли её использовать в транзакциях несколькими экранами (MIGO, ME21N и подобные)?

Комментарий от  

Антон Сорокин

  |  24 мая 2017, 12:46

Полезная статья, но пример, на мой взгляд, выбран не совсем удачно.
 
Для поставленой задачи (создание материала только определённого вида) существует набор стандартных транзакций (например, MMF1 для FERT). Поэтому использование вариантов транзакций для этой цели, выглядит избыточным и не совсем жизненным.
 
Было бы интересно прочитать, какие ещё реальные задачи решались с использованием этой методики и есть ли у нёё какие-то ограничения?
 
Например, можно ли её использовать в транзакциях несколькими экранами (MIGO, ME21N и подобные)?

Практический пример - запрет редактирования полей стандартных транзакций, которые заполняются значениями по умолчанию. Т.е. запрет пользователю изменить значение по умолчанию. Это бывает полезно.

Комментарий от  

Евгений Лобода

  |  24 мая 2017, 21:22

Полезная статья, но пример, на мой взгляд, выбран не совсем удачно.
 
Для поставленой задачи (создание материала только определённого вида) существует набор стандартных транзакций (например, MMF1 для FERT). Поэтому использование вариантов транзакций для этой цели, выглядит избыточным и не совсем жизненным.
 
Было бы интересно прочитать, какие ещё реальные задачи решались с использованием этой методики и есть ли у нёё какие-то ограничения?
 
Например, можно ли её использовать в транзакциях несколькими экранами (MIGO, ME21N и подобные)?

С несколькими экранами все не так радужно. Например, прописали значение по умолчанию на третьем экране. Если пользователь вызовет этот экран, то логика отработает. Если не вызовет, ограничившись в работе только первым экраном - значение не подставится.

Комментарий от  

Олег Точенюк

  |  24 мая 2017, 22:14

С несколькими экранами все не так радужно. Например, прописали значение по умолчанию на третьем экране. Если пользователь вызовет этот экран, то логика отработает. Если не вызовет, ограничившись в работе только первым экраном - значение не подставится.

Есть варианты заставить его вызвать третий экран, но это уже все от бизнес логики зависит.

Комментарий от  

Олег Точенюк

  |  24 мая 2017, 22:16

Полезная статья, но пример, на мой взгляд, выбран не совсем удачно.
 
Для поставленой задачи (создание материала только определённого вида) существует набор стандартных транзакций (например, MMF1 для FERT). Поэтому использование вариантов транзакций для этой цели, выглядит избыточным и не совсем жизненным.
 
Было бы интересно прочитать, какие ещё реальные задачи решались с использованием этой методики и есть ли у нёё какие-то ограничения?
 
Например, можно ли её использовать в транзакциях несколькими экранами (MIGO, ME21N и подобные)?

В конкретном случае у пользователя были созданы свои Z-виды материалов. Мне в своей системе как-то не хотелось кувыркаться с таким, поэтому был взять стандартный существующий вид материала, сделан пример и отправлен клиенту в виде описания. Ну и заодно сюда, так как все делалось в виде бесплатного совета как можно сделать?!

Комментарий от  

Олег Точенюк

  |  29 июня 2017, 12:53

Был вопрос, но куда-то пропал по транзакциям типа BD87, там не получалось настроить свой вариант. Для таких транзакций последовательность действий чуть другая, для примера это транзакция BD87 - Монитор статуса сообщений ALE, тут сначала идем в создание транзакции варианта. Вводим там код варианта, который не существует и сохраняем транзакцию:
 

 
При сохранении будет выдано сообщение что вариант не существует, но так как это сообщение типа W, то нажав ввод, таки сохраняем транзакцию, а вот после этого идем уже в создание самого варианта в SHD0:
 

 
А дальше уже все как было описано выше вроде как работает.

Комментарий от  

Михаил Калябин

  |  06 июля 2017, 10:09

Был вопрос, но куда-то пропал по транзакциям типа BD87, там не получалось настроить свой вариант. Для таких транзакций последовательность действий чуть другая, для примера это транзакция BD87 - Монитор статуса сообщений ALE, тут сначала идем в создание транзакции варианта. Вводим там код варианта, который не существует и сохраняем транзакцию:
 

 
При сохранении будет выдано сообщение что вариант не существует, но так как это сообщение типа W, то нажав ввод, таки сохраняем транзакцию, а вот после этого идем уже в создание самого варианта в SHD0:
 

 
А дальше уже все как было описано выше вроде как работает.

Олег, спасибо за ответ на пропавший вопрос.
Попробовал так, но сталкиваюсь с той же проблемой.Транзакция варианта создана

затем SHD0

и появляется первый экран транзакции.
В случае ММ01 после предварительного заполнения первого экрана и нажатия Enter появлялось окно настройки полей, как на рисунке 3 статьи: SHD0-3.png
Но для BD87 при нажатии на Enter реакции нет. Если в этот момент выйти из транзакции, появится окно без возможности делать настройки

Если перейти на следующий экран (F8), и затем выйти, то также нет возможности редактировать поля первого экрана

 
Если действовать указанным образом можно, например, деактивировать функции и кнопки, но настроить экраны мне не удалось.
 
Как говорится, что я делаю не так?

Комментарий от  

Олег Точенюк

  |  07 июля 2017, 12:13

Олег, спасибо за ответ на пропавший вопрос.
Попробовал так, но сталкиваюсь с той же проблемой.Транзакция варианта создана

затем SHD0

и появляется первый экран транзакции.
В случае ММ01 после предварительного заполнения первого экрана и нажатия Enter появлялось окно настройки полей, как на рисунке 3 статьи: SHD0-3.png
Но для BD87 при нажатии на Enter реакции нет. Если в этот момент выйти из транзакции, появится окно без возможности делать настройки

Если перейти на следующий экран (F8), и затем выйти, то также нет возможности редактировать поля первого экрана

 
Если действовать указанным образом можно, например, деактивировать функции и кнопки, но настроить экраны мне не удалось.
 
Как говорится, что я делаю не так?

Ну в общем глянул как там написано, в общем привет даже не знаю кому, индусам или не индусам, но транзакция вызывает при старте экран 100, а внутри него в BPO-логике, при первом входе, когда идет инициализация параметров работы и создаются графические элементы, внутри вызывается селекционный экран 1100 запроса ограничений. Поэтому SHD0 не видит селекционного экрана, а выдает только данные экрана 100, на котором и находится один несчастный TREE_CONTAINER который и предлагается для ведения. Так что тут похоже ловить нечего. Ну как вариант написать обертку вокруг данной транзакции и уже из нее вызывать BD87 с нужными параметрами. В общем придется типа покувыркаться, чтобы решать задачку.

Комментарий от  

Михаил Калябин

  |  07 июля 2017, 15:19

Ну в общем глянул как там написано, в общем привет даже не знаю кому, индусам или не индусам, но транзакция вызывает при старте экран 100, а внутри него в BPO-логике, при первом входе, когда идет инициализация параметров работы и создаются графические элементы, внутри вызывается селекционный экран 1100 запроса ограничений. Поэтому SHD0 не видит селекционного экрана, а выдает только данные экрана 100, на котором и находится один несчастный TREE_CONTAINER который и предлагается для ведения. Так что тут похоже ловить нечего. Ну как вариант написать обертку вокруг данной транзакции и уже из нее вызывать BD87 с нужными параметрами. В общем придется типа покувыркаться, чтобы решать задачку.

Олег, большое спасибо!

Комментарий от  

Олег Точенюк

  |  10 июля 2017, 13:04

Олег, большое спасибо!

Как вариант решения проблемы, нашел тут у себя создание системного варианта транзакции MBPM. Думаю в данном случае можно попробовать так тоже сделать.
 
===
Для этого запускаем стандартную транзакцию MBPM и по меню выбираем "Перейти к" - "Варианты" - "Сохранить как вариант" и попадаем в ведение вариантов как на рисунке MBPM.png.
 

 
Обратите внимание что вариант должен начинаться с CUS&, иначе ничего не получится. А дальше как обычно защищаем сам вариант и требуемое нам поле от изменений. В данном случае чтобы пользователи не могли запустить отчет с удалением данных. Сохраняем вариант. Система скажет, что вариант будет системным, соглашаемся с этим и затем будет выдано окно для ввода запроса на перенос варианта. Создаем запрос.
 
Затем надо задать это вариант для транзакции MBPM. Для этого идем в транзакцию SE93 - Ведение транзакций и там вводим код MBPM, как на рисунке ниже. Жмем изменение транзакции, кстати для этого ключ на объект получать не нужно. Систем спрашивает на каком языке буде ведение, выбираем на языке регистрации и дальше в поле "Запуск с вариантом" вносим наш вариант. Затем сохраняем транзакцию, само собой спросит запрос для переноса. Выбираем запрос созданный на предыдущем шаге и все... теперь транзакция MBPM будет запускаться по умолчанию с заблокированным для ввода полем "Немедленное удаление"

Комментарий от  

Олег Точенюк

  |  10 июля 2017, 13:11

Как вариант решения проблемы, нашел тут у себя создание системного варианта транзакции MBPM. Думаю в данном случае можно попробовать так тоже сделать.
 
===
Для этого запускаем стандартную транзакцию MBPM и по меню выбираем "Перейти к" - "Варианты" - "Сохранить как вариант" и попадаем в ведение вариантов как на рисунке MBPM.png.
 

 
Обратите внимание что вариант должен начинаться с CUS&, иначе ничего не получится. А дальше как обычно защищаем сам вариант и требуемое нам поле от изменений. В данном случае чтобы пользователи не могли запустить отчет с удалением данных. Сохраняем вариант. Система скажет, что вариант будет системным, соглашаемся с этим и затем будет выдано окно для ввода запроса на перенос варианта. Создаем запрос.
 
Затем надо задать это вариант для транзакции MBPM. Для этого идем в транзакцию SE93 - Ведение транзакций и там вводим код MBPM, как на рисунке ниже. Жмем изменение транзакции, кстати для этого ключ на объект получать не нужно. Систем спрашивает на каком языке буде ведение, выбираем на языке регистрации и дальше в поле "Запуск с вариантом" вносим наш вариант. Затем сохраняем транзакцию, само собой спросит запрос для переноса. Выбираем запрос созданный на предыдущем шаге и все... теперь транзакция MBPM будет запускаться по умолчанию с заблокированным для ввода полем "Немедленное удаление"

Единственное что возможно понадобиться сделать вариант транзакции, при этом вариант делать в манданте 000.

Комментарий от  

Бахытжан Тайлакбаев

  |  12 апреля 2019, 10:28

Добрый день, Олег!
 
Подскажите пжлст. Сделал вариант транзакции для стандартной тр. ME21N - Создание заказа на поставку. Создал Z-транзакцию ZME21N соответственно. Теперь при тестировании выяснилось, что при запуске Z-транзакции система проверяет объект полномочия S_TCODE на доступ к стандартной транзакции ME21N. Т.е. не понятно в чем смысл тогда создания варианта транзакции. Ведь необходимо было ограничить доступ именно к стандартной транзакции ME21N. Вы не сталкивались с таким?