При внедрении ERP-системы SAP одним из наиважнейших вопросов является вопрос загрузки данных исторических систем (тех, что функционировали на предприятии до внедрения SAP) в новую ERP. Для этого существует мощнейший инструмент внутри SAP — Система Переноса данных из Исторических Систем (LSMW). За 8 лет работы с SAP я накоил солидный опыт работы с этой системой, а, поскольку для LSMW нет легкодоступных для понимания мануалов (тем более на русском) и ко мне постоянно обращаются за советами коллеги по цеху, найдя меня на российском форуме САП, смею полагать, что сия статья окажется весьма познавательна как стажёрам, так и опытным консультантам, пока что не имеющих опыта работы с LSWM.
Запускаем транзакцию LSMW и, о чудо, нас уже приветствуют: Welcome to the Legacy System Migration Workbench!
На начальном экране мы видим следующую картинку
Перво-наперво, нужно создать проект (Project). Проектом может быть как, например, верхнеуровневый «проект» (например, с названием «PM» для работы с ним всей группы ТОРО (Техническое обслуживание и ремонт оборудования)), так и более локализованный, например, проект загрузки в систему Технических Объектов (назовём его «Tech Objects»). Я рекомендую не плодить сущности и, вспомнив заповедь дядюшки Окама, в качестве проекта заводить как-раз таки верхний уровень. Это очень удобно всем проектным группам — в LSMW видеть в качестве проекта свои модули.
Становимся курсором в поле Project и жмём белый листок. Создаём проект. В случае с моим примером это будет «PM».
Затем создаём подпроект (Subproject). Это тоже всего лишь структуризация вашего проекта, поэтому в зависимости от принятого решения о выборе проекта соответствующим образом создаём и подпроект. В случае моего примера, подпроектом будет как-раз «Tech Objects».
Ну и объект (Object). Тут уже детализируем, что именно мы собираемся грузить в систему/изменять с помощью LSMW. Например, мне требуется загрузить данные Единиц Оборудования. В таком случае, я создаю объект “PoE Upload”
Создали проект, подпроект и объект, запускаем.
Видим экран с двадцатью шагами
(в пункте меню Edit включаем Numering On для того, чтобы напротив каждого шага отображался порядковый номер)
1) Шаг первый — Maintain object attributes
На этом шаге нам необходимо указать, каким образом мы будем производить загрузку данных. Я остановлюсь на двух наиболее часто используемых мною и популярных в принципе методах.
A) Стандартный Объект (Standart Batch/Direct Input)
В LSMW предусмотрен перечень предопределённых объектов, среди оторых с большой долей вероятности есть тот, который нужен вам.
В моём случае это Единица оборудования
В поле Method выбираем 0001 — Создание ПакВв (то есть «пакетный ввод»).
Сохраняем, выходим.
B) Batch Input Recording
Если вам не достаточно стандартного объекта, либо для ваших нужд стандартного объекта нет в принципе, в этом случае вам необходимо записать «макрос» (так я его называю). То есть вы вызовете транзацкию, данные которой вам и необходимо загрузить, и записываете последовательность ваших действий, а потом, на последующих шагах, подстать записанному «макросу» вы создадите структуру для файла-шаблона загрузки.
Метод Batch Input Recording я распишу при наличии времени в отдельном топике (это большая отдельная тема), если топик найдёт своего читателя.
2) Шаг второй — Maintain source structures
На этом шаге нам необходимо определить структуру наших загружаемых данных. В случае с Единицами Оборудования структура будет одноуровневой («плоской»), без подчинённых подструктур. Последние бы пригодились нам, скажем, в случае загрузки Заказов ТОРО, когда для одного заголовка Заказа может быть N операций, к каждй из которых может быть M компонентов. А у единицы оборудования есть номер и набор данных, без вложенности.
Если структура плоская, то этот шаг — формальность. Создаём структуру, например, «Main». Сохраняем, выходим.
3) Шаг третий — Maintain source fields
На шаге 3 определяем поля, которые мы планируем грузить.Позиционируем курсор на нашу структуру Main, жмём значок «белый лист» и создаём поля.
Поля — это те поля, которые вы собираетесь прогружать для вашего объекта. В моём случае я хочу, скажем, для Единицы Оборудования грузить:
— номер ЕО
— название ЕО
— вид объекта
Это, естественно, пример. Вы можете грузить любые поля. Я же для краткости ограничусь лишь этими тремя.
Чтобы в дальнейшем, на шаге №5 вам не заморачиваться с сопоставлением вами придуманных названий полей с ситемными полями, да и просто для чёткости, предлагаю именовать поля также, как они именуются в системе. Чтобы узнать, как называется то или иное поле, какого они типа и какой разрядности, становимся курсором на это поле и жмём «F1».
В появившемся окне проваливаемся по двойному клику (drill down) в запись «Имя поля»
Среди полей находим интересующее нас (в данном случае «Номер единицы оборудования» — это поле EQNR), его тип (CHAR) и длину (18 символов). И, соответственно, эти данные прописываем в создаваемое на третьем шаге поле
Создали набор интересующих нас в качестве загружаемых полей, сохраняем, выходим.
4) Шаг четвёртый — Maintain structure relations
На этом шаге нам необходимо связать наши структуры с стандартными. В случаес моей простой, плоской структурой всё очень просто: позиционируем курсор на IBIP: Удиница Оборудования, жмём белый листочек. Единственная наша структура Main автоматом подвязывается к стандартной структуре ЕО. Сохраняем, выходим.
5) Шаг пятый — Maintain field mapping and conversion rules
Здесь нам требуется связать нами созданные поля, предполагаемые к загрузке, с соответствующими полями ЕО, известными системе
Вот тут-то нам и пригодится тто, что на шаге №3 мы обзывали поля также, как их знает система. Теперь в пункте меню Extras жмякаем на Auto-Field Mapping, после чего система автоматом смэппливает поля. Во всех далее появляющихся окошках необходимо нажимать «ОК» и, если у вас нет ошибок в наименовании вами созданных полей, то система автоматом всё смэппит.
После того, как все поля смэпплены, сохраняем и выходим.
6) Шаг шестой — Maintain fixed values, translations, user-defined routines
Пропускаем, он нам в данном случае не нужен.
7) Шаг седьмой — Specify files
На этом шаге нам необходимо указать файла-шаблона с данными к загрузке.
Тут два варианта:
а) Legacy Data On the PC (Frontend)
б) Legacy Data On the R/3 server (application server)
Вариант «а» — это выбор файла-шаблона, располагающего непосредственно на Вашем компьютере, а «б» — на сервере SAP. Со вторым вариантом как-то не сталкивался. Всё время для удобства использую файл, находящийся непосредственно в моей файловой системе. Позиционируемся на Legacy Data (на красную область, жмём листочек «Создать»)
Собственно, создаём текстовый файл на жёстком диске. Вспоминаем, что груим мы три поля:
Номер ЕО
Название ЕО
Вид ЕО
Можно в файле-шаблоне первой строкой через TAB указать системные названия полей для наглядности. Во второй и последующих строчках также через TAB пишем значения для загрузки
На появившемся экране выбираем месторасположения файла-шаблона на диске Вашего компьютера, устанавливаем радиокнопку “Tabulator” на подэкране Delimiter (разделитель), ставим галку на пункте “Field Names at Start of File” (указываем, что первая строка файла — это технические имена полей).
Если у Вас последовательность полей в файле-шаблоне не соответствует соответствующей последовательности шага три — Maintain source fields, то нужно снять галку с пункта “Fields Order Matches Source Structure Definition”. Остальное на экране не трогаем, закрываем и выходим.
8) Шаг восьмой — Assign files
Поскольку у нас плоская структура с одним входящим файлом-шаблоном, открываем этот пункт на редактирование, сохраняем и выходим. Единственный файл наш привязывается к единственной структуре. Формальность.
9) Шаг девятый – Read Data
На этом шаге мы читаем наш файл. Выполняем.
10) Шаг десятый – Display read data
Здесь смотрим на результаты чтения на шаге 10. Если всё нормально, то в правильные поля ложатся правильные данные
11) Шаг одиннадцатый – Convert data
Конвертируем данные во внутренний формат системы
12) Шаг двенадцатый – Display converted data
Собственно, смотрим результаты конвертации
13) Шаг тринадцатый – Create batch input session
Запускаем, галочки выставляем как на принтскрине ниже и разрешаем SAP GUI создавать файл ошибок на локальном жд
14) Шаг четырнадцатый – Run Batch Input session
Запускаем, видим в списке заданий наше. Выделяем строку, жмём «выполнить», открывается окошко. В нём можно выбрать «Выполнить видимо» (тогда каждое заполняемой поле по каждой из N строк из файла-шаблона будет заполняться видимо для Вас и требовать для подтверждения каждой записи нажатия Enter; обычно это используется для теста написанного нами пакетника на одной строчке), либо «Фоновый режим». В фоновом режиме выполнение пакетника будет происходить незримо, а о возникших ошибках или их отсутствии можно будет осведомиться в log-файле.
Этот пример я создавал без предварительной репетиции. В частности, на видимом прогоне я понял, что не указал на третьем шаге обязательное при создании ЕО поле «Тип ЕО», а также, поскольку нумерация для ЕО соотв. типа — внутренняя (то есть нарастающий счётчик), то не нужно было указывать в качестве загружаемого поля поле EQUNR. После исправления этих двух ляпов пакетник успешно отработал и автоматизированно создал ЕО. Таким образм и происходит массовая загрузка исторических данных в SAP. По крайней мере, это один из наиудобнейших и простых способов. Удачи в освоении LSMW!
Автор: AntonVolkov