как добавить поле в таблицу sap

Создание пользовательской таблицы и ракурса ее ведения

Создание пользовательской таблицы и ракурса ее ведения в системе SAP

Sergey Ignatov

Спросите любого консультанта, как часто ему приходится создавать пользовательские таблицы, и ракурсы их ведения. Ну а если не создавать, то как часто приходится писать спецификации на разработку оных? Если он ответит, что не часто, знайте — перед вами лжеконсультант. Хотя. Нет, точно лжеконсультант!

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

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

1. Создание таблицы

В транзакции SE11 определяем наименование новой таблицы и нажимаем на кнопку Создать:

На следующем экране необходимо определить Класс поставки таблицы, активировать свойство возможности ведения/просмотра данной таблицы, и придумать ее название:

На вкладке Поля определим поля, которые будут использоваться в таблице:

Нажмите на кнопку **Технические параметры настройки, **и на открывшемся экране заполните поля по аналогии с тем, что указано на Рисунке №4:

2. Создание ракурса ведения

Заполните поля, по аналогии с тем, что указано на Рисунке №7, и нажмите на кнопку Создать

3. Проверка

Запустите транзакцию SM30, введите наименование ракурса, который был создан, и нажмите на кнопку Ведение:

Введите какие-нибудь данные и сохраните

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

Рассмотрим несколько вопросов, часто возникающих при работе с пользовательскими таблицами и ракурсами их ведения.

Вопрос #1. В пользовательской таблице текстовые данные сохраняются в верхнем регистре. Как это исправить?

В примере, который описан в данной заметке (см. Рисунок №9), можно обратить внимание, что текстовое значение для поля Text сохранено в верхнем регистре (хотя текст был набран в нижнем регистре). Все последующие записи, созданные в данной таблице, также будут автоматически сохранены в верхнем регистре. Для того, чтобы это исправить необходимо посмотреть на домен, который определен для этого поля. В нашем случае, это домен ZUSER_VALUES_TEXT, типом данных которого является CHAR(40)

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

Применим данный тип данных для элемента **ZUSER_VALUES_TEXT. **Не забудьте активировать элемент данных, после внесенных изменений.

Снова зайдите в созданный ранее ракурс, заведите запись в нижнем регистре, и нажмите на сохранить:

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

Пользовательские таблицы можно разделить на несколько типов:

В открывшемся окне отметьте пункт Новое создание модулей и нажмите Enter

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

Sign up for more like this.

ABAP CDS. Коротко о главном (2)

Обзор процесса создания CDS View с входным параметром и последующее его использование в ABAP программе

Small SAP Talk. Поиск PFCG роли по включенному в нее каталогу плиток

Small SAP Talk. Поиск PFCG роли по включенному в нее каталогу плиток

ABAP CDS. Коротко о главном

Беглый обзор ABAP CDS, как инструмента для создания моделей данных, и их последующем применении в ABAP конструкциях

Источник

Добавление пользовательских полей в ОЗМ

Точенюк Олег Виталиевич

По разному называли

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

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

Читайте также:  материал для теплого пола

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

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

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

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

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

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

Рис.1

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

Рис.2

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

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

Рис.3

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

Рис.4

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

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

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

Рис.5

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

Рис.6

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

Рис.7

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

Рис.8

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

Рис. 9

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

Рис.10

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

Рис.11

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

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

Читайте также:  вся наша жизнь еда

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

Рис.12

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

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

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

Комментарий от Олег Точенюк 19 сентября 2012, 10:17

Вообще то для поиска именно userexit-тов я пользуюсь вот такой вот программой: sapforum.biz/index.php/topic,654.msg9769.html#msg9769 более быстро и наглядно выдает информацию по коду транзакции, ну и сразу выдает имя расширения которое надо включить в проект.

Выглядит где-то так:

Комментарий от Александр Дублин 19 сентября 2012, 15:14

Вообще то для поиска именно userexit-тов я пользуюсь вот такой вот программой: sapforum.biz/index.php/topic,654.msg9769.html#msg9769 более быстро и наглядно выдает информацию по коду транзакции, ну и сразу выдает имя расширения которое надо включить в проект.

Выглядит где-то так:

Комментарий от Олег Точенюк 20 сентября 2012, 01:41

Вот и тема новой статьи

Комментарий от Сергей Трапезников 04 октября 2012, 09:43

Комментарий от Олег Точенюк 04 октября 2012, 14:04

1. Мне сложно оценить, чем может аукнутся допустимое и корректное расширение объекта SAP? По крайней мере из моей практики, лет за много, такое расширение таблицы, ни разу не аукнулось. Так что примеры, для оценки эха в студию 🙂

2. Классификация не нравится так как названия надо присвоить не НУЖНЫМ материалам, а ВСЕМ материалам, ну и далее про ум программиста, а вы пробовали делать отчеты по данным ОЗМ, партий и т.д. где используется классификация? А то что классификация может быть активирована не только для ОЗМ а еще для двух десятков объектов и значения признаков в таком случае будут хранится в одной таблице?

3. Ну и в общем данные можно хранить не SAP-таблице, а в своей Z-таблице, но для этого надо еще активировать экзит записи данных.

PS: Данная статья не о том как что-то поломать в системе, а о том, как нужно читать ноту 44410 🙂

Комментарий от Сергей Трапезников 04 октября 2012, 15:37

1. Мне сложно оценить, чем может аукнутся допустимое и корректное расширение объекта SAP? По крайней мере из моей практики, лет за много, такое расширение таблицы, ни разу не аукнулось. Так что примеры, для оценки эха в студию 🙂

2. Классификация не нравится так как названия надо присвоить не НУЖНЫМ материалам, а ВСЕМ материалам, ну и далее про ум программиста, а вы пробовали делать отчеты по данным ОЗМ, партий и т.д. где используется классификация? А то что классификация может быть активирована не только для ОЗМ а еще для двух десятков объектов и значения признаков в таком случае будут хранится в одной таблице?

3. Ну и в общем данные можно хранить не SAP-таблице, а в своей Z-таблице, но для этого надо еще активировать экзит записи данных.

PS: Данная статья не о том как что-то поломать в системе, а о том, как нужно читать ноту 44410 🙂

Комментарий от Олег Точенюк 04 октября 2012, 16:52

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

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

Что касается нормализации, то этот вопрос оставил за бортом не я, а компания SAP, причем году так. в девяностых а то и ранее. Кстати, а чем два поля CHAR повлияли на нормализацию? Приведите какое правило нормализации я нарушил этими полями? Я чего-то знаю три и считаю что их достаточно, хотя там дальше теоретики намутили еще вроде как три, но они прошли мимо меня, но было бы интересно.

По поводу классификации, это очень тормозной путь, если данные требуется использовать в отчетах, причем массово. Кстати не к ночи упомянутый BW читать данные классификации в экстраторе будет значительно дольше, чем через расширение MARA.

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

Читайте также:  Pxe boot to lan что это в биосе lenovo

Комментарий от Олег Точенюк 05 октября 2012, 09:26

Источник

Создание пользовательских полей в инфо-наборе

Зачастую нам не хватает стандартных полей, которые представлены в системе для запросов и оперативных запросов. Для этого существует два пути решения. Первый это создание полей в инфо-наборе (транзакция SQ02). В откры-том инфо-наборе слева выбираем инфо-тип, нажимаем правую клавишу мыши и «Дополнит. информация к узлу». Открывается окно с дополнительными полями. Создаем по кнопке новое поле, прописываем его тип. Далее встаем на него мышкой, нажимаем на кнопку «Кодир. для поля» и открывается редактор. Вот здесь можно писать абап код для вычисления данного поля. Принцип работы аналогичен, как будто вы в цикле (loop) обрабатываете запись из структуры.

Предыдущий вариант хорош, когда нужно для конкретного инфо-набора прописать пару уникальных полей. Если же нужно сделать поле, которое будет использоваться и в других инфо-наборах, то придется немного по-порграммировать. Для этого для нужного нам ИТ открываем структуру CI_P****_AF в SE11, где **** — номер инфо-типа, к которому будем добавлять поле. В структуру добавляем свое поле. Теперь нужно сообщить информационной системе, что это поле как-то должно вычисляться. Открываем таблицу T770AF и по аналогии со стандартными полями для нашей структуры прописываем функциональный модуль, который будет вести расчет. За образец берем ФМ RPAQ_GET_AF_NNNN, копируем в свой ФМ и пишем в него логику вычисления поля. Теперь осталось открыть нужный инфо-набор, в меню «Инфо-набор – Дополнительные функции» выбираем «Актуализировать дополнительные HR поля». Система прочитает настроечную таблицу и добавит наши поля в раздел «Дополнительные поля» соответствующего инфо-типа. Остается перенести их в нужную группу полей, сгенерировать инфо-набор и пользоваться своими трудами.

Похожие заметки:

Добавить комментарий

Для отправки комментария вам необходимо авторизоваться.

Источник

Как добавить поле в таблицу sap

Часовой пояс: UTC + 3 часа

Правила форума

Добавить поле в таблицу

Старший специалист

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 344
Пол: Мужской

Нужно добавить туда поле. Которое жить будет только во внутренней таблице временно.

Почетный гуру

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1005
Откуда: 37 МИКРОРАЙОН
Пол: Мужской

Нужно добавить туда поле. Которое жить будет только во внутренней таблице временно.

DATA: BEGIN wa_table.
INCLUDE STRUCTURE TYPE zMyTable.
DATA: my_field type coep-wogbtr001
, END OF wa_table.

DATA: Table like table of wa_table.

Модератор

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва Красноярск
Пол: Мужской

TYPES:
BEGIN OF abap_compdescr,
length TYPE i,
decimals TYPE i,
type_kind TYPE char1,
name TYPE char30,
END OF abap_compdescr.

FIELD-SYMBOLS: TYPE abap_compdescr,
TYPE ANY TABLE.

DATA: l_line TYPE REF TO cl_abap_structdescr,
it_struct TYPE TABLE OF abap_compdescr,
wa_fcat TYPE lvc_s_fcat,
it_fcat TYPE lvc_t_fcat,
table TYPE REF TO data.

//тут заполняешь it_fcat данными из

//тут добавляешь в it_fcat свое поле

CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat
IMPORTING
ep_table = table.

Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988

CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fcat
IMPORTING
ep_table = table.

Старший специалист

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 344
Пол: Мужской

пытаюсь так сделать. но его код некомпилится напрямую.
проблемма с Inclede structurе. Что неправильно написано

идею я понял, сейчас пытаюсь найти как правильно написать.

разобрался вообщем. Спсибо.

Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988

пытаюсь так сделать. но его код некомпилится напрямую.
.

Там не код, там идея кода для доработки напильником

в работоспособном виде это может выглядеть так

DATA: BEGIN OF wa_table.
INCLUDE TYPE zmytable AS zmytable.
DATA: my_field TYPE coep-wogbtr
, END OF wa_table.

DATA: table LIKE TABLE OF wa_table.

Председатель

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер

Старший специалист

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 344
Пол: Мужской

ну так я ж и написал идею я понял..

доработал и все заработало. Спасибо.

Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988

Председатель

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер

Часовой пояс: UTC + 3 часа

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…

Источник

Развивающий портал