Теперь нужно добавить имена таблиц и полей, которые можно будет изменять в транзак-ции MASS. В общем виде можно указать все таблицы, в которых хранятся данные техни-ческих места, например это таблицы IFLOT, ILOA и другие, а затем перечислить все по-ля этих таблиц. Однако нужно понимать, что фактически система не даст изменить все поля технического места. Вообще-то зайдите в транзакцию изменения технических мест IL02 и вы определите какие поля можно менять, а какие закрыты от изменений, например код технического места и код балансовой единицы, изменить нельзя, поэтому возьмем од-ну таблицу 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-05.png. Кроме полей, предназначенных для изменения в транзакции MASS, в ракурс обязательно требуется включить так же ключевые поля таблицы IFLOT.
Теперь зададим этот ракурс в таблице MASSTAB, через транзакцию ведения SM30. Тип объекта укажем BUS0010, который мы выбрали ранее. В поле имя таблицы зададим имя ракурса YTSH_IFLOTSTRUCT. Далее в поле «Число», укажем например значение 10, данное поле служит для упорядочивания списка таблиц, если например таблиц/сегментов для обновления больше одной, что в нашем примере не актуально, у нас одна таблица. В поле «Таб БД», укажем имя таблицы базы данных, из которой фактически будет идти вы-борка. Для чего требуется указать имя таблицы в колонке «Таб. БД»? Суть заключается в следующем. В поле «Таблица» задаем имя структуры содержащей только поля, разрешен-ные для изменения, которые и предложит транзакция MASS для выбора пользователю. Однако часто ситуация заключается в том, что например мы разрешаем изменять поле се-рийного номера, но вот критерии выбора записей для обработки, в которых будет изме-няться поле серийный номера, мы хотим например выбирать по полю «вид технического места», при этом самое поле вида технического места, давать изменять не требуется. Вот для этого мы и задали имя основной таблицы базы данных, как IFLOT, что служит для транзакции MASS командой предложить пользователю все поля этой таблицы на селек-ционном экране выбора записей, которые предполагается изменить. Если выборка данных должна выполняться как-то особенно, то в поле «ФМ выбора», нужно задать имя функ-ционального модуля выполняющего выборку данных. В общем случае мне было доста-точно стандартных функций выбора данных. И последнее поле «Без нов. сегментов», в данном поле поставлена галка, суть данного чек-бокса в том, что транзакция MASS по-зволяет не только изменять данные, но и массово создавать новые данные. В данном при-мере создание новых записей технических мест рассматриваться не будет, кому нужно разберетесь, а в данном момент мы просто отключаем закладку создания новых техниче-ских мест, так как не будем использовать эту функциональность. Пример создания записи, рисунок 6: MASS-06.png.
Теперь если перейти в транзакцию MASS, то картина будет более интересной, рисунок 7, MASS-07.png, как видим теперь транзакция MASS знает нашу структуру и поля, которые мы хотим разрешить изменять. Кроме этого программа уже умеет искать поля, используя кнопки поиска, справа от списка полей. Поиск может идти как по названию, так и техническому имени поля. Конечно, в данном случае это не очень важно, так как набор полей для изменения ограничен, однако если полей в списке много, то такая возможность не является лишней.
Фактически в данный момент мы должны выбрать нашу таблицу, она одна в списке и вы-брать поля которые хотим изменить, можно выбрать как весь набор полей, так и отдель-ные поля, например пусть это будет поле «Планирующий завод» и «Дата покупки». Для этого выделим эти поля в таблице, нажав кнопки выбора слева от каждого поля, после че-го можно нажать кнопку выполнить вверху экрана, рисунок 08: MASS-08.png.
Транзакция перейдет к экрану выбора технических мест, которые мы хотим изменить. Фактически это уже описание работы с транзакцией MASS. По умолчанию выбор предпо-лагается по ключевым полям, в данном случае это поле кодов технических мест, однако транзакция MASS, разрешает сделать выбор данных, по любым полям которые есть в таб-лице IFLOT, так как мы задали именно эту таблицу в настройке выше. Добавил на экран выбора поля планирующего завода и типа технического места, , рисунок 09: MASS-09.png, затем указал выбрать все технические места, у которых не задан планирующий за-вод после чего нажал F8 – выполнить выбор данных. Система сообщила, сколько записей попадают под указанные критерии и предложила или перейти к обработке изменений в диалоге или же выполнить фоновое изменение данных, используя создание варианта вы-полнения. В данный момент вы будем выполнять все операции в диалоговом режиме, по-этому выберем кнопку, просмотреть все записи. У меня в системе, например, было выбра-но 127 записей без присвоенного планирующего завода.
Описание работы с транзакцией MASS выходит за рамки данной статьи, поэтому, что и как можно задавать на экране ввода значений определяйте экспериментальным путем или прочитайте статью, на которую была дана ссылка в начале или же возможно, что то най-дется в документации SAP. В примере я задал установить завод 1000, а для формирования серийного номера изготовителя задал кодировку на языке ABAP, т.е. фактически там идет генерация GUID-а, после чего нажал кнопку – копирования значений в поля и система показала какими значениями, будет выполнено заполнение полей, рисунок 10: MASS-10.png.
Как видим для поля серийного номера изготовителя были сгенерированы уникальные се-рийные номера. Пример подпрограммы кодировки для генерации внешних серийных но-меров для транзакции MASS следующий (система сама генерируют заголовок подпро-граммы):
* X is the value you must return
form GET_NEW_YTSH_IFLOTSTRUCT_SERGE
using segment structure YTSH_IFLOTSTRUCT
changing X.
*-- Добавленный код генерации серийного номера --
DATA: l_guid TYPE SYSUUID_C.
CALL FUNCTION 'ICF_CREATE_GUID'
IMPORTING
ID = l_guid.
x = l_guid.
*-----------------------------------------------
endform.
Для обновления данных следует нажать кнопку сохранения результата. Однако пока еще не готова реализация собственно самого функционального модуля Y_TSH_MASS_CHANGE_IFLOT, который выполнит обновление данных на основании заполненных пользователями критериям. Фактически, не более чем за 15-20 минут у нас есть готовая диалоговая транзакция обрабатывающая ввод пользователя, при этом очень гибкий ввод и теперь можно перейти собственно к реализации функции обновления дан-ных.