Загружаем данные автоматизированно по RFC вызову

Один из подписчиков моего Youtube канала https://youtube.com/virvit попросил рассказать, как можно удаленно вызывать LSMW по RFC, чтобы осуществлять загрузку данных в систему SAP. Это оказалось элементарно, рассказываю.

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

Благодаря этой галочке у нас в меню LSMW в самом низу появится пункт: Master Program for Periodic Data Transfer.

Далее мы записываем LSMW как обычно. Единственное исключение, что файлы должны загружаться с сервера. Я разместил файлик для загрузки на сервере.

Запускаем самый последний шаг, где заполняем параметры нашего проекта. Хотим ли мы удалять файлы, что-то делать с ними, искать по маске. Сохраняем все это в вариант.

Осталось самое малое. В SM36 нужно запланировать задание, которое будет запускаться по событию. То есть мы планируем программу /SAPDMC/SAP_LSMW_INTERFACE с только что созданным для нее вариантом.

Свое событие можно создать в транзакции SM62 на последней вкладке.

Вот и все. Теперь можно поджечь событие извне по RFC, а можно потренироваться “у себя дома” в транзакции SE37.

Система вызовет событие, событие вызовет запланированную программу, программа запустит LSMW проект. LSMW проект прочитает файл, сконвертирует, создаст пакетник в SM35 И запустит его на выполнение. Или может IDOC создать. Или BAPI. Что хотите, одним словом. После обработки файла он будет переименован, чтобы не загружаться повторно.

Милости просим, кустарная автоматизация сельскохозяйственных процессов на коленке с помощью костылей и подпорок. Для взрослых решений мы используем SAP ALE и учим его на нашем с Романом курсе https://saphr.ru/2018/10/10/online-kurs-po-sap-ale/


Как загружать табличные инфотипы в LSMW

Да просто… через задницу. Существует два вида табличных инфотипов в системе: одностраничные и многостраничные. Как загружать табличные инфотипы? Я до сегодняшнего дня умел грузить одностраничные инфотипы. Сегодня я научился многостраничные заливать бочками.

Да, сразу оговорюсь, что речь идет о загрузке без единой строчки ABAP. С АБАПом и дурак сможет. Наиболее типичные инфотипы это 8, 293, 294, 28. Одностраничный инфотип, это который содержит таблицу и нам не нужно ее прокручивать вниз. Многостраничный инфотип содержит ту же таблицу, но в ней столько данных, что приходится нажимать скроллинг вниз (прокрутку, кнопку PageDn).

Для загрузки одностраничного инфотипа хитрость простая. При записи LSMW нужно в каждое поле таблицы что-то внести, чтобы LSMW создала в Recording поля вида Q0293-BETRG(01), Q0293-BETRG(02) и так далее. То есть, мы можем обратиться к каждому полю, видимому на экране через его порядковый номер сверху. 01, 02, 03 и так далее. Для каждого такого поля можно создать свою переменную в том же Recording.

Если мы записываем многостраничный инфотип, когда нам нужно пролистать таблицу вниз, то дела становятся интереснее. Для этого нам нужно специально сказать при записи, что мы хотим сделать скроллинг вниз. Нажатие на кнопку PageDn или мышкой на стрелочку внизу не поможет. Для этого мы окне команд пишем “P+“. Этот волшебный код пролистнет таблицу на одну страницу вниз. И теперь самое важное! Нумерация строк опять начинается с 01, 02 и так далее.

Так, для загрузки 15 значений в ИТ0293 нужно записать на первой странице 8 значений напротив каждой строчки. Затем нажать P+ в окне транзакций. И снова записать 7 оставшихся значений.

Читать далее


Как быстро изменить содержимое поля инфотипа

Есть очень простой и быстрый способ изменить содержимое одного или нескольких полей. SE16N… Шучу.

Создаем LSMW, записываем изменение инфотипа следующим образом. В PA30/PP02 указываем точные даты начала и окончания (лучше конкретный день), что позволит нам выбрать именно ту запись, которую мы хотим обновить. При записи нажимаем кнопку копирования, а затем сохраняем. То есть мы копируем запись поверх себя.

Теперь, твик, чтобы не выгружать все поля, а изменить только нужное нам. На экране присвоения полей нашей записи нужно с помощью кнопочки Screen Field удалить все поля, которые мы не хотим изменить. В идеале должны остаться только поля, которые мы меняем. Тогда при выполнении пакетного ввода система поменяет только наше поле, а остальные останутся без изменений, так как мы записывали “Копирование”, а не “Создание”.

На обновление 1 поля для 6к сотрудников только что ушло 10 минут (с подготовкой файла и записью LSMW).

LSMS Delete Screen Field

LSMS Delete Screen Field


Миграция данных с помощью SAP ALE

Здравствуйте все.
Традиционно миграцию данных выполняют классическим способом – файлики, LSMW, загрузка. Вариант классический, опробованный, рабочий. Чтобы не было скучно, мы решили пойти другим путем и провести миграцию данных с помощью SAP ALE. У подхода оказались интересные нюансы и преимущества перед традиционной миграцией. Стоит сразу же отметить, что слабонервным и начинающим подход противопоказан ввиду высокого порога вхождения в технологию.
Чтобы перенести данные с помощью ALE нам нужно настроить модель распределения, где указать откуда, куда и какие данные мы собираемся переносить. Это все делается в BD64, где сложностей не возникает.
Нам нужно использовать стандартный IDOC HRMD_A, если этих данных достаточно, либо расширить его своими инфотипами. Первые расширения IDOC обычно идут сложно, зато потом одно удовольствие клепать то да се. Для расширения концептуально мы создаем новые сегменты и прописываем их в наше расширение (WE30, WE31). Не забываем указать эти сегменты в T777D для каждого инфотипа.
Если нужно провести какие-то преобразования, то либо в правилах в SALE, либо в ФМ CONVERT*TO*, либо в CMOD/BADi делаем преобразования.
Делаем файловый порт источником данных и грузим апельсины бочками. Если нужно преобразования использовать для разных форматов файла, то идем в LSMW для обработки IDOC.
Звучит сложно, но только в первый раз. Взамен мы получаем отдельные плюшки в сравнении с LSMW.
  • Возможность на уровне системы управлять очередями и последовательностью загрузки данных
  • Возможность управлять производительностью. Да и сами IDOC грузятся намного быстрее, чем любая LSMW.
  • Легкий поиск ошибок, чего не скажешь про журналы LSMW.
  • Возможность поменять настройку и заново прогрузить тот же объем, что невозможно в LSMW (в большинстве случаев).
  • Возможность одним разом загружать данные в множество систем просто перенаправляя потоки данных в BD64.
  • Нет проблем с перезагрузкой данных, когда в LSMW нужно сначала удалять загруженные записи, а потом записать новые.
  • В случае миграции данных из “цивилизованной” системы, где есть возможности для интеграции, такая миграция может проходить практически в автоматизированном режиме (через файлы, веб-сервисы, OData или еще какие технологии).
  • Нет проблем с табличными инфотипами.
Но за сыр нужно платить. Плата заключается, как уже писал выше, в высоком пороге входа – надо много знать из технологии. Плюс, так как IDOC сохраняется напрямую в базу данных, но пользовательская логика для инфотипов не работает. Такие вещи приходится помнить и реализовывать в принимающей системе (например, вызывать те же функциональные модули прежде чем сохранить IDOC в инфотип).
LSMW, кстати, удобно скрестить с ALE как инструмент для быстрого преобразования практически любого текстового файла в структуру IDOC. Я писал ранее, как можно из файла формировать IDOC за считанные минуты. Если вспомнить, что LSMW можно запланировать как фоновое задание, то получается гибкий инструмент для загрузки файлов любого формата без участия человека или регулярной миграции данных между системами. И совершенно бесплатно.

Запускаем любой функциональный модуль с данными из файла

Это то, чего не хватает шаловливым ручкам, когда они чешутся. Удалые ребята хотят делать в системе какие-то вещи массово, которые сложно сделать через LSMW. При этом ключа разработчика у нас нет. Из банального пример, боль LSMW при миграции, так сказать, это загрузить данные из файла, а потом удалить. Мало ли ошибочно залили. Приходится писать отдельный проект для удаления. Плюс пакетник все же медленнее, чем ФМ работает.

Говорить мы сегодня будем опять про eCATT. Да, это не только средство для разработки тестов, но и неплохой скриптовый язык, который работает быстро, настраивается гибко и позволяет извращаться кто во что горазд.

Читать далее