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

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

База знаний

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

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

26 ноября 2018, 00:00

Массовое сторно документов материала методом Batch Input транзакции LSMW

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

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

В этой главе будет описано решение задачи по массовому сторно документов материала. Загрузчик на массовое сторно документов материала практически всегда сопровождает загрузку остатков, в силу того что не всегда получается сделать загрузку с первого раза корректно. Загрузчик, представленный в настоящей главе, выполняет загрузку не из файла на фронтэнде, а из файла на сервере приложений (application server). В решении бизнес-задачи мы находимся на этапе создания инструмента для массового сторно документов материала, которые загружали начальные остатки (рис. 6.1). В настоящей главе не описываются подробно те шаги, которые были детально описаны в предыдущих главах.

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

Задача состоит в создании возможности массового сторно документов материалов. При этом дата сторно должна быть та же, что и в исходном документе материала. Файл источника данных будет находиться на сервере.

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

Для решения поставленной задачи мы будем использовать пакетный ввод на транзакцию MBST. Дату найдем с помощью дополнительной подпрограммы. Таким образом, в исходном файле у нас будет всего один столбец, где будет храниться номер документа материала (см. таблицу 6.1). В качестве года документа материала будем использовать текущий год.

Табл. 6.1. Поля для массового сторно документов материала

На предварительном шаге: подготовим данные для загрузчика, а именно — пройдемся вручную в транзакции MBST. В транзакции MBST укажем сторнируемый документ материала и нажимаем E, затем нажимаем кнопку Сохранить (рис. 6.2 и рис. 6.3). Такие простые действия позволяют сторнировать документ материала.

Рис. 6.2. Начальный экран транзакции MBST (сторно документа материала)

Рис. 6.3. Сообщение об успешном сторнировании документа материала

Для подобных действий в системе метод Batch Input весьма подходит. Количество экранов минимально и количество данных также минимально.

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

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

Создадим новый объект транзакции LSMW согласно данным из таблицы 6.2.

Табл. 6.2. Данные для создания объекта LSMW

Шаг 2: параметры метода загрузки: выбор/создание записи пакетного ввода (Batch Input)

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

Рис. 6.4. Указываем имя записи для Batch Input Recording

Выбираем пункт Batch Input Recording, нажимаем кнопку Overview. Создаем запись для транзации MBST; на выходе получаем данные как на рис. 6.5.

Рис. 6.5. Результат создания записи в Batch Input Recording

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

Дважды щелкаем по пункту Maintain Source Structures в основном меню транзакции LSMW. После создания структуры система отобразит экран как на рис. 6.6.

Рис. 6.6. Создаем структуру источник для объекта транзакции LSMW

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

Щелкаем дважды по пункту Maintain Source Fields в основном меню транзакции LSMW.

Указываем поле в структуре (рис. 6.7.)

Рис. 6.7. Указываем поле в структуре — источнике данных

Введенные данные представлены в таблице 6.3. После добавления поля система покажет экран, как на рис. 6.7. В основном экране шага сохраняем данные и выходим к обзору списка шагов, чтобы перейти к следующему шагу.

Табл. 6.3. Описание структуры — источника данных для массового сторно документов материала

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

Дважды щелкаем по пункту Maintain Structure Relations в основном меню транзакции LSMW. На этом шаге нам необходимо определить (задать) соответствие между внутренней структурой данных (то есть полями записи) и структурой источника данных. В случае метода записи этот шаг выполняется чаще всего автоматически; и от того, кто готовит загрузчик, требуется подтвердить привязку: сохранить и выйти к обзору списка шагов, чтобы перейти к следующему шагу (рис. 6.8).

Рис. 6.8. Результат присвоения структуры источника данных и записи

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

Дважды щелкаем в основном меню транзакции LSMW по пункту Maintain Field Mapping and Conversion Rules. Нажмем на кнопку Layout и откроем блоки: Global Definitions, Processing times и Form Routines (ABAP Subroutines) (рис. 6.9).

Рис. 6.9. Откроем блоки lля вставки нужного нам ABAP-кода

Детальный мэппинг полей и блоков приведен в таблице 6.4.

Табл. 6.4. Мэппинг полей структур BAPI и входного файла

Заметим, что подпрограмма ur_skip_rec была создана в одной из предыдущих глав в рамках этого же проекта, поэтому эта подпрограмма доступна нам и сейчас. Напомним, что подпрограмма ur_skip_rec является user-defined routines skip_rec, определяемая в пункте меню транзакции LSMW Maintain Fixed Values, Translations, User-Defined Routines (рис. 6.10). Сам код подпрограммы приведен в таблице 4 вместе с остальными полями. Детальное пояснение подпрограммы было дано в главе 4.

Рис. 6.10. User defined routines skip_rec

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

Прежде чем указывать путь к файлу, необходимо создать файл по нужному нам формату. Для создания входного файла будем использовать табличный редактор Excel. Первую строку в Excel заполним техническими именами полей входной структуры. А строки, начиная со 2-й, заполним уже конкретными значениями (рис. 6.11).

Рис. 6.11. Данные загрузки в табличном редакторе Excel

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

Рис. 6.12. Данные в блокноте, перенесенные из табличного редактора Excel

Мы создали файл на жестком диске ПК (обратим внимание, что кодировка файла UTF-8). Однако теперь нам необходимо создать файл на Application Server. Для первоначального создания/загрузки файла на application server можно использовать транзакцию CG3Z (Upload file) (рис. 6.13). Необходимо заметить, что из SAP-системы можно загрузить файл в ограниченное количество директорий на application server. По поводу того, какие директории можно использовать, а какие — нет, лучше проконсультироваться с командой базиса на каждом конкретном проекте. Более того, рекомендуется выделить для LSMW отдельную директорию, а в рамках общей папки LSMW выделить подпапки для конкретных проектов (но это очень идеальная ситуация). Как правило, папки для временной загрузки доступны для SAP-пользователя на Linux. К временным папкам относятся: /usr/sap/tmp/, /tmp/. Список папок можно просмотреть с помощью транзакции AL11 или функционального модуля /SAPDMC/LSM_F4_SERVER_FILE. Мы выполним первоначальную загрузку (а вместе с ней и создание файла на сервере) в папке /usr/sap/tmp/ (рис. 6.13).

Рис. 6.13. Успешная файла на application server

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

Рис. 6.14. Параметры входного файла на application server

Когда же в следующий раз нам понадобится обновить файл, можно не идти в транзакцию CG3Z (Upload file), а использовать интерфейс транзакции LSMW в пункте Specify Files. Для загрузки нового файла ставим курсор на файл и нажимаем на кнопку File Upload (рис. 6.15).

Рис. 6.15. Обновление файла на application server новым содержимым из нового файла

Система откроет диалог выбора файла Windows, там вы можете выбрать файл, содержимое которого нужно отправить в файл на сервер (рис. 6.16). Файл на сервере будет перезаписан, имя файла не изменится.

Рис. 6.16. Выбор файла, содержимое которого нужно прогрузить на сервер

Также у нас есть возможность просмотреть содержимое файла из интерфейса транзакции LSMW с помощью кнопки Display File (рис. 6.17).

Рис. 6.17. Просмотр файла на сервере с помощью транзакции LSMW

Содержимое файла будет отображено как на рис. 6.18.

Рис. 6.18. Содержимое файла на application server

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

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

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

Рис. 6.19. Результат автоматического присвоения файла и внутренней структуры

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

Начиная с этого момента можно сказать, что начинаются повторяемые шаги (те, которые нужно будет выполнять для каждой загрузки данных). Дважды щелкаем по пункту основного меню транзакции LSMW Read Data. На этом шаге происходит чтение данных из текстового файла в файл Imported Data. На экране есть возможность указать, с какой записи и по какую запись читать. Это может быть удобно в случае больших файлов (или проверки загрузки, рис. 6.20). Для больших файлов это удобно тем, что у нас есть возможность параллельно загружать данные из одного файла с помощью нескольких загрузчиков (тогда данные, которые должны быть загружены в систему, будут загружены быстрее); а в случае проверки загрузки это удобно тем, что мы можем указать несколько строк из файла (например, с номера 4 по номер 8) исключительно для проверки загрузчика, при этом нам не понадобится создавать новые файлы (особенно это актуально, когда загрузка идет с сервера).

Рис. 6.20. Запуск считывания файла

Для просмотра данных щелкаем по пункту Display Read Data. Затем возвращаемся к обзору шагов, чтобы перейти к следующему шагу.

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

Дважды щелкаем по пункту меню транзакции LSMW Convert Data. На этом шаге система прочитает файл *read* и преобразует данные для реальной загрузки, то есть в файл *conv*. Именно на этом шаге выполняется тот ABAP-код, который мы указали в подпрограмме для определения даты сторно документа. Мы так же, как и в случае с чтением, можем указать записи для загрузки (рис. 6.21). На выходе система покажет, что было конвертировано.

Рис. 6.21. Запуск конвертации данных из файла Imported Data в файл Converted Data

Для просмотра конвертированных данных дважды щелкаем по пункту Display Converted Data. Мы видим, что система корректно определила год документа материала и дату сторно (рис. 6.22).

Рис. 6.22. Выборочная проверка конвертированных данных

Далее переходим к основному меню транзакции LSMW, чтобы перейти к шагам непосредственной загрузки.

Шаг 11: создание и запуск пакетного ввода

Дважды щелкаем по пункту Create Batch Input Session. На этом шаге используем данные по умолчанию и нажимаем кнопку Execute / Выполнить (рис. 6.23). По нажатии на кнопку будет создан сеанс пакетного ввода (но на непосредственное выполнение он запускается на следующем шаге).

Рис. 6.23. Создание сеанса пакетного ввода

После создания Batch Input Folder система вернет нас к основному меню транзакции LSMW, откуда мы можем запустить сеанс пакетного ввода на выполнение с помощью пункта Run Batch Input Session (рис. 6.24).

Рис. 6.24. Запуск сеанса пакетного ввода из транзакции LSMW

Выделяем нужный нам сеанс, нажимаем кнопку Process. На следующем шаге можно указать параметры запуска пакетного ввода (рис. 6.25). При запуске пакетного ввода в нашем распоряжении 3 режима.

Рис. 6.25. Запуск сеанса пакетного ввода

Process/foreground (видимый режим) — система будет требовать подтверждения каждого шага и каждый шаг будет показан на экране. Этот режим подходит для разбора ошибок; его имеет смысл выбирать, когда нужно проанализировать выполнение, и запускать следует на небольшом количестве данных.

Display errors only — система будет останавливаться только в случае ошибок (или нехватки данных для определенного экрана).

Background — система запустит выполнение сессии в фоновом режиме. Это наиболее благоприятный режим для системы в случае большого количества обновляемых данных.

После успешного анализа журнала можно говорить об успешном создании пакетного ввода и загрузки в целом. Однако в течение любой загрузки могут возникать сообщения (об ошибке или предупреждения), которые стоит проанализировать. В экране SM35 весьма проблематично выполнить анализ сообщений. Вначале лучше перейти в табличный редактор и уже там проанализировать сообщения. Для этого в экране в SM35 нажмем на кнопку Log / Журнал (рис. 6.26).

Рис. 6.26. Переход к списку журналов, относящихся к данной сессии пакетного ввода

Система откроет экран со всеми журналами, относящимися к данной сессии, выбираем нужный и нажимаем кнопку Display / Просмотр (рис. 6.27).

Рис. 6.27. Переход к данным конкретного журнала пакетного ввода 

В открывшемся экране нажимаем кнопку Print from ABAP list viewer (сочетание клавиш Ctrl+P) (рис. 6.28).

Рис. 6.28. Переход к ABAP list viewer из table control с помощью сочетания клавиш Ctrl+P

В результате мы получим данные в таблице, которую можно сортировать, фильтровать и выгружать в Excel (рис. 6.29).

Рис. 6.29. Представление данных журнала SM35 в ALV List Viewer с возможностью выгрузки в Excel

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

В этой главе мы рассмотрели еще одно использование метода Batch Input в транзакции LSMW, но в качестве файла источника мы использовали файл на application server. Вы узнали, как можно работать с файлами на сервере приложений и как можно быстро анализировать лог журнала SM35.

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

Об авторе

Олег Башкатов — консультант-разработчик по функционалу 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 инструкция по применению"

  

   

   

    

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

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

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