С базовыми вещами в рамках миграции данных мы все умеем работать хорошо. Мы знаем как записывать проекты LSMW, мы умеем использовать разные способы загрузки (BAPI, BUS, IDOC, Batch Input) — мы с вами большие молодцы. Сегодня мы чуть внимательнее посмотрим на возможности LSMW для управления данными во время миграции. Правила преобразования в LSMW нужны как раз для изменения данных из загружаемых файлов в целевые поля системы SAP.
Fixed Values или постоянные значения
Это правило позволяет заранее определить постоянные значения для некоторых полей, которые мы можем использовать для различных полей. Простейший пример это загрузка видов оплаты в инфотип 0015. При загрузке мы видим два поля, которые содержат одну и туже константу:
В разделе сопоставления полей исходной структуры к экранной мы можем руками прописать вид оплаты как константа, можем указать загрузку этого поля из файла, а можем сослаться на правило преобразование Fixed Value. ЕСли нам нужно поменять код вида оплаты, то мы меняем его в правиле, а оно автоматом меняется во всем проекте. Это особенно удобно при загрузке иерархических структур, где некоторые поля могут повторяться.
Translations или правила преобразования
По большому счету это и есть основной блок правил преобразования в LSMW, Здесь существенно больше возможностей для конвертации данных на лету.
Для любопытных, что делает каждый вид преобразования, можно посмотреть в исходном коде /SAPDMC/SAP_LSMW_CONV_FORMS
в процедуре FORM lsmw_translate_execute
Если вы обратите внимание, то у нас есть три рамки: Variant, First Alternative, Second Alternative. При преобразовании уже во время работы программы система сначала запускает вариант Variant. Если по нему не удалось выполнить преобразование (значений нет таких на вкладках 1:1 Translation Value и Interval Translation Value), то запускается преобразование по First Alternative. Если и оно не случилось, то Second Alternative). Своего рода дерево принятия решения.
Первый уровень (рамка Variant) позволяет произвести два вида изменений: 1 к 1 либо интервал. Значения мы указываем на соответствующих вкладках на этом же экране. Указали значение, рядом поставили крыжик ОК.
Если нам нужно сделать интервал, то делаем так.
Размерность полей определяется параметрами на первой вкладке Source Field, Target Field.
Если система не нашла нужного нам значения, то можем вывести константу, например.
Либо аналогично выбираем User-Defined Routine и указываем внизу процедуру.
Оставшиеся значения:
Transfer (MOVE) — скопировать как есть.
Initial Value — установить значение по-умолчанию для данного типа поля.
No Action — ничего не делать
User defined routines или пользовательские процедуры (на ABAP)
Здесь все просто. Это тот кусок ABAP кода, который будет запускаться каждый раз, подавая на вход данные исходного поля из файла, а на выходе будет то, что вы в процедуре напрограммируете. Тут полная свобода действий.
Чтобы нам присвоить преоразование полей в LSMW какому-то полю, нужно в разделе Define Field Mapping and Conversion Rules сначала присвоить исходное поле целевому (нажать на кнопочку Source Field), а затем на этом же поле нажать кнопочку Translation.
Используйте правила преобразования в системе, вместо формул и ручных операций в MS Excel, это правильнее. И грузите апельсины бочками, дамы и господа.