Комментарии по теме

«Инстру­кция по созданию отчёта в тра­нза­кции SQVI»
Олег Точенюк:
Ну это вы погорячились вязать код БЕ заголовка, с кодом БЕ позиции. Код БЕ заголовка отвечает за то, где будет отражена кредиторская задолженность, а код БЕ в позиции отвечает за то, где будет...
«Методика создания варианта тра­нза­кци­и: тра­нза­кция SHD0»
Олег Точенюк:
Как вариант решения проблемы, нашел тут у себя создание системного варианта транзакции MBPM. Думаю в данном случае можно попробовать так тоже сделать.   === Для этого запускаем стандартную...
«Инстру­кция по созданию отчёта в тра­нза­кции SQVI»
Елена Ткаличенко:
Добрый день! Алексей, а можно и мне самопальную инструкцию? Заранее спасибо

База знаний

Вы можете подписаться на эту колонки этого автора, если авторизируетесь или зарегистрируетесь

Транзакция LSMW инструкция по применению. Часть 6

29 октября 2018, 11:18

Загрузка длинных текстов материала методом Direct Input в транзакции LSMW

Продолжение книги.

Часть 1  Часть 2  Часть 3  Часть 4  Часть 5

В главе будет подробно описано решение задачи по загрузке длинных текстов основных записей материалов с помощью метода Direct Input транзакции LSMW. В примере будет показано, как один и тот же загрузчик может загружать несколько видов длинных текстов материалов на примере длинных текстов на уровне основного ракурса (Basic Data Texts) и длинных текстов сбытового ракурса (Sales Text). В общей схеме задач миграции мы находимся на этапе загрузки длинных текстов по созданным ОЗМ (рис. 4.1).

Рис. 4.1. Задача загрузки длинных текстов ОЗМ в общей схеме задач миграции

Задача состоит в загрузке длинных текстов к основному и сбытовому ракурсам основной записи материалов в рамках одного загрузчика. В главе будет показан пример с использованием двух входящих файлов для загрузки, дополнительных подпрограмм (user-defined routines), преобразований (translations), fixed values (фиксированных значений), а также пример ситуации, когда источниками для одного поля целевой структуры выступают сразу несколько полей входной структуры.

4.1. Операционные условия

Задача: требуется загрузить длинные тексты к основным записям материалов в рамках основного и сбытового ракурсов. На предварительном шаге посмотрим, как выглядят длинные тексты в основной записи материала, и определим параметры загрузки длинных текстов.

Длинные тексты материала используются для развернутого описания материала/услуги в силу того, что краткое описание имеет длину 40 символов и не всегда может точно отражать наименование. В системе SAP ERP длинные тексты могут быть на уровне основного, сбытового и закупочного ракурсов. Поле Текст к основным данным находится в ракурсе Основные данные в закладке Дополнительные данные (Additional Data) (рис. 4.1) на вкладке Текст/ОсновнДанные (Basic Data Text) (рис. 4.2).

Рис. 4.2. Переход к дополнительным данным ОЗМ

Видим, что поле Текст к основным данным (Длинный текст материала) может содержать более 132 символов, а также может содержать символы переноса строк (рис. 4.3). Посмотрим, как данный текст выглядит в редакторе текстов. Для этого нажмем на кнопку Редак. (Editor) в экране, содержащем длинные тексты (рис. 4.4).

Рис. 4.3. Вкладка Текст/ОсновнДанные содержит длинные тексты ОЗМ

Рис. 4.4. Кнопка перехода к просмотру длинного текста в редакторе текстов

Видим, что «длинный» текст материалов состоит из строк, каждая из которых имеет длину 72 символа, и спецсимволов, которые находятся в начале каждой из строк (рис. 4.5). Эти спецсимволы называются форматами — format (в английском варианте имеют название tag; термин «tag» нам пригодится при создании пакетной загрузки).

Рис. 4.5. «Длинный» текст ОЗМ, представленный в редакторе

«Длинные» тексты основных записей материалов можно обработать массово. Однако для обработки нам нужно знать параметры «длинного» текста, а именно ID, LANGUAGE, NAME, OBJECT. В системе длинные тексты создаются и просматриваются с помощью двух функциональных модулей SAVE_TEXT и READ_TEXT. Поставим точку останова в функциональном модуле READ_TEXT и откроем текст основных данных и сбытовой текст на просмотр (рис. 4.6).

Рис. 4.6. Проект, подпроект и объект для загрузки длинных текстов 

Параметры длинных текстов для основного и сбытовых ракурсов покажем с помощью таблицы 4.1.

Табл. 4.1. Параметры «длинных» текстов для основного и сбытового ракурсов

4.2. Пошаговое решение задачи

Шаг 1: создание/выбор проекта, подпроекта и объекта

Для создания нового проекта транзакции LSMW будем использовать данные из таблицы 4.2 (рис. 4.7).

Табл. 4.2. Данные для создания объекта LSMW для загрузки длинных текстов ОЗМ

Рис. 4.7. Параметры длинного текста основного ракурса материала (определение через отладчик)

После указания данных подтверждаем ввод и запускаем проект. Система откроет перед нами основное меню транзакции LSMW.

Шаг 2: параметры метода загрузки: выбор объекта и метода Direct Input

Дважды щелкаем по пункту меню Maintain Object Attributes (рис. 4.8).

Рис. 4.8. Переход к атрибутам объекта LSMW

В качестве объекта выбираем 0001 (Long texts), метод — 0001 ((No selection)); имя программы (Program Name) подтянется автоматически /SAPDMC/SAP_LSMW_IMPORT_TEXTS (рис. 4.9). Сохраняем и выходим к списку шагов, чтобы перейти к следующему шагу.

Рис. 4.9. Указываем атрибуты объекта LSMW

Шаг 3: создание структуры источника [данных]

Дважды щелкаем по пункту Maintain Source Structures (рис. 4.10). На этом шаге нам нужно создать две структуры: основную (вышестоящую) (рис. 4.11) и подчиненную (нижестоящую).

Рис. 4.10. Переходим к созданию структуры источника данных

Рис. 4.11. Указываем ID и описание вышестоящей структуры

Ставим курсор на только что созданную структуру и снова нажимаем кнопку Создать. Система запросит «отношение» к текущей структуре. Выбираем Lower Level (подчиненная) (рис. 4.12).

Рис. 4.12. Создание подчиненной структуры

Затем указываем ID и описание подчиненной структуры (рис. 4.13).

Рис. 4.13. ID и описание подчиненной структуры

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

Рис. 4.14. Одна структура подчинена другой

Шаг 4: ведение полей структуры источника [данных]

Щелкаем дважды по пункту Maintain Source Fields (рис. 4.15). Ставим курсор на структуру ZMATTXT1 (коды материалов) и нажимаем на кнопку Table Maintenance (рис. 4.16). Введенные данные представлены в таблице 4.3 для структуры ZMATTXT1. Затем ставим курсор на структуру ZMATTXT12 (длинные тексты ОЗМ), переходим аналогично в режим Table Maintenance и указываем поля, указанные в таблице 4.3 для структуры ZMATTXT12.

Рис. 4.15. Переход к ведению полей структур источника данных

Рис. 4.16. Переход к табличному ведению полей структуры-источника

Табл. 4.3. Поля структур источника данных

Две структуры будут связаны по полям с одинаковым названием. В нашем случае это поля MATNR и TYPE (поэтому эти два поля должны быть в двух входящих структурах). Поле TYPE — это однобуквенное обозначение текста для целей нашей загрузки. Оно будет определять тип объекта (MATERIAL или MVKE), номер объекта (с учетом номера сбытовой организации или без учета), а также параметра NAME (GRUN или 0001).

Итоговый результат шага представлен на рис. 4.17. В основном экране шага сохраняем данные и выходим к обзору списка шагов, чтобы перейти к следующему шагу.

Рис. 4.17. Итоговый результат создания полей входных структур

Шаг 5: соответствие структур источника данных и записи

Дважды щелкаем по шагу Maintain Structure Relations (рис. 4.18). Создаем соответствие структур так, как показано на экране (рис. 4.19) с помощью кнопки Relationship. У нас две входящие структуры и две внутренние структуры; входящую структуру ZMATTXT1 привязываем к внутренней структуре /SAPDMC/LTXTH, а ZMATTXT12 — /SAPDMC/LTXTL. Сохраняем, выходим, переходим к следующему шагу.

Рис. 4.18. Переход к шагу Ведение соответствия структур

Рис. 4.19. Результат присвоения структур

Шаг 6: мэппинг (соответствие) полей источника [данных] и полей структуры программы Direct Input

Дважды щелкаем по шагу Maintain Field Mapping and Conversion Rules (рис. 4.20).

Рис. 4.20. Переход к шагу мэппинга полей и правил конвертации

В данной главе мы будем использовать возможности связанного шага Maintain Fixed Values, Translations, User-Defined Routines.

Чтобы указать значение для поля OBJECT, мы применим функционал translation (подстановки). Ставим курсор на поле OBJECT и нажимаем кнопку Source Field для указания источника поля (рис. 4.21).

Рис. 4.21. Указываем поле-источник (ZMATTXT1-TYPE) (ZMATTXT1 TYPE) в качестве источника данных для поля OBJECT

Поля ZMATTXT1-TYPE и OBJECT будет неправильным приравнять в том виде, в котором они есть; поэтому мы будем использовать translation. Ставим курсор на поле OBJECT и нажимаем кнопку Translation (в верхней правой части экрана) (рис. 4.22).

Рис. 4.22. Делаем translation для поля OBJECT

В открывшемся экране отмечаем radiobutton Own selection и указываем TDOBJECT (рис. 4.23). Система создаст данный translation.

Рис. 4.23. Указываем имя нового translation

После подтверждения данных о новом translation система преобразует мэппинг полей, как представлено на рис. 4.24.

Рис. 4.24. Преобразованный мэппинг между полями OBJECT и TYPE

Однако, как будет отрабатывать translation, нам нужно указать в следующем шаге под названием Maintain Fixed Values, Translations, User-Defined Routines. Поэтому мы сохраняем текущий результат на данном шаге и переходим к следующему (рис. 4.25). После обработки translation TDOBJECT мы снова вернемся к мэппингу полей.

Рис. 4.25. Переход к шагу по ведению фиксированных значений, translation и подпрограмм пользователя

Ставим курсор на translation TDOBJECT и нажимаем кнопку Change / Изменить (рис. 4.26).

Рис. 4.26. Переходим к изменению translation TDOBJECT

На вкладке Source Field, Target Field обращаем внимание на длину входящего и исходящего параметров. В нашем случае на входе у нас длина параметра равна одному символу, а на выходе — десяти символам (рис. 4.27).

Рис. 4.27. Длина входящего и исходящего параметров

Переходим на вкладку Control и указываем вариант ведения и альтернативы. В качестве варианта указывает translation (преобразование) 1:1, а в качестве First Alternative указываем Constant (постоянное значение), при этом в нижней части экрана заполняем поле Constant. В случае если система не найдет значение по основному варианту (1:1), то в качестве первой альтернативы будет взято значение из поля Constant (рис. 4.28).

Рис. 4.28. Указываем алгоритм работы Translation

Теперь переходим к вкладке 1:1 Translation Value — эта вкладка должна содержать соответствия значений. Обращаю внимание, что параметр OK должен быть заполнен для активных записей, если столбец OK не отмечен, то запись считается неактивной и не будет приниматься системой во внимание (рис. 4.29).

Рис. 4.29. Ведение значений в Translation

Итак, если значение Type будет B (сокращенно от Basic), то значение в поле OBJECT будет MATERIAL, а если S (сокращенно от Sales) — то MVKE. Как видим, мы в транзакции LSMW мы можем использовать таблицу соответствия, что может быть весьма полезно. Сохраняем данные и выходим к основному меню транзакции LSMW со списком шагов (рис. 4.30.).

Рис. 4.30. Сохраняем данные и выходим к основному меню транзакции LSMW

Возвращаемся к шагу Maintain Field Mapping and Conversion Rules двойным нажатием и переходим к обработке следующего поля — NAME (рис. 4.31).

Рис. 4.31. Возвращаемся к мэппингу полей после создания translation

Для поля NAME источником данных будут служить 4 поля, так как значение в этом поле может содержать сбытовую организацию, а может и не содержать. Ставим курсор на поле NAME и нажимаем кнопку Source Field. Делаем это 4 раза, чтобы система обозначила в качестве источника данных именно 4 поля, как показано на рис. 4.32.

Рис. 4.32. Несколько источников данных для одного поля

Затем снова ставим курсор на поле NAME и нажимаем кнопку Rule в верхней части экрана (рис. 4.33).

Рис. 4.33. Задаем правило для поля NAME

Из предложенных опций выбираем опцию User-Defined Routine (Reusable) (рис. 4.34).

Рис. 4.34. Выбираем опцию User-Defined Routine (Reusable)

Отмечаем опцию Own Selection и указываем имя OBJ_NAME_R. Это имя подпрограммы, которая будет создана. Код для этой подпрограммы нам нужно самостоятельно написать (рис. 4.35).

Рис. 4.35. Указание попрограммы в качестве правила преобразования

Система автоматически создаст код для вызова подпрограммы. Заменим второй параметр с ZMATTXT1-TYPE на /SAPDMC/LTXTH-OBJECT, тем самым мы рассмотрим возможность определения значения от динамически определенного соседнего поля. Дважды щелкаем по коду для поля NAME (рис. 4.36).

Рис. 4.36. Двойным щелчком переходим в текст кода для поля

В итоге код получится, как на рис. 4.37. Вторым параметром стало поле /SAPDMC/LTXTH-OBJECT.

Рис. 4.37. Скорректированный код для поля NAME

Сохраняем результат и переходим (на время) к шагу Maintain Fixed Values, Translations, User-Defined Routines. Ставим курсор на имя созданной подпрограммы и нажимаем кнопку Change / Изменить (рис. 4.38).

Рис. 4.38. Переходим к редактированию д созданной подпрограммы

В программу вставляем код, представленный в таблице 4.4.

Табл. 4.4. Код для получения имени объекта при загрузке длинных текстов

После вставки кода сохраняем результат и возвращаемся к мэппингу полей (шаг Maintain Field Mapping and Conversion Rules).

Для поля ID мы делаем translation OBJ_ID в зависимости от входного поля ZMATTXT1-TYPE. Данные по translation представлены на рис. 4.39, рис. 4.40, рис. 4.41, рис. 4.42.

Рис. 4.39. Указание для использования translation для поля ID

Рис. 4.40.Тип входного и выходного параметра

Рис. 4.41. Алгоритм работы translation

Рис. 4.42. Таблица 1:1 преобразования translation

Снова возвращаемся к мэппингу полей к полю SPRAS. Для этого поля укажем фиксированное значение (Fixed Value). Ставим курсор на поле SPRAS и нажимаем кнопку Fixed Value (рис. 4.43).

Рис. 4.43. Определяем фиксированное значение (переменную) для поля SPRAS

Выбираем опцию Own Selection и указываем имя переменной LANGUAGE (рис. 4.44).

Рис. 4.44. Указываем имя фиксированного значения для поля

Переходим к шагу Maintain Fixed Values, Translations, User-Defined Routines, ставим курсор на имя переменной постоянного значения и нажимаем Change / Изменить (рис. 4.45).

Рис. 4.45. Переходим к изменению постоянного значения

Обращаем внимание на длину поля и задаем нужное нам значение. В нашем случае это односимвольное значение, равное R (Russian Language) (рис. 4.46).

Рис. 4.46. Указываем значение для Fixed Value

Затем снова возвращаемся к шагу Maintain Field Mapping and Conversion Rules и указываем источники для полей TEXTFORMAT и TEXTLINE. Для этих полей источником будут являться поля структуры ZMATTXT12: TAG2 и TXT132 (рис. 4.47).

Рис. 4.47. Мэппинг полей TEXTFORMAT и TEXTLINE

На этом моменте мы выполнили сразу два связанных шага: Maintain Field Mapping and Conversion Rules и Maintain Fixed Values, Translations, User-Defined Routines. Сохраняем результат и переходим к шагу Specify Files.

Шаг 7: указание пути к файлу

Прежде чем указывать путь к файлу, необходимо создать файл по нужному нам формату. Для создания входного файла будем использовать табличный редактор Excel. Первый файл для проверки загрузчика разумно создавать на 2–3 записи; так как в случае проблем можно их быстро устранить. Первую строку в Excel заполним техническими именами полей входной структуры. А строки, начиная со 2-й, заполним уже конкретными значениями. В нашем случае имеем два входных файла, поэтому в Excel создадим два листа с именами: ZMATTXT1 и ZMATTXT12.

Структура первого листа будет выглядеть, как представлено на рис. 4.48.

Рис. 4.48. Данные в Excel для вышестоящей структуры

Структура второго листа будет выглядеть, как представлено на рис. 4.49.

Рис. 4.49. Данные в Excel для подчиненной структуры

Чтобы понять, что можно/нужно заполнять в поле TAG2, перейдем в редактор текста и получим справку для этого поля (рис. 4.50).

Рис. 4.50. Справка F1 по полю format / tag в редакторе текстов

Затем мы сохраним Excel как файл в формате xlsx, скопируем все данные и сохраним в два файла (в формат .txt) (можно выполнить операцию Save As — Сохранить как). На выходе должны получиться файлы в формате txt с табуляторами в качестве разделителей (рис. 4.51 и рис. 4.52).

Рис. 4.51. Данные структуры ZMATTXT1 в формате .txt

Рис. 4.52. Данные структуры ZMATTXT12 в формате .txt

После создания текстовых файлов переходим к указанию их в качестве файлов-источников. Дважды щелкаем по шагу Specify Files (рис. 4.53).

Рис. 4.53. Переходим к шагу Specify Files

Для двух файлов выполняем действия по добавлению файлов. Ставим курсор на строку On the PC (Frontend) и нажимаем кнопку Add Entry (рис. 4.54).

Рис. 4.54. Добавление файла

Параметры файлов приведены на рис. 4.55 и 56.

Рис. 4.55. Параметры файла для структуры ZMATTXT1 

Рис. 4.56. Параметры файла для структуры ZMATTXT12

Подтверждаем создание пути и файлов, сохраняем и выходим к списку шагов транзакции LSMW.

Шаг 8: присвоение файла и структуры источника [данных]

Дважды щелкаем по шагу Assign Files (рис. 4.57).

Рис. 4.57. Переходим к присвоению файла, пункт Assign Files

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

Рис. 4.58. Присвоение файлов и входных структур

Шаг 9: чтение данных и просмотр считанных данных

С этого момента начинаются повторяемые шаги (которые нужно будет выполнять для каждой загрузки данных). Дважды щелкаем по шагу Read Data в основном меню транзакции LSMW. На рис. 4.59 показан экран запуска считывания данных. Мы можем указать номер начальной и конечной записи для считывания (это может быть полезно на этапе проверки загрузчика). Просмотр считанных данных выполняем в пункте меню Display Read Data.

Рис. 4.59. Запуск чтения данных из внешнего файла 

Шаг 10: конвертация данных и просмотр конвертированных данных

Дважды щелкаем по шагу Convert Data (рис. 4.60).

Рис. 4.60. Переход к шагу конвертации данных

Просмотр конвертированных данных выполняется в пункте Display Converted Data. Видим, что для третьей записи система правильно подобрала объект (рис. 4.61).

Рис. 4.61. Просмотр конвертированных данных

Шаг 11: запуск программы Direct Input

Дважды щелкаем по шагу Start Direct Input Program (рис. 4.62). Запускаем программу и ждем результата. В случае ошибок программа сообщит о них (либо укажет количество необработанных записей).

Рис. 4.62. Переход к шагу Start Direct Input Program 

Также необходимо иметь в виду, что в Direct Input существует опция запуска в фоновом режиме (рис. 4.63).

Рис. 4.63. Возможность запуска в фоновом режиме

После выполнения система выдаст результат загрузки (рис. 4.64).

Рис. 4.64. Результат запуска программы Direct Input по загрузке длинных текстов

4.3. Заключение

Мы рассмотрели еще одно применение метода Direct Input загрузки данных с помощью транзакции LSMW с применением двух структур и двух входящих файлов, а также возможностей translation, fixed value и user-defined routines. Видно, что этот метод обеспечивает быструю загрузку данных. Подход, описанный в этой главе, можно применять к загрузке длинных текстов для любого SAP ERP-объекта.

Продолжение следует.

Об авторе

Олег Башкатов — консультант-разработчик по функционалу SAP SD, MM, RCM, SAP EWM. Обладает опытом работы с SAP-продуктами с 2008 года. Принимал участие как в полномасштабных проектах (все стадии от анализа, концепта до конфигурации и поддержки продуктивной эксплуатации), так и в roll-out проектах (консультирование по локальной специфике) как на территории России, так и за рубежом. Имеет сертификаты:

1. P_SD_65 (SAP Certified Application Professional — Order Fulfillment with SAP ERP 6.0 EhP5);

2. C_TAW12_731 (SAP Certified Development Associate — ABAP with SAP Net Weaver 7.31).

Успешно осуществил настройку модулей MM, SD, RCM, PS, а также проводил разработки более чем у 7 заказчиков, среди которых такие предприятия, как ООО «Сименс», ПАО «МОЭСК», ПАО «ФСК ЕЭС», ПАО «Северсталь», ООО «Марс», ПАО «Группа Черкизово», ТОО «SINOOIL». Имеет собственные разработки для SAP ERP. Сайт автора: http://www.olegbash.ru/



В данной колонке публикуются главы из книги Олега Башкатова "Транзакция LSMW инструкция по применению"

  

   

   

    

Ключевые слова : Transaction Codes

Функциональная область : Информационные технологии / IT, Basis, ABAP

Ролевое назначение : SAP Консультант / Consultant, Ключевой пользователь / Expert