Pull to refresh

Загрузка исторических данных в SAP с помощью LSMW (Legacy System Migration Workbench)

Reading time 6 min
Views 39K
При внедрении ERP-системы SAP одним из наиважнейших вопросов является вопрос загрузки данных исторических систем (тех, что функционировали на предприятии до внедрения SAP) в новую ERP. Для этого существует мощнейший инструмент внутри SAP — Система Переноса данных из Исторических Систем (LSMW). За 8 лет работы с SAP я накоил солидный опыт работы с этой системой, а, поскольку для LSMW нет легкодоступных для понимания мануалов (тем более на русском) и ко мне постоянно обращаются за советами коллеги по цеху, найдя меня на российском форуме САП, смею полагать, что сия статья окажется весьма познавательна как стажёрам, так и опытным консультантам, пока что не имеющих опыта работы с LSWM.

Запускаем транзакцию LSMW и, о чудо, нас уже приветствуют: Welcome to the Legacy System Migration Workbench!

На начальном экране мы видим следующую картинку

image

Перво-наперво, нужно создать проект (Project). Проектом может быть как, например, верхнеуровневый «проект» (например, с названием «PM» для работы с ним всей группы ТОРО (Техническое обслуживание и ремонт оборудования)), так и более локализованный, например, проект загрузки в систему Технических Объектов (назовём его «Tech Objects»). Я рекомендую не плодить сущности и, вспомнив заповедь дядюшки Окама, в качестве проекта заводить как-раз таки верхний уровень. Это очень удобно всем проектным группам — в LSMW видеть в качестве проекта свои модули.

Становимся курсором в поле Project и жмём белый листок. Создаём проект. В случае с моим примером это будет «PM».

Затем создаём подпроект (Subproject). Это тоже всего лишь структуризация вашего проекта, поэтому в зависимости от принятого решения о выборе проекта соответствующим образом создаём и подпроект. В случае моего примера, подпроектом будет как-раз «Tech Objects».

Ну и объект (Object). Тут уже детализируем, что именно мы собираемся грузить в систему/изменять с помощью LSMW. Например, мне требуется загрузить данные Единиц Оборудования. В таком случае, я создаю объект “PoE Upload”

image

Создали проект, подпроект и объект, запускаем.

Видим экран с двадцатью шагами
(в пункте меню Edit включаем Numering On для того, чтобы напротив каждого шага отображался порядковый номер)

image

1) Шаг первый — Maintain object attributes

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

A) Стандартный Объект (Standart Batch/Direct Input)

В LSMW предусмотрен перечень предопределённых объектов, среди оторых с большой долей вероятности есть тот, который нужен вам.

В моём случае это Единица оборудования

image

В поле Method выбираем 0001 — Создание ПакВв (то есть «пакетный ввод»).

image

Сохраняем, выходим.

B) Batch Input Recording

Если вам не достаточно стандартного объекта, либо для ваших нужд стандартного объекта нет в принципе, в этом случае вам необходимо записать «макрос» (так я его называю). То есть вы вызовете транзацкию, данные которой вам и необходимо загрузить, и записываете последовательность ваших действий, а потом, на последующих шагах, подстать записанному «макросу» вы создадите структуру для файла-шаблона загрузки.

Метод Batch Input Recording я распишу при наличии времени в отдельном топике (это большая отдельная тема), если топик найдёт своего читателя.

2) Шаг второй — Maintain source structures

На этом шаге нам необходимо определить структуру наших загружаемых данных. В случае с Единицами Оборудования структура будет одноуровневой («плоской»), без подчинённых подструктур. Последние бы пригодились нам, скажем, в случае загрузки Заказов ТОРО, когда для одного заголовка Заказа может быть N операций, к каждй из которых может быть M компонентов. А у единицы оборудования есть номер и набор данных, без вложенности.

Если структура плоская, то этот шаг — формальность. Создаём структуру, например, «Main». Сохраняем, выходим.

image

3) Шаг третий — Maintain source fields

На шаге 3 определяем поля, которые мы планируем грузить.Позиционируем курсор на нашу структуру Main, жмём значок «белый лист» и создаём поля.

Поля — это те поля, которые вы собираетесь прогружать для вашего объекта. В моём случае я хочу, скажем, для Единицы Оборудования грузить:

— номер ЕО
— название ЕО
— вид объекта

Это, естественно, пример. Вы можете грузить любые поля. Я же для краткости ограничусь лишь этими тремя.

Чтобы в дальнейшем, на шаге №5 вам не заморачиваться с сопоставлением вами придуманных названий полей с ситемными полями, да и просто для чёткости, предлагаю именовать поля также, как они именуются в системе. Чтобы узнать, как называется то или иное поле, какого они типа и какой разрядности, становимся курсором на это поле и жмём «F1».

image

В появившемся окне проваливаемся по двойному клику (drill down) в запись «Имя поля»

image

Среди полей находим интересующее нас (в данном случае «Номер единицы оборудования» — это поле EQNR), его тип (CHAR) и длину (18 символов). И, соответственно, эти данные прописываем в создаваемое на третьем шаге поле

image
image

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

4) Шаг четвёртый — Maintain structure relations

На этом шаге нам необходимо связать наши структуры с стандартными. В случаес моей простой, плоской структурой всё очень просто: позиционируем курсор на IBIP: Удиница Оборудования, жмём белый листочек. Единственная наша структура Main автоматом подвязывается к стандартной структуре ЕО. Сохраняем, выходим.

image

5) Шаг пятый — Maintain field mapping and conversion rules

Здесь нам требуется связать нами созданные поля, предполагаемые к загрузке, с соответствующими полями ЕО, известными системе

image

Вот тут-то нам и пригодится тто, что на шаге №3 мы обзывали поля также, как их знает система. Теперь в пункте меню Extras жмякаем на Auto-Field Mapping, после чего система автоматом смэппливает поля. Во всех далее появляющихся окошках необходимо нажимать «ОК» и, если у вас нет ошибок в наименовании вами созданных полей, то система автоматом всё смэппит.

image

После того, как все поля смэпплены, сохраняем и выходим.

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)

image

Вариант «а» — это выбор файла-шаблона, располагающего непосредственно на Вашем компьютере, а «б» — на сервере SAP. Со вторым вариантом как-то не сталкивался. Всё время для удобства использую файл, находящийся непосредственно в моей файловой системе. Позиционируемся на Legacy Data (на красную область, жмём листочек «Создать»)

Собственно, создаём текстовый файл на жёстком диске. Вспоминаем, что груим мы три поля:

Номер ЕО
Название ЕО
Вид ЕО

Можно в файле-шаблоне первой строкой через TAB указать системные названия полей для наглядности. Во второй и последующих строчках также через TAB пишем значения для загрузки

image

На появившемся экране выбираем месторасположения файла-шаблона на диске Вашего компьютера, устанавливаем радиокнопку “Tabulator” на подэкране Delimiter (разделитель), ставим галку на пункте “Field Names at Start of File” (указываем, что первая строка файла — это технические имена полей).
Если у Вас последовательность полей в файле-шаблоне не соответствует соответствующей последовательности шага три — Maintain source fields, то нужно снять галку с пункта “Fields Order Matches Source Structure Definition”. Остальное на экране не трогаем, закрываем и выходим.

image

8) Шаг восьмой — Assign files

Поскольку у нас плоская структура с одним входящим файлом-шаблоном, открываем этот пункт на редактирование, сохраняем и выходим. Единственный файл наш привязывается к единственной структуре. Формальность.

9) Шаг девятый – Read Data

На этом шаге мы читаем наш файл. Выполняем.

10) Шаг десятый – Display read data

Здесь смотрим на результаты чтения на шаге 10. Если всё нормально, то в правильные поля ложатся правильные данные

image

11) Шаг одиннадцатый – Convert data

Конвертируем данные во внутренний формат системы

12) Шаг двенадцатый – Display converted data

Собственно, смотрим результаты конвертации

image

13) Шаг тринадцатый – Create batch input session

Запускаем, галочки выставляем как на принтскрине ниже и разрешаем SAP GUI создавать файл ошибок на локальном жд

image

14) Шаг четырнадцатый – Run Batch Input session

Запускаем, видим в списке заданий наше. Выделяем строку, жмём «выполнить», открывается окошко. В нём можно выбрать «Выполнить видимо» (тогда каждое заполняемой поле по каждой из N строк из файла-шаблона будет заполняться видимо для Вас и требовать для подтверждения каждой записи нажатия Enter; обычно это используется для теста написанного нами пакетника на одной строчке), либо «Фоновый режим». В фоновом режиме выполнение пакетника будет происходить незримо, а о возникших ошибках или их отсутствии можно будет осведомиться в log-файле.

image

Этот пример я создавал без предварительной репетиции. В частности, на видимом прогоне я понял, что не указал на третьем шаге обязательное при создании ЕО поле «Тип ЕО», а также, поскольку нумерация для ЕО соотв. типа — внутренняя (то есть нарастающий счётчик), то не нужно было указывать в качестве загружаемого поля поле EQUNR. После исправления этих двух ляпов пакетник успешно отработал и автоматизированно создал ЕО. Таким образм и происходит массовая загрузка исторических данных в SAP. По крайней мере, это один из наиудобнейших и простых способов. Удачи в освоении LSMW!
Tags:
Hubs:
+12
Comments 4
Comments Comments 4

Articles