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

Система SAP позволяет расширять её стандартную функциональность путём добавления собственных данных как в таблицы базы данных, так и на экраны стандартных транзакций. При этом, если механизм расширения таблиц в системы стандартный, то механизмы добавления собственных данных на экраны стандартных транзакций отличаются даже внутри одной функциональности. Механизм расширения ОЗМ описан в ноте SAP 44410, однако разобраться, что и как нужно делать оказалось не просто, так как в данном случае предлагается использовать уникальный механизм создания собственных полей. В большинстве транзакций есть user-exit[1] для изменения подэкрана пользователя, куда и можно добавлять свои данные. В случае с транзакциями управления ОЗМ (mm01, mm02, mm03) все немного сложнее, так как экранные формы этих транзакций фактически представляет собой большой набор подэкранов, которые можно комбинировать по закладкам и т.д., а также создавать дополнительно свои подэкраны.

Выбор варианта добавления собственных полей в ОЗМ зависит от того, как вы хотите хранить данные. Возможны следующие варианты:

Вариант 1. Вы расширяет какую-то из стандартных таблиц путем добавления своих полей данных.

Вариант 2. Вы создаёте свою таблицу, в которую пишете данные со «своего» экрана.

В случае 2 необходимо активировать user-exit, который срабатывает при сохранении изменений в ОЗМ и который будет записывать данные в эту таблицу. Этот user-exit должен обеспечить чтение данных и запись этих данных, а также проверки: новая ли запись или изменение существующей и т.д.

Я рассмотрю вариант 1, когда данные заносятся в поля, которые находятся в стандартных таблицах системы. Задача: добавить на экран ОЗМ в ракурс «Основные данные» два поля по 150 символов, которые содержат расширенное описание основной записи материла. Такая задача возникает, когда нужно обойти ограничение в 40 символов для поля «Краткое название» ОЗМ. Я не рассматриваю вариант, когда такие тексты нужно вести на разных языках, поэтому данные предлагаю хранить в таблице MARA.

Идём в ведение таблиц, транзакция SE11, и там выбираем просмотр таблицы MARA, переходим к созданию дополнительной структуры (Расширения) к таблице, Рис.1.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.1

В появившемся экране выбираем создание нового Расширения, начинаем его как обычно на Z или Y. Я сделал расширение с именем ZMYMARA, Рис.2.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.2

В данное Расширение я добавил два поля длиной 128 символов. Пример на Рис.3 ниже. В общем случае, можно добавить любое количество полей с требуемыми типами данных.

Обратите внимание: имена полей (компонент) должны начинаться со сдвоенного символа ZZ или YY, для защиты от дублирования имён.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.3

После создания Расширения требуется задать категорию расширения структуры по меню: Дополнительная информация – Категория расширения, Рис.4. Требуется выбрать один из списка вариантов категории расширения структуры для вашего Расширения (дополнения).

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.4

При активации созданного Расширения, система не выдаст сообщения об ошибках, если имена дополнительных полей не совпали с уже существующими полями в таблице MARA и выбрана категория расширения для структуры.

Теперь разместим эти поля в целевом ракурсе и определим правила обработки этих полей. Начиная с версии 4.0, в системе имеется специальная программа, которая позволяет сгенерировать шаблон группы функций. Далее эту группу и созданный собственный подэкран мы добавим в нужную последовательность ракурсов для нужного нам вида ОЗМ. Пример как это выполняется, рассмотрен в статье: «Управление визуализацией полей в основной записи материала» http://www.sapland.ru/articles/spj/2022/2/upravlenie-vizualizatsiei-polei-v-osnovnoi-zapisi-materiala.html.

Для создания своей программы по обработке подэкрана с созданными полями используем программу COPYMGD1, и транзакцию SE38, пример на Рис.5.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.5

Выполняем эту программу: если у вас ритейл система, то выберите RETAIL, иначе INDUSTRY, Рис.6.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.6

Система запросит имя группы функций, задайте его, не забывая, что это имя должно начинаться с Z или Y, например так, как  на Рис.7, не забудьте при этом назначит себя ответственным в нижем поле экрана. Затем нажмите «сохранить», система спросит имя пакета и запроса, в который будет включена ваша программа.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.7

После этих действий вы получите сообщение «Группа функций: YMY_MGD1: – создано». Теперь можно посмотреть, что система создала; для этого используем транзакцию SE80 и выберем просмотр «Группы функции», Рис.8.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.8

Теперь перейдем в группу функций системы MGD1 и там найдём подэкран, на который стандартно выводится код материала и краткий текст, длинной 40 символов. Я использовал в качестве примера подэкран «2002 – Основные данные – прочие данные», Рис.9.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис. 9

Установите курсор на подэкран с номером 2002 в дереве справа и правой кнопкой вызовите контекстное меню. В меню будет команда «Скопировать», после выбора данного пункта, будет открыто диалоговое окно копирования, Рис.10.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.10

Выбранный подэкран нужно скопировать в нашу, ранее созданную группу функций YMY_MG. Так как группа функций называется YMY_MGD1, то программа будет называться SAPLYMY_MGD1, а номер подэкрана можем задать любой, например 1001, так как нумерация экранов/подэкранов уникальная в рамках группы функций. После копирования, ваша группа функций, будет выглядеть просто страшно, так как копирование подэкрана тянет за собой очень много различного функционала. Пример на Рис.11.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.11

Как видно из Рис.11, в нашу группу функций добавилось очень много различных модулей. Нас же будет интересовать только появившийся подэкран 1001. Копию подэкрана назовем «Длинные тексты материала». Теперь, переходим в режим редактирования экрана и жмем кнопку «Формат». Затем удаляем с экрана все поля, которые попали нам из копии и создаем два поля как на Рис.12.

Внимание! Так как поля были добавлено в таблицу MARA, то имена создаваемых полей экрана должны называться как MARA-ZZ_TXT_ONE и MARA-ZZ_TXT_TWO. Это важно, так как иначе работать ничего не будет.

Кстати, когда вы назовёте поля как в таблице, система предложит вам скопировать определение форматов из словаря, соглашаемся с таким предложением.

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия

Рис.12

Теперь требуется отредактировать логику подэкрана. Фактически я убрал пару модулей, которые не являются необходимыми. Изначально, логика экрана выглядела как на Рис.13:

Противопехотная мина ОЗМ-72: характеристики, описание и принцип действия