Подключение новых типов объектов, доступных для транзакции MASS – массового изменения данных в SAP ERP
Используя предложенные в статье пошаговые инструкции, вы сможете сэкономить порядка 80% времени при решении задач массового изменения данных, а также сможете создавать унифицированный интерфейс для работы с изменениями любых типов объектов системы конечным пользователем.
Точенюк Олег, консультант по SAPMM. Профессиональный опыт: занимал должности консультанта по SAPММ в различных компаниях с 1997 года. Занимался внедрением модулей: FI-FM(Контроль исполнения бюджета), ММ (Управление материальными потоками), СУС (WMS) (Управление складом); занимал должность консультанта по интеграции MM<->ТОРО, участвовал в разработках расширений системы на языке ABAP. Связаться со мной можно по адресу uukrul@hotmail.com
Довольно часто возникает необходимость массового изменения данных в SAP ERP. Например, это данные технических мест или данные карточек ОС. Делать обновление данных в таблицах системы «вручную» категорически запрещено, допустимо только из-менение данных с использованием стандартных транзакций системы так, чтобы информация об изменениях осталась в журналах обработки и т.д.
Компания SAP предоставляет программные интерфейсы в виде функций BAPI, которые позволяют выполнять изменения объектов путём написания собственной Z-программы массовой обработки данных. Разработка Z-программы такого рода обычно состоит из следующих шагов:
- Запрос параметров выбора объектов для обработки, т.е. получение у пользователя информации о том, какие данные требуется массового обработать/изменить.
- Выбрать требуемые данные, показать списком текущие значения полей объектов, которые будем изменять.
- Запросить у пользователя, какие значения полей и по каким условиям требуется изменить и на какие значения выполнить изменения.
- Выполнить изменения согласно заданным пользователем параметрам.
- Показать журнал обработки объектов.
Если теперь перевести эти соображения на язык программы, то скорее всего самой сложной частью работ будет обработка диалога с пользователем, так как шаг 4, при наличии соответствующих BAPI-функций (в крайнем случае, можно использовать пакетный ввод) занимает в среднем около 20% от всей разработки. Используя предложенные ниже инструкции, вы сможете сэкономить порядка 80% времени при решении задач массового изменения данных, также получите унифицированный интерфейс для работы с изменениями любых объектов системы конечным пользователем.
В системе SAP ERP есть хорошая транзакция для выполнения массового изменения данных – MASS, которая позволяет это выполнять такие операции. Описание работы с транзакцией MASS можно найти по ссылке: http://www.sapland.ru/articles/spj/2009/3/Uprostite_razrabotku_ABAP_s_pomoschiyu_instrumenta_massovogo_vedeniya.html. Это - статья Марка Чалфена, доступная, к сожалению, только для подписчиков журнала SAP Professional Journal Россия.
Когда у меня появилась задача массового изменения карточек ОС (Основных средств), я попытался использовать транзакцию MASS, но обнаружил, что она не работает с типом объекта «Техническое место». В стандартной системе перечень типов объектов, с которыми работает данная транзакция невелик. Стандартный список объектов транзакции MASS, приведен на Рис.1.
Я задался целью расширить список типов объектов, данных которых можно массово изменять с помощью данной транзакции, объектом «Техническое место». В данной статье описывается методика (пошаговое руководство) такого расширения.
Рис.1. Стандартный список объектов транзакции MASS
1. Добавление нового объекта
Нужно задать имя бизнес-объекта для объекта «Техническое место». Имя можно добавить любое. Существующие в системе имена типов объектов, используемых в транзакции MASS, можно увидеть через код поиска в таблицах:
- MASSFUNC (Массовое изменение: функции для обновления базы данных, сюда следует свой тип объекта и его параметры).
- MASSNAME (Тексты к объектам массовых изменений, сюда следует добавить текст, описывающий добавляемый объект).
После добавления в эти таблицы «вашего типа объекта» он будет отображаться для выбора в транзакции MASS. Для ввода требуемых данных можно воспользоваться ракурсом ведения, транзакция SM30: MASSFUNC, в которой добавим наш новый тип объекта – «Техническое место».
Примечание: Так как для объектов «Техническое место» в системе есть код бизнес-объекта, то воспользуемся существующим именем. Определить имя бизнес объекта, можно используя таблицу TOJTB – Основные данные репозитария бизнес-объектов. Для этого нужно зайти в просмотр данных таблицы и через код поиска значений к полю NAME можно определить, какие есть бизнес-объекты для технических мест. Как видим, в системе существует 4 типа объекта (см. Рис.2) , мы возьмём BUS0010, чтобы было похоже на то, что есть в таблицах транзакции MASS. Еще раз напоминаю, что на самом деле никакой связи транзакции MASS с данными бизнес-объектов нет, поэтому будет ли это имя из таблицы TOJTB или же это будет ваше собственное имя, в принципе все равно, но в целом для поддержания общих принципов наименования объектов, правильно будет использовать имена стандартных бизнес-объектов из таблицы TOJTB.
Рис.2. Выбор типа объекта
Добавим в ракурсе ведения MASSFUNC, следующие данные, Рис.3.
Рис.3. Добавление данных в в ракурсе ведения MASSFUNC
Имя объекта берем из таблицы TOJTB, указав в комментарии, что это объект массового изменения для технических мест, далее имя функции: Y_TSH_MASS_CHANGE_IFLOT, этой функции еще не существует, это ваше пользова-тельское имя функции, которую будет вызывать транзакция MASS, для физического изменения технических мест в базе данных. О реализации функции будет рассказано ниже. Пока просто «придумаем» имя, правила наименования пользовательских объектов разработки стандартные, я назвал функциональный модуль, начиная с буквы Y_. Сохраним данные: система запросит имя транспорта для переноса. Создадим запрос, в который будем записывать, как данные настройки, так и программный код, который создадим позже.
Если теперь зайти в транзакцию MASS, то на первом экране в списке выбора поя-вится наш объект ведения данных для технических мест. Правда пока ничего еще не работает, так что, переходить к ведению данных еще рано, хотя если и перейти, то закладки выбора данных будут пустыми. Как видим, объект уже выбирается и транзакция MASS, что-то уже об этом объекте знает, Рис.4.
Рис.4. Транзакция MASS
2. Определение изменяемых таблиц и полей
Теперь добавим имена таблиц и полей, которые можно будет изменять в транзакции MASS. В общем виде можно указать все таблицы, в которых хранятся данные технических места, например, это таблицы IFLOT, ILOA и другие, а затем перечислить все поля этих таблиц. Однако нужно понимать, что фактически система не даст изменить все поля технического места. Если вы зайдёте в транзакцию изменения технических мест IL02, то сможете определить: какие поля можно менять, а какие закрыты от изменений, (например, код технического места и код балансовой единицы, изменить нельзя).
Мы будем добавлять для возможности использования в транзакции MASS таблицу IFLOT и следующие поля этой таблицы:
- MAPAR – Номер детали производителя
- IWERK – Завод, планирующий ТОРО
- EQART – Вид технического объекта
- INVNR – Инвентарный номер
- GROES – Величина/размер
- BRGEW – Вес брутто
- GEWEI – Единица измерения веса
- ANSDT – Дата покупки
- SERGE – Серийный номер изготовителя
Есть несколько вариантов определения возможности изменения данных транзакцией MASS. Первый вариант: перечислить таблицы и поля в «ручном режиме»; второй ва-риант: указать «использовать все поля», а затем написать специальный функциональный модуль, который удалит из полного списка те поля, которые нельзя изменять; третий вариант: сделать структуру/ракурс, в который включить только поля, разрешенные для изменения. Какой вариант выбрать? Если предполагается разрешить пользователю для изменения 2 – 5 полей из 59, которые есть в таблице IFLOT, тогда, вероятно, проще выбрать вариант 1 или вариант 3. Если - 50 полей из 59, то вариант 2 будет оптимальным, т.е. даем изменять все поля, и пишем модуль, который исключит из этого списка 9 полей, запрещенных к изменению.
Имена таблиц требуется задать в таблице MASSTAB, а поля, если нужно, в таблице MASSFLDLST. Если выбран вариант ведения 2, то для данной таблицы также есть ракурс ведения. Какие внести данные, можно легко определить: в таблице MASSFLDLST всего три поля. Для нашего примера предпочтителен вариант 3, т.е. необходимо создать ракурс ведения таблицы IFLOT, в который включить только разрешённые к изменениям поля, перечисленные выше. Как было сказано, для задания значений у таблиц существуют ракурсы ведения, с такими же точно именами, как и у таблиц.
Итак, сначала идем в создание ракурса ведения для таблицы IFLOT, транзакция SE11 - создать ракурс. Создаём ракурс YTSH_IFLOTSTRUCT – Ведение технических мест для транзакции MASS - ракурс только для чтения таблицы IFLOT, Рис.5. Кроме полей, предназначенных для изменения в транзакции MASS, в ра-курс требуется включить также ключевые поля таблицы IFLOT.
Рис.5. Ракурс YTSH_IFLOTSTRUCT
Теперь укажем этот ракурс в таблице MASSTAB через транзакцию ведения SM30. Тип объекта укажем BUS0010, который мы выбрали ранее. В поле имя таблицы зададим имя ракурса YTSH_IFLOTSTRUCT. Далее в поле «Число» укажем, например, значение 10. Данное поле служит для упорядочивания списка таблиц: если, например, таблиц/сегментов для обновления больше одной (что в нашем примере неактуально, так как у нас всего одна таблица). В поле «Таб БД» укажем имя таблицы базы данных, из которой фактически будет идти выборка. Для чего требуется указать имя таблицы в колонке «Таб. БД»? Суть заключается в следующем: в поле «Таблица» задаём имя структуры, содержащей только поля, разрешенные для изменения, которые и предложит транзакция MASS для выбора пользователю.
Однако часто ситуация заключается в том, что, например, мы разрешаем изменять поле «Серийный номер», при этом критерием выбора записей для обработки, в которых будет изменяться, является значение поля «Вид технического места», при этом не должно быть разрешено изменять это поле. Мы задали имя основной таблицы базы данных - IFLOT, что служит для транзакции MASS командой предложить пользователю все поля этой таблицы на селекционном экране выбора записей, которые предполагается изменить. Если выборка данных должна выполняться как-то особенно, то в поле «ФМ выбора», нужно задать имя функционального модуля выполняющего выборку данных. В общем случае достаточно стандартных функций выбора данных. И последнее, поле «Без нов. сегментов», в котором поставлена галка, представляет чекбокса определяющий то, что транзакция MASS позволяет не только изменять данные, но и массово создавать новые данные. В рассматриваемом примере создание новых записей технических мест рассматриваться не будет, по этому мы отключили закла
дку создания новых технических мест (так как не будем использовать эту функциональность). Пример создания записи, Рис.6.
Рис.6. Пример создания записи
Теперь, если перейти в транзакцию MASS, то картина будет более интересной, Рис.7. Как видим, теперь транзакция MASS знает нашу структуру и поля, которые мы хотим разрешить изменять. Кроме этого программа уже умеет искать поля, используя кнопки поиска (справа от списка полей). Поиск может идти как по названию, так и техническому имени поля. Конечно, в данном случае, это не очень важно, так как набор полей для изменения ограничен, однако, если полей в списке много, то такая возможность не является лишней.
Рис.7. Транзакция MASS
Фактически, в данный момент мы должны выбрать нашу таблицу, она одна в списке и выбрать поля которые хотим изменить: можно выбрать как весь набор полей, так и отдельные поля, например, пусть это будет поле «Планирующий завод» и «Дата покупки». Для выбора выделим эти поля в таблице, нажав кнопки выбора слева от каждого поля, после чего можно нажать кнопку выполнить вверху экрана, Рис.8.
Рис.8. Транзакция MASS, выбор полей для изменения
Транзакция перейдет к экрану выбора технических
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 1
Комментарий от
Олег Точенюк
| 19 марта 2012, 14:22
После этого пользователь будет попадать сразу на второй экран транзакции MASS, без возможности выбора объекта для обработки.