Contents
ABAP: начало и происхождение ................................................................................................................. 5
ABAP начало и происхождение: введение................................................................................................ 5
ABAP basic syntax ......................................................................................................................................... 6
ABAP-Environment ......................................................................................................................................12
Процесс разработки приложения ........................................................................................................12
SAP Object Navigator ..............................................................................................................................13
Пространства имен (Namespace)..........................................................................................................18
Создаем начальные объекты: пакет и first read_abap report ............................................................18
Конструкции языка ................................................................................................................................38
Типы данных, структура sy (тип syst), присвоение переменных ...................................................38
Внутренние таблицы: INSERT / APPEND / MODIFY / DELETE / READ / LOOP...................................42
Процедуры: form и function ..............................................................................................................44
Конструкции для сравнения (IF / CASE) и циклы (LOOP / DO / WHILE) ..........................................50
Работа с таблицами базы данных ....................................................................................................52
Работа с экранами (ввод/вывод информации) ..............................................................................52
Конструкции ABAP OOP .....................................................................................................................54
ABAP Debugging ..........................................................................................................................................59
Запуск отладчика .......................................................................................................................................59
Прямой способ.......................................................................................................................................59
Через команду в поле для транзакции ................................................................................................60
Ключевые кнопки ..................................................................................................................................61
Точки останова...........................................................................................................................................63
Статические точки остановка ...............................................................................................................63
Динамически точки остановка .............................................................................................................67
Безусловные точки останова ............................................................................................................67
Условные точки останова..................................................................................................................69
Сохранение точек останова ......................................................................................................................80
Интерфейс отладчика................................................................................................................................82
Прикладные приемы и пояснения к отладчику .....................................................................................92
Отладка фоновых заданий ...................................................................................................................92
Отладка обновления / отладка системных программ .......................................................................94
Отладка системных программ .............................................................................................................95
Когда нельзя ставить точки останова ..................................................................................................97
Отладка окон (POPUP), когда нет поля для ввода транзакции .........................................................98
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Рассмотрение истории происхождения и развития ABAP поможет пониманию того, почему были
сделаны те или иные конструкции в языке, а также поможет понять коренное назначение этого
языка программирования.
Изначально ABAP предназначался для выгрузки списков (list) из база данных. При этом запись в
базу данных делалась с помощью средств, созданных на других языках (assembler).
язык COBOL, из которого ABAP унаследовал некоторые элементы, создавался как язык, на котором
можно было читать и писать "не на техническом языке", а на "человеческом языке". Этот подход
ABAP сохранил и теперь из технических имен функций видно (хотя бы иногда и даже в
большинстве случаев), какой объект системы планируется создаваться /просматриваться
/обновляться /удаляться.
В ABAP существует множество конструкций (более 500). Конструкции направлены на то, чтобы
создавать и изменять код быстро; и при этом не испортить программу.
Современная среда разработки для SAP NetWeaver (где ABAP занимает значительную часть) – это
мощный инструмент для разработки бизнес-приложений.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При работе с SAP ERP подключение происходит под конкретным пользователем, языком (EN, RU,
DE, UK), мандантом (и иногда нужно вводить пароль).
Пользователь – это ID записи, по которой можно идентифицировать сотрудника/работника. 12
символов. Язык используется для пояснений к интерфейсу (специальные конструкции ABAP это
позволяют). Мандант – это логическая часть базы данных; в одной системе всегда несколько
мандатов (включая технические); иногда используют несколько мандантов для бизнес-данных. В
системе различают манданто-зависимые и независимые таблицы; с помощью манданта можно
разделить данные между частями базы данных.
При входе в систему мы видим «дерево» из транзакций. Для целей нашего курса нам
понадобиться особенно ветка – Tools / Инструменты (именно только эта ветка имеется в
NetWeaver Developer Edition).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Для отображения технического имени транзакции перейдем по меню Extras -> Settings
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Чтобы посмотреть версию системы (а эта информация может быть полезна), переходим
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Надо сказать, что из меню была удалена транзакции SE83 (Reuse Library) для некоторых примеров
интерфейса, а также транзакция BIBS (Examples of User Interface Design).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В этих инструментах можно найти программы по работе с базой данных, с внутренними таблица, с
элементами интерфейса, работы с файлам на Application и Presentation серверами, вызовами
Web-сервисов и вообще касательно всего, для чего разумно использовать ABAP.
Как мы видим, на SAP можно/нужно смотреть как на операционную систему нежели как на просто
серверное приложение.
ABAP-Environment
Процесс разработки приложения
Процесс разработки приложения в большинстве случаев состоит из этапов:
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Для структуризации разработок и чтобы понять, какие объекты к чему относятся в ABAP-
Разработке (SAP-разработка) используется понятие пакета (Package). С помощью пакета
можно/нужно объединять объекты в системе, относящиеся к решению сходной задачи.
Например, для ALV создан пакет SALV. Также можно делать вышестоящие и подчиненные пакеты.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
передачи поля XBLNR из SD-документа фактуры в FI-документ можно положить в SDXXX, пакет
подчинить интеграционным разработкам сбыта ZSDFI.
По-хорошему (в том смысле, что не везде используются пространства имен как способ
структуризации) список пространства имен можно найти в транзакции SE03 (Transport Organizer
Tools): Administration -> Display/Change Namespaces.
Для наших целей изучения и понимания, как работает тот или иной оператор/констуркция будем
использовать пространство имени Z8M_1.
1
Пространство имен выбрано таким способом, чтобы явно отделиться от любых других пространств.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При попытке присвоить объекты пакету Z8M – система выдаст запрещающее сообщение, так как
главному пакеты объекты присвоить нельзя.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
write: / 'Test'.
MESSAGE s002 with p_v1 p_v2 INTO gv_message.
"MESSAGE s002 with p_v1 conv char10( p_v2 ) INTO gv_message.
write: / gv_message.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
*&---------------------------------------------------------------------*
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Переменными &1 &2 обозначаются параметры сообщений. Всего их может быть не более 4.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Z8M001_FP_DATA
data gv_message TYPE C LENGTH 100.
Определение переменной в памяти. Символьная переменная длинной 100 знаков, глобальная.
Z8M001_FP_DATA
PARAMETERS: p_v1 TYPE C LENGTH 15
, p_v2 TYPE i
.
Определение параметров ввода на экране.
Line6: MESSAGE s002 with p_v1 p_v2 INTO gv_message.
Конструкция выводит сообщение не на экран (в панель – статусную панель – shared status bar), а
в переменную.
Line8: write: / gv_message.
Вывод сообщения в list на экран. Быстрый и экономичный (по ресурсам) способ вывести
информацию на основной экран.
CONDENSE gv_message.
Убираем лишние пробелы из текстовой переменной.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Текстовые переменные нужны для перевода интерфейса на другой язык. Если пользователь
зайдет на английском, то он увидит текстовые переменные так, как мы указали (так как мы
указывали на английском).
Но если пользователь зайдет на другом языке, то система будет брать текстовые переменные
из соответствующего языка
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Видим, что доступно довольно много стилей и предзаготовленных частей для запуска
справочной информации к программе.
Сохраняем и активируем документ и запускаем снова программу.
На первом экране мы увидим кнопку Info
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Ctrl+F3 (Активация)
Активация / генерация текущего отчета.
Создание текущей версии в качестве активной.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Single step button (F5): при нажатии на кнопку программа делает движение на один шаг вперед
(одну строчку кода); если встречается на пути кодовый объект (метод, подпрограмма, функция),
то программа входит в него.
Execute (F6): выполняет строчку кода как единый шаг (даже если в нем есть кодовый объект).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Continue to Cursor (Shift + F8): если мы поставим курсор в любом строчке программы (ниже
текущей), то система выполнит весь код до курсора и остановится в строчке кода, где стоит
курсор.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Присвоим транзакцию пакету и положим в запрос – после этого можно запускать транзакцию.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://help.sap.com/doc/saphelp_nw74/7.4.16/en-
US/43/55509bf8a75f6be10000000a1553f6/frameset.htm
3) Sap notes:
https://support.sap.com/en/index.html
https://www.sap.com/community/topic/abap.html
Конструкции языка
В ABAP существует множество конструкций для целей быстрого написания стабильного кода. Мы
рассмотрим те, которые нам пригодятся для дальнейшего анализа.
AT LINE-SELECTION.
PERFORM get_user_com.
Реакция на двойной клик пользователя (в старом выводе).
write:
Вывод через двоеточие , чтобы не повторять write несколько раз и объединить в логический
блок несколько строк кода.
, / 'Системная дата: '(T11) , 30 sy-datum INVERSE
/ <- равносильно оператору SKIP, открывает новую строку
(T11) <- обозначает текстовую переменную в программе
, (запятая) обозначает просто последовательный вызов после двоеточия.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
perFORM sys_info_dyn.
В этой подпрограмме показан вывод информации через динамику.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Важная информация описана в ABAP-справке ABAP – Reference-> Predefined Types, Data Objects,
Functions, and Constructors -> Predefined Data Types -> Predefined ABAP Types.
http://help-legacy.sap.com/abapdocu_750/en/abenbuiltin_types_numeric.htm
Тип данных
C Character Символьные переменные
Длина от 1 до 65535 символов. При определении данных указывается длина.
Можно сказать, что это небольшой текст.
data g_char30 type c length 30.
N Numeric Text
Длина от 1 до 65535 символов. При определении данных указывается длина.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Используется, когда необходимо работать с числами в качестве текста (то есть числа
используются не для вычисления, а для обозначения/нумерования чего-либо). Например,
номер счета, банковский счет, код балансовой единицы.
p_ano(10) TYPE n
I Integer Целое число
Целое число. Быстро обрабатывается, так как поддерживается процессором напрямую.
Диапазон от +/- 2,147,483,647
f Floating number Число с плавающей точкой
Для точности вычислений. Также поддерживаются CPU. Не только для промежуточных
расчетов, но и для дальнейшего хранения и последующих расчетов.
D Date Дата
YYYYMMDD <- внутренний формат – 8 символов.
С датой можно производиться вычисления.
20170430 + 1 = 20170501 в типе данных d.
То есть если мы прибавим к 30 апреля 2017 1 день, то получим 1мая 2017.
T Time Время
ЧЧММСС – внутренний формат 6 символов.
С типом данных время также можно производить вычисления.
x Byte
(Hexadecimal)
Предназначен для небольших файлов.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
а затем создаем
CREATE DATA l_rda_monthly_interest_factor.
ASSIGN l_rda_monthly_interest_factor->* TO
<l_monthly_interest_factor>.
В отладчике видно в разделе MEMORY ANALYSIS, что память распределяется только в момент
создания объекта
Массив данных, которым можно управлять через номер записи. Могут быть вставлены не
уникальные записи. Все команды: insert, modify, read, delete, append, loop применимы (кроме
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
2) Сортированные (sorted)
В дополнение: используется табличный ключ состоящий из одного или нескольких столбцов. Все
команды: insert, modify, read, delete, collect, loop применимы (append применять не нужно).
Для наших целей информации будет достаточно. Для подробностей – идем в справку
ABAP – Reference-> Processing Internal Data -> Internal Tables -> Processing Statements for Internal
Tables.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Или по ссылке
http://help-legacy.sap.com/abapdocu_750/en/abenabap.htm
Processing statements:
http://help-legacy.sap.com/abapdocu_750/en/abentable_processing_statements.htm
Для этих целей могут использоваться подпрограммы (они устарели, но в уже существующих
модулях используются: FI/SD/MM/PS/QM, поэтому нам нужно их иметь ввиду), группы функций и
ABAP OOP (поговорим отдельно).
Подпрограммы - FORMS
Код заключается между выражений
FORM name11.
Endform.
Подпрограммы устарели и не предполагается их использование для новых программ. Но для
исследования и поддержки старых программ – их нужно иметь ввиду.
Мы можем использовать параметры для вызова подпрограмм:
Tables <- подаем таблицы
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Таким образом, функциональные модули связаны между собой и могут неявным образом
передавать параметры.
При указании интерфейса (то есть тех параметров, которые могут передаваться) нужно иметь
ввиду что передавать мы можем по значению и по ссылке. По ссылке вызов делается по
умолчанию и он быстрее, чем по значению (и использует меньше памяти); работа происходит со
значением переменной. При передаче значения работа происходит с копией переменной.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Тестировать ФМ можно отдельно в транзакции SE37, более того можно сохранять параметры
прямо из программы.
Тогда в se37
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
ABAP – Reference-> Program Flow Logic -> Expressions and Functions for Conditions -> log_exp -
Logical Expressions -> rel_exp - Comparison Expressions -> rel_exp - Relational Operators
http://help-legacy.sap.com/abapdocu_750/en/abenlogexp_op.htm
CO Contains Only
Истина, если в левом выражении содержатся ТОЛЬКО значения из правого.
CN Истина, если в левом выражении содержатся НЕ ТОЛЬКО значения из
правого.
CA Истина, если в левом выражении есть любой из правого выражения.
NA Истина, если в левом выражении нет никакого из правого выражения.
CS Истина, если второе выражение полностью содержится в первом.
NS Истина, если CS ложно.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
COND
SWITCH
IF … ELSE … ENDIF. Условный оператор. Может быть использован со всеми типами данных.
CASE … Быстрое и простое определение равенства/неравенства
WHEN …
when Others.
…
ENDCASE
LOOP Цикл по внутренней таблице; может быть с условием или без него.
DO … ENDDO. Безусловные цикл (не по таблице)
WHILE Условный цикл. Используется часто для потоков (streaming, например
чтение/парсинг xml –файла)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Оператор Пояснение
SELECT Чтение данных и таблицы
SELECT * from
ZTHSTBACK
При работе с обновлением таблиц необходимо иметь ввиду SAP LUW (SAP Logical Unit of Work),
который обеспечивает транзакционность данных (то есть либо все обновляется, либо ничего).
Команды Пояснение
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
PROCESS ON HELP-REQUEST
[по запросу справки F1]
PROCESS VALUE-REQUEST
[вызов средства поиска, например, по F4]
Module mod1.
FIELD f [module1]
CHAIN … Объедение нескольких полей для совместной проверки.
ENDCHAIN В таблице используется – показать пример.
LOOP … Обработка таблиц (элемент table control)
ENDLOOP
CALL SUBSCREEN Вызов подэкрана (из текущей или внешней программы).
Используется, например, для табулированных экранов (когда несколько
вкладок)
CALL SCREEN Вызов экрана
SET SCREEN Установка вызова следующего экрана.
SET PF-STATUS Установка GUI статуса для экрана (набора кнопок и допустимых функций)
GET PF-STATUS Получение имени GUI статуса, может использоваться для последующих
проверок
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
SELECTION
SCREEN
SET HOLD DATA Установка значения в памяти поьзоватя
Set hold data on.
Или наоборот отключение
Set hold data off.
Объектная ориентация
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Objects Объекты
Classes Классы
Classes are program code that describes Классы представляют собой программный
objects. Technically, an object is an instance код, который описывает объекты.
of a class. In theory, you can create an Технически, объект представляют собой
infinite number of objects from a single class инстанцию класса. Теоретически, Вы
definition. Each instance of a class (object) можете создать неограниченное
has its own values for its attributes. количество объектов из определения
одного класса. Каждая инстанция класса
(объект) обладает своими значениями
атрибутов.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Encapsulation
Objects restrict the external visibility of their resources (attributes and methods). Each object has
an interface that determines how other objects or applications can use it. The implementation of
the object is encapsulated (not visible outside the class).
All components declared in the public visibility section defined with PUBLIC SECTION are accessible to all
users as well as in the methods of all inheritors and the class itself. The public components of the class
form the interface between the class and its users.
All components declared in the protected visibility section defined with PROTECTED SECTION are
accessible in the methods of all inheritors and in the class itself. Protected components form a special
interface between a class and its subclasses.
All components declared in the private visibility section defined with PRIVATE SECTION are only
accessible in the class itself, and are also not visible to the inheritors. The private components therefore
do not form an interface to the users of the class.
Polymorphism
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Methods with the same name can behave differently in different classes. In object-oriented
programming, you can use interfaces to address methods with the same name in different
objects. The form of address always remains the same, but the actual method implementation is
class-specific, and can be different in each class.
Inheritance
You can derive a class from another class. A derived class (subclass) inherits the data and
methods of its superclass. You can add new methods to a subclass, or redefine existing methods.
Redefined methods have the same name and interface as the original method. Their classes are
therefore polymorphous, too.
Changes in object-oriented systems should be possible locally (at class level), without
further changes being necessary in other parts of the system. This reduces the amount of
maintenance required.
Object-oriented systems require fewer revisions and less maintenance, because the
majority of problems can be discovered and corrected in the design and development
phases.
Object-oriented tools
Object-oriented modeling
Object-oriented modeling of a software system is the most important, most time consuming, and
most difficult task required to achieve the above goals. Object-oriented design encompasses
more than just object-oriented programming, and offers logical advantages that are independent
of the eventual implementation.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Конструкция Пояснение
Create Object Создается объект со ссылкой на тип.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Применительно к современному ABAP-отладчику (New ABAP Debugger) (не тот, которые в Eclipse, а
тот которые в SAP GUI), то он представляет собой большой набор инструментов, позволяющих
анализировать ABAP-код. В этом разделе мы пройдемся по этим инструментам на примере
программ, написанных в первой части. Мы будем рассматривать новый ABAP отладчик.
Касательно слова New (по ходу дела его постепенно преобразовывают в слово standard)
https://help.sap.com/saphelp_nw75/helpdata/en/49/217b366f7314d0e10000000a42189b/content.ht
m
Запуск отладчика
Прямой способ
Для запуска программы или функционального модуля в режиме отладчика, можно напрямую
использовать режим отладчика.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
/h -
/hs – системный запуск отладчика
/
Нажмем галку (ENTER), запустим программу – система откроет режим отладчика. Для старого
отладчика будет открыто то же самое окно, а для нового – откроется еще одно окно.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Ключевые кнопки
Ключевые кнопки отладчика – это F5 / F6 / F7 / F8 (специально удобно расположены на
клавиатуре). Кнопки расположены в верхней части экрана
Кнопка Пояснение
F5 Шаг вперед (на минимальный шаг). Если будет перед конструкцией, то зайдет в
конструкциию.
F6 Шаг вперед при этом строка кода (даже если в ней был вызов подблока кода)
F7 Выход из блока кода к предыдущему
F8 Выполнение программы до конца.
Shift + F8 Выполнить до курсора
Shift + F12 Перейти к курсору
Рассмотрим примеры.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При нажатии F5 – зайдем в под программу; а при нажатии F6 останемся в подпрограмме main.
При нажатии F7 останемся в подпрограмме main. При нажатии F8 – программа будет выполнена
до конца.
На рисунке выше мы видим стэк вызовов, то есть то, откуда вызывался определенный блок кода.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Стэк помогает проанализировать быстро, откуда произошле вызов, а также поможет подняться в
вызывающий блок кода и поставить точку останова там.
Точки останова
Статические точки остановка
(точки останова, указанные в коде с помощью операторов)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Оператор
BREAK-POINT
С помощью этого оператора программа всегда и для всех пользователей будет останавливаться в
онлайн режиме.
Это быстрый способ поставить точку остановка для того, чтобы сделать какие-нибудь аналитические
работы. Используется для разработки в основном.
Оператор
BREAK USER_NAME.
С помощью этого оператор точка останова ставится только для пользователя USER_NAME.
Тогда программа остановится только для конкретного пользователя.
Оператора
BREAK-POINT ID Z8M001_BREAK1.
В транзакции SAAB можно создавать CHECKPOINT group.
И активировать их в нужных случаях.
О чекпойнтах мы поговорим позднее. Сейчас отметим, что по сути мы можем включить точки
останова для пользователя и всей системы.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
А с помощью метода DISPLAY мы можем создать точку (ID), которая будет обеспечивать бесконечный
цикл
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
После того, как будет создан бесконечный цикл, мы можем увидеть наш процесс в транзакции SM66
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Этот способ позволяет отладить сложные случаи: такие как RFC вызовы, запуск фоновых заданий,
обработка входящей почты (это было одним из первых стандартных применений класса).
Класс: CL_SMTP_EXT_SAPCONNECT
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Тогда при запуске программа остановится в этом месте (если код пройдет через это место (!!!)).
Динамические точки остановка бывают внешними (external break point) и сессионными (session
breakpoint). Сессионные расставляются в рамках конкретной сессии и пользователя – после
выхода из системы они недоступны; внешние точки позволяют отлаживать RFC / WEB-вызовы
(покажем на OData вызове) и другие интеграционные вызовы.
Допустим, у нас есть Gateway-service. Транзакция SEGW. Идем в нужную нам реализацию сервиса
И ставим там точку внешнюю точку, тогда при запуске из Excel (например, из excel) (для
эксперимента поставим две точки – сначала session, а чуть ниже external и убедимся, что external
сработала, а session нет).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Session breakpoints могут устанавливаться не только явно на конкретной строчке кода, но и через
условие.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Под statement нужно понимать не только ABAP-конструкцию, но и все то, что предлагает на выбор
средство поиска.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Когда выйдем из программы назад, то сработает наша точка, так как мы поставили точку на
выражении loop at screen
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Breakpoint at method
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
На некоторое время мы можем деактивировать или пропустить остановка в нужных нам точках
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
После деактивации наша точка не исчезнет – она будет доступна для активации. И ее можно
активировать, например, через несколько шагов или при следующем запуске (при условии, что
сессия не закрывалась). И мы ее можем активировать.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Мы можем перевести session breakpoints в external breakpoints, однако это доступна только для
строчных точек останова, а не для condition
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При создании watchpoint у нас создается переменная клон (то есть происходит задвоение
переменной)
O Watchpoint:
https://help.sap.com/saphelp_erp60_sp/helpdata/en/f1/792442db42e22ce10000000a1550b0/content.
htm
В нашем случае создано три клона переменных, так как у нас три watchpoint
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
METHOD script.
* CL_TPDA_SCRIPT_SCAN_ITAB
* CL_TPDA_SCRIPT_SCAN_ITABCHANGE CL_TPDA_SCRIPT_SCAN_ITABREAD
* CL_TPDA_SCRIPT_SCAN_ITAB_DEL CL_TPDA_SCRIPT_SCAN_ITAB_READ
* CL_TPDA_SCRIPT_SCAN_ITAB_ADEL CL_TPDA_SCRIPT_SCAN_ITAB_LOOP
* CL_TPDA_SCRIPT_SCAN_ITAB_INS
* CL_TPDA_SCRIPT_SCAN_ITAB_SORT
ENDMETHOD. "script
Script
https://help.sap.com/saphelp_nw75/helpdata/en/63/6811fa025a43368c4f664ffd46ed05/frameset.htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
А затем мы можем загрузить этот файл; и точки останова будут расставлены автоматически.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Интерфейс отладчика
В версии NetWeaver 740 отладчик состоит из 12 рабочих столов, 3 из которых могут быть
настраиваемыми.
К рабочим столам отладчика можно обращаться через горячие клавиши Ctrl+F1, Ctrl+F2,… Ctrl+F12.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
После сохранения Layout наши настройки будут сохранены: имена рабочих столов, наборы
переменных.
Рабочий Назначение
стол
Desktop Настраиваемый рабочий стол.
1
Desktop Настраиваемый рабочий стол.
2
Desktop Настраиваемый рабочий стол.
3
Standard Отображает ABAP/Screen Stack и переменные
Structure Здесь можно просматривать (редактировать) структуры (а также те структуры, к
s которым было обращение через этот рабочий стол)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Есть возможности:
1) редактировать порядок столбцов
простым перетаскиванием или челе кнопку Columns (можно искать столбцы или
перемещать целые группы столбцов)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Отладка фоновых заданий возможно после завершения работы фонового задания. Система
сможет повторить программу с теми же селекционными параметрами и установит значение
переменной sy-batch = ‘X’ (которая показывает, что работа идет в фоновом режиме).
Запустим SM37
Найдем задание, которое уже завершилось; выделим его и в поле для транзакции введем JDBG и
нажимаем ENTER
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Затем нажимаем два раза F7 (зависит от версии) и переходим в первую программу фонового
задания (первый шаг фонового задания). Для того, чтобы правильно ориентироваться в стэке -
можно открыть стэк Loaded программ (то есть всех загруженных программ, включая системные)
(Отметим, что в стандартном стэке такой информации нет, а очень зря; еще бы цветовую
подсветку ).
Если шагов в фоновом задании несколько (как например, при прогоне платежей), то можно
нажимать F8, чтобы перейти от программы (как шага фонового задания) к программе.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
По меню: Settings -> Change Debugger Profile / Settings -> System Debugging / Update Debugging
https://help.sap.com/saphelp_nw70/helpdata/en/41/7af4bfa79e11d1950f0000e82de14a/content.htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Тогда мы сможем увидеть функциональные модули, которые обновляют базу данных или
внешние системы.
Нужно иметь ввиду, что точки остановка для процесса обновления нужно расставлять по новой.
(равно как и breakpoints и wacthpoints). Это полезно при отправке печатных форм и печати при
одновременном сохранении документа.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
И ставим галочку
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Система сообщит, что отладка включена. Если не сообщит, значит что-то пошло не так.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Способ2 – из отладчика
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Обращаю внимание, что в справке для версии 750 новый отладчик уже называют Standard
Debugger (насколько мог заметить).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Заметим, что для нового отладчика требуется 2 окна (текущее окно (приложения) и еще одно для
отладчика); для классического – одно окно.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Когда будет выполнен COMMIT, то этот фукнциональный модуль будет в транзакции SM59
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Ноты:
Note 668256 - Using HTTP/external debugging and
Note 751872 - Problem analysis with HTTP or external debugging)
Note 868830 - Cannot debug an RFC in a HTTP session, if
С помощью этого оператора происходит установка PF-STATUS, перейдя в который можно понять,
какие функции активируются и деактивируются (с помощью EXCLUDING fcode).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В ALV можно устанавливать дополнительно кнопки с помощью toolbar (но и этот способ
используется) (об ALV поговорим позднее).
MODIFY SCREEN
Анализирование статуса полей (почему определенное поле открыто или закрыто для изменения)
можно сделать с помощью оператора MODIFY SCREEN.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Однако полей для анализа может быть много и не всегда может быть очевидно, что
определенное поле принадлежит этому экрану (или подэкрану). SCREEN недоступна как
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В этом случае становится понятным полный перечень полей, который лежит в таблице SCREEN для
конкретного участка кода.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Отмечаем галочку "Layer-Aware Debugger Active" и в поле Packages / Classes / Programs указываем
нужное нам пространство имен (мы можем задать несколько пространств, воспользовавшись
множественным выбором). Затем нажимаем ENTER (зеленая галочка).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Следующее нажатие кнопки "Next Object Set" приведет к остановке в другом (следующем) блоке,
которые удовлетворяет критериям, указанным при активации Debugger Layer (отладка областей
кода).
Кроме того, мы можем настраивать профили областей кода в транзакции SLAD. Тогда в самой
отладке нам нужно будет всего лишь выбрать нужный профиль, в котором уже будут пред
настроены объекты для выбора.
Запускаем транзакцию SLAD и переходим на вкладку Object Sets. На этой вкладке нам нужно
создать наборы объектов, которые мы будем анализировать при отладке.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Создадим два набора выбора: SET01 и SET02. В первом укажем все программы начинающиеся с Z,
а во втором - все функциональные модули, начинающиеся Z* и Y*.
(мы бы могли, конечно, все сделать в одном наборе, но для целей изучения посмотрим создание
объектов в разных наборах).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
После этого сохраняем Object Set (потребуется запрос и пакет для объекта, так как это переносная
настройка).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Теперь запустим отладку в транзакции VA03 и в Layer Debugging будем опираться на профиль.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
и теперь с помощью кнопки "Next Object Set" мы можем переходить между областями кода.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://blogs.sap.com/2010/07/27/layer-aware-debugging-in-nw-70-ehp2/
Вывод: Чтобы в будущем (в системе тестирования или даже в продуктиве) тратить меньше
времени на отладку или поиск ошибки, можно создавать профили областей отладки кода в
транзакции SLAD и переносить их вместе с разработкой. Тогда Вы сможете довольно быстро
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Отладка макросов
Для отладки макросов используется нужно использовать отладку BYTE-кода. При этом, где
вызываются макросы мы должны знать заранее. Это можно узнать по поиску кода или с помощью
скриптинга.
Непосредственно перед макросом нужно перейти в режим ABAP Byte code (debug macro); пункт
меню можно вызвать правой кнопкой мыши.
Давайте рассмотрим пример; пусть у нас определен некий макрос в программе. Непосредственно
перед макросом ставим точку останова и запускаем программу.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Нам нужно окткрыть дополнительный текст ABAP-кода, чтобы в одном режиме смотреть
непосредственно MacroDebug, а в другом ABAP-код. Для этого нажимаем на инструмент (New
Tool)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
один из экранов с исходным кодом переводим в режим ABAP Code (Macro Debug); для этого
щелкаем правой кнопкой мыши
Мы видим, что система зашла в макрос (в левом экране стрелочка напротив макроса) и в правом
экране видим оператора IF, CHECK Затем BRAF, PROVIDE и MOVE.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Именно так и происходит отладка макросов (это мой рекомендуемый способ с тремся экранами:
ABAP-кода, ABAP-byte кода и перечнем переменных).
На тему макросов есть дискуссии. ABAP-справка говорит, что макросы нужно использовать только
в особых случаях.
Полезные ссылки
https://blogs.sap.com/2013/11/17/single-step-debugging-on-macro/
https://blogs.sap.com/2012/10/28/use-macros-use-them-wisely/
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Чтобы понять в каком месте ABAP кода происходит вызов трансформации, а также сам
идентификатор (имя) трансформации нужно поставить точку останова на оператор CALL
TRANSFORMATION
Чтобы произвести отладку самой трансформации нужно зайти в транзакцию XSLT_TOOL, указать
имя трансформации и нажать DISPLAY.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://help.sap.com/saphelp_erp60_sp/helpdata/en/c3/225b5354f411d194a60000e8353423/content.
htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Диалоговые модули
Вы можете вызвать диалоговые модули из логики обработки экрана (команда MODULE). Вы
можете написать диалоговый модуль на каждое состояние (PBO, PAI; ввод пользователя:
проверка значений и вызов справки) любого экрана программы. PAI-модуль и PBO-модуль
определенного экрана формируют шаг диалога. Взаимодействие между логикой обработки
данных и логикой экрана обеспечивается диалоговым процессором (Dialog Processor).
Конструктор программы
После загрузки исполняемой программы (executable program), пула модулей (module pool),
группы функций (function group) или пула подпрограмм (subroutine pool), один специальный блок
может быть исполнен только один раз. Этот блок обработки определен как событийный блок,
использующий оператор LOAD-OF-PROGRAM. LOAD-OF-PROGRAM имеет то же назначение, что и
конструктор в ABAP-классах.
Вы можете не создавать логику работу экрана сами, и можете не создавать диалоговые модули
для PBO и PAI-модулей. Данные передаются между селекционным экраном и ABAP-программой с
помощью полей (параметры и селекционные таблицы) при определении селекционного экрана в
декларативной части ABAP-программы.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Процесс следующий:
4. Если используется ЛБД (логическая база данных), то она вызывает последующие блоки событий
в этом месте.
Процедуры
Процедуры представляют собой вызываемые блоки обработки, которые содержат интерфейс и
локальные данные. Подпрограммы
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Функциональные модули
Функциональные модули представляют собой внешний функции с предопределенным
интерфейсом. Вызов функциональных модулей осуществляется с помощью оператора CALL
FUNCTION. Функциональный модуль определяется с помощью конструкции FUNCTION и
завершается с помощью конструкции ENDFUNCTION.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Методы
Методы, по сути, представляют собой функциональные возможности класса. Как и
функциональные модули, у них имеется интерфейс. Вызов методов выполняется из ABAP-
программы с использованием конструкции CALL METHOD. Методы объявляются конструкцией
METHOD и завершаются конструкцией ENDMETHOD.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Каждая программа имеет свой тип, которые определяется в атрибутах программы при создании
атрибута. Существует несколько типов ABAP-программ и каждый имеет свою цель.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Initialization;
At selection-screen;
Start-of-selection;
End-of-selection;
Load-of-program;
Top-of-page during Line Selection;
At Line-Selection;
at pf<nn>
Экраны
Коды транзакций
GUI -status
ABAP-программу
Пул модулей также включает 4 различных события, которые связаны с экраном и элементами.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Пример: ZIF_EXCEL_READER.
Пул подпрограмм
Программы типа S. Объявляются ключевым словом PROGRAM.
Пример:
BPR_SALESDOC
BPR_SALESORDER
BPR_SALES_DOCS
ISA_CUSTOMER_SALES_READ=======FT
RV_SALES_DOCUMENT_COPY========FT
SD_SALESDOCUMENT_CHANGE=======FT
SD_SALESDOCUMENT_CREATE=======FT
SD_SALES_ACTIVITY_CHECK_INPUT=FT
SD_SALES_DOCUMENT_READ========FT
SD_SALES_DOCUMENT_SAVE========FT
SD_SALES_HEADER_READ==========FT
SD_SHIPMENT_FOR_SALESORD======FT
Группа функций
Программы типа F. Создаются через Function Builder. Все функциональные модули созданы в
рамках какой-нибудь группы функций.
Include-программы
Программы типа I. Содержат определенный код. При генерации код инклюда включается в
программы. После генерации программы содержат весь код со всех инклюдов.
Интернет источники
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://help.sap.com/saphelp_erp60_sp/helpdata/en/fc/eb2d5a358411d1829f0000e829fbfe/conten
t.htm
https://help.sap.com/doc/saphelp_erp60_sp/6.0/en-
US/fc/eb2d5a358411d1829f0000e829fbfe/frameset.htm
https://help.sap.com/saphelp_erp60_sp/helpdata/en/fc/eb2d67358411d1829f0000e829fbfe/conten
t.htm
http://help-legacy.sap.com/abapdocu_751/en/index.htm
https://help.sap.com/saphelp_nw70/helpdata/en/41/7af4bca79e11d1950f0000e82de14a/frameset.ht
m
https://help.sap.com/saphelp_nw70/helpdata/en/41/7af4bfa79e11d1950f0000e82de14a/content.htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В ABAP существуют инструменты, позволяющие анализировать как синтаксис кода, так и его
реальное выполнение. В этой части мы рассмотрим то, что нам полезно для анализа и постановки.
Этот инструмент – прежде всего для анализа загрузки системы; то есть мы можем заранее найти
узкие места системы, не дожидаясь того, как возникнет ситуация.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В разделе Display Mode мы укажем опцию группировки (сделаем все записи, сортированные по
времени)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Эта информацию разбита на 4 блока: Время выполнения рабочего процесса (Time), DB (время на
работу с базой данных), Task/memory (затраченное время) и информация по клиенте. В случае,
если были RFC вызовы – будет информация по ним.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В Wait смотрим на показатель Processing time – это то, сколько времени программа
обрабатывалась Application Server.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В блоке DB – смотрим на все столбцы и в особенности на Avg.time / row (ms) – от каждой базы
даны можно требовать своего результата. На современных Oracle и HANA – менее 1 ms – Это
норма; если больше, то стоит задуматься. Для старых БД – менее 10 ms – это норма.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Вывод: инструмент STAD показывает данные статистики; при этом анализируется вся система и
все действия пользователей. Что посмотреть результат анализа, не нужно запускать транзакции
повторно. В транзакции ST03N содержится та же информация, но в
структурированном/агрегированном видах. Однако, чтобы детальнее разобраться в причинах –
нужно использовать другие инструменты для анализа запроса БД и выполнения ABAP-кода.
Useful links
https://blogs.sap.com/2013/06/11/how-to-use-stad-to-show-historical-data/
https://wiki.scn.sap.com/wiki/display/SRM/STAD+-+ABAP+Business+Transaction+Analysis
https://blogs.sap.com/2007/01/12/statistical-records-part-1-inside-stad/
https://blogs.sap.com/2007/03/16/how-to-read-st03n-datasets-from-db/
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Также трассировка позволяет быстро определить таблицы, к которым идет обращение, что
облегчает понимание того или иного решения (или объекта: логистических заказов / Fi-
документов, технических таблиц и т.д.).
Поле Комментарий
SQL Trace Галочка, включающая SQL-трассировку
BUF Trace
Enqueue Включение трассировки объектов блокирования.
Trace
RFC-Trace Включение трассировка RFC-вызовов
HTTP-Trace Включение трассировки HTTP запросов (в том числе OData - запросов)
APC Trace ABAP Push Channels/ Kernel Trace
Подробнее об ABAP Channels –
https://help.sap.com/saphelp_nw75/helpdata/de/5a/68bfb5dae8474fa1289c10d45a1
7fe/frameset.htm
https://help.sap.com/saphelp_nw74/helpdata/en/8c/b48d105b83469bb1266e7dcb413
31f/content.htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
больше вероятности, что в файл запишется вся информация и (!!!) то, что результаты трассировки
будет легче анализировать; это важно, так как именно с целью анализа трассировка и делается.
Также трассировку следует делать с 3-4 раза, чтобы были заполнены буферные таблицы и
выполнились другие разовые операции по установка соединения с БД.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
На следующем экране мы уже устанавливаем то, что будем выбирать из файла трассировки и
показывать на экране. Мы можем задать также как и на 1ом экране виды трассировок и критерии
фильтрации.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В столбце Object Name мы видим имя таблицы (объекта), к которому происходит обращение
В столбце Time - время, когда было обращения; в случае сортировки/фильтрации этот столбец
помогает восстановить информацию в хронологическом порядке.
Столбец Duration – это время, в течение которого выполнялся запрос; а количество в столбце
Records показывает сколько записей было возвращено (в случае SELECT) или записано (для
INSERT); с помощью столбца RECORS мы можем отсеять те запросы, которые не вернули нам
данные (в случае, если мы ищем нужную таблицу).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Более того мы можем перейти непосредственно в место в коде, откуда произошел данный вызов:
либо с помощью специальной кнопке либо двойным щелчком по Program name.
С помощью двойного щелчка по кнопке DDIC Information или по Object Name мы сможем получить
информацию по таблице.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Двойной щелчок по выражению покажет какие именно значения, в какие поля попадают.
Полезно, когда запрос не помещаются в 128/256 символов, отведенных для ячейки ALV.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
С помощью кнопки «Display Execution Plan» мы можем понять, почему система выбрала тот или
иной индекс, например. Анализ нужно проводить, начиная с шага 1 (он находится дальше от
начала).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Система откроет информацию о том, какой индекс использовался в запросе. Также мы можем
посмотреть статистику по таблице
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
С помощью кнопки Individual records (предварительно нам нужно выделить какое-то количество
записей, по которым мы хотим посмотреть информацию) мы можем увидеть операции по
запросу: PREPARE, OPEN, FETCH.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Из этой информации мы можем увидеть также, сколько времени было потрачено на операции,
сколько записей было обработано (все то же самое, но в более детальном представлении с
разделением по операциям с курсором базы данных). Если операция PREPARE и OPEN довольно
часто, то лучше сделать повторную трассировку.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В столбцах Duration, Records, Duration per Records мы видим время исполнения, количество
обработанных записей, а также продолжительность на одну запись.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При работе с Structure and Value Identical statements информации необходимо иметь ввиду
следующее:
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Также стоит иметь ввиду, что мы можем делать трассировку запросов, напрямую из отладчика.
Useful links
https://archive.sap.com/discussions/thread/630359
https://blogs.sap.com/2007/09/05/the-sql-trace-st05-quick-and-easy/
https://wiki.scn.sap.com/wiki/display/ABAP/Explain+Plan
https://blogs.sap.com/2010/03/04/explaining-the-explain-plan/
http://www.itpsap.com/blog/2014/12/21/abap-database-sql-analysis-performance-trace-part-1/
Книга SAP-PRESS «ABAP Performance Tuning»
http://sapland.ru/books/ABAP_Performance_Tuning.html
http://www.itpsap.com/blog/2016/11/12/running-abap-traces-in-the-new-debugger/
До версии ECC 6.0 использовалась транзакцию SE30; сейчас ее заменяет транзакцию SAT. Если мы
зайдем в транзакцию SE30, то получим об этом сообщение.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
На первом шаге нам нужно создать вариант транзакции, в котором мы укажем, что именно нам
нужно проверять. Вариант может быть общий или специфичный для пользователя.
Перед нами три вкладки: Duration and Type; Statements; Program Components.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Блок «Aggregation»
Блок «Options»
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Measure RFC and Update Calls – указывает, что нужно учитывать RFC-вызовы и Update-вызовы.
Explicit Switching.. – позволяет включать/выключатть трассировку в любом месте программы
либо через команды: /ron или /roff. Или через путь System -> Utilities -> Runtime Analysis ->
Switch On / Switch Off
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Чем нам может помочь вариант и все эти ограничения? Тем, что результат трасисровки
будет меньше и «по делу», а чем меньше он будет, тем легче его можно
проанализировать и найти нужный участок кода или причину проблемы.
Если мы хотим отображать имена внутренних таблиц, то отмечаем флажок «Determine Names of
Internal Tables»
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Система соберет данные по трассировке и покажет несколько рабочих столов (по образу
отладчика)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При этом система покажет все операции в том числе внутренние (такие как проверки ФМ
DB_EXISTS_FUNCTION, проверки SQL-параметров и, нормадизации отображения, связанные с
вызовами ФМов «CONVERSION_*»). Для каждой строчки система покажет общее время
выполнения команды и чистое время. Чистое время рассчитывается как общее время минус
время выполнения вложенных конструкций. Двойной щелчок позволит перейти в место кода.
При этом мы можем менять инструменты динамически по образу, как это реализовано в
отладчике.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Для возвращения
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Обратим внимание еще на несколько функции SAT: фильтр и сравнение трассировок, Tips and
Trick.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Evaluate –
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Useful links
https://blogs.sap.com/2007/11/13/the-abap-runtime-trace-se30-quick-and-easy/
https://archive.sap.com/discussions/thread/817524
https://blogs.sap.com/2009/12/11/abap-runtime-analysis-se30-how-to-analyze-abap-program-flow/
https://archive.sap.com/discussions/thread/720494
https://blogs.sap.com/2011/01/18/next-generation-abap-runtime-analysis-sat-introduction/
https://blogs.sap.com/2011/01/18/next-generation-abap-runtime-analysis-sat-how-to-analyze-
performance/
https://blogs.sap.com/2011/01/18/next-generation-abap-runtime-analysis-sat-how-to-analyze-
memory-consumption/
https://blogs.sap.com/2011/01/18/next-generation-abap-runtime-analysis-sat-how-to-analyze-
program-flow/
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Позволяет:
1) выполнить анализ top-down (Сверху вниз) и увидеть время выполнения каждого блока;
2) найти код клиента (последний измененный код)
3) найти узкие места (там, где CPU очень загружен)
Начальный экран транзакции ST12 состоит из нескольких кнопок, определяющих, что именно
нужно трассировать и как.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
После небольшого (зависит от количества выполненных действий) нажимаем на кнопку Full screen
«Зеленая галочка» – трассировка собрана без ошибок; «желтая молния» - трассировка собрана, но
с ошибкой.
SQL-анализ – это по сути вызов транзакции ST05 (вспомним бегло, что показывает) – показать
Duration.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Выделяем нужный нам блок и нажимаем кнопку TopDown call tree; система отобразит иерархию
вызовов с точки зрения конкретного блока кода.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Этот список может быть полезен для анализа узких мест и кода клиента.
Useful links
https://blogs.sap.com/2009/09/08/single-transaction-analysis-st12-getting-started/
https://blogs.sap.com/2013/07/17/st12-trace-step-by-step-instruction-on-how-to-use-it-for-analysis/
755977 – ST12 “ABAP Trace for SAP EarlyWatch/GoingLive”
https://wiki.scn.sap.com/wiki/display/ABAP/Single+Transaction+Analysis?original_fqdn=wiki.sdn.sap.
com
https://blogs.sap.com/2009/10/30/st12-storing-additional-information-and-managing-traces/
Таблица SNAP (а именно в ней хранятся данные по дампам) обычно очищается через каждый
период времени; но если Вам нужно сохранить дамп и чтобы он не исчез из системы, то нужно
нажать кнопку «Keep/Release»
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Возникновение дампа в системе может быть по разным причинам и исправление дампа тоже
может быть различное.
Мы можем увидеть краткое описание, а также перейти к место кода, где случилась проблема.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Useful links
https://help.sap.com/saphelp_nw73/helpdata/en/b1/34ab1cd8e44562b0fee9524c638cca/content.ht
m
https://help.sap.com/saphelp_nw73/helpdata/en/b1/34ab1cd8e44562b0fee9524c638cca/frameset.
htm
1699048 - Unexpected short dumps in ST22
2200714 - Dumps in ST22 show ?????? in ALV list
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Useful links
https://help.sap.com/saphelp_nw70ehp2/helpdata/en/49/243804855616b6e10000000a42189d/fra
meset.htm
https://help.sap.com/saphelp_nw70ehp2/helpdata/en/49/255a8a29ac16b7e10000000a42189d/fram
eset.htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://archive.sap.com/discussions/thread/3230957
https://help.sap.com/saphelp_nw70ehp2/helpdata/en/49/243804855616b6e10000000a42189d/fra
meset.htm
https://help.sap.com/saphelp_nw70ehp2/helpdata/en/34/f0b36353a34bdba328ce4f717d16c6/fram
eset.htm
А также приложенная статья.
Теперь рассмотрим инструменты по проверке статичного кода, а не кода в Runtime (кода во время
выполнения). Эти инструменты помогают предварительно оценить код, еще до того, как он может
причинить проблемы производительности.
Транзакции SLIN и SCI могут быть полезны при сдаче разработки (когда Вы отдаете Вашу
разработку заказчику и когда, наоборот, принимаете). Транзакции позволяют обратить внимание
на недочеты в коде программы, которые возникают вследствие «вольности или ускоренности
разработчиков» (например, хард код, создание переменных не по convention и прочие вольности
для ускоренного написания кода)
В процессе разработки могут создаться переменные, участки кода, которые в дальнейшем были
заменены другими, тем не менее они остались в коде. Эта проверка поможет выявить такие
участки кода. Кроме того, в случае интернационализации/локализации (когда используется
несколько языков) этот инструмент укажет, где нужно использовать text-ttt (инструмент считает,
что такую конструкцию везде нужно использовать).
Давайте рассмотрим этот инструмент и что он может проверять/а что не может на пример
программы Z_8M2_XL_UPL. Запуск расширенной проверки делается либо с помощью транзакции
SLIN либо непосредственно из меню работы с программой (SE38 / SE80)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
На первом экране в качестве галочек представлено, что можно проверять. Каждая галочка, в
целом, говорит сама за себя; но если сделать F1 по любой галочке, система даст более подробную
справку о том, что именно проверяется.
Однако давайте сделаем пример использования инструмента, чтобы понять саму суть этой
проверки; нажимаем кнопку Run Checks (набор галочек оставляем как по умолчанию)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
После запуска система отобразит результаты проверки. Поставим курсор, например, на строку
MESSAGES и нажмем кнопку Display Single Text. Система уже более конкретней отобразит, что
именно она проверяет.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Делаем вывод, что этот инструмент направлен на создание чистого кода. SLIN можно
использовать для одной программы (или программы, включающей несколько INCLUDE),
результаты в этом случае будут не очень объемными и их можно обработать. Лучше делать
непосредственно перед сдачей проекта и делать выводы, чтобы не попадаться на проверках. Для
более расширенной проверки существует другой инструмент – SAP код инспектор (SCI).
Useful links
https://wiki.scn.sap.com/wiki/display/ABAP/Extended+Program+Check
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Иногда то или иное замечание code inspector нельзя (или будет неэффективным) исправить и
тогда нужно указать рядом с нужным участком кодом – псевдокод.
Начнем с создания варианта инспекции – то есть укажем, на что будет направлена наша проверка:
производительность, пространство имен, проверка на безопасность или все вместе.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Отмечаем галочками и задаем правила для того, что нужно будет проверять.
Например, уже на этом этапе мы можем найти потенциальные дампы «append <sorted_tabel>»
Проверка на assign
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Для контроля «за растрастанием» какого-то определенного класса мы можем поставить проверку
о количестве методов в нем
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Укажем проверяемый объект, укажем вариант инспекции (обращаем внимание, что нужно
разделять личные и общие варианты) и можно запускать проверку
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
И ожидаем выполнения.
Идем в результаты
И мы можем видеть результат того, что SAP думает по поводу нашего кода, по каждому
обозначенному пункту.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://blogs.sap.com/2013/09/19/how-to-trigger-atc-or-code-inspector-checks-during-the-release-of-
a-transport-task/
Сканнер кода
Транзакция CODE_SCANNER позволяет искать сканировать код на наличие в ней определенной
строки. Например, если нам нужно найти где используется параметр памяти, какая-нибудь
константа или комментарий.
Например, вы хотите узнать, где используются переменные с именем ZALV_TEST или оператор
WRITE в пакете
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Естественно, поиск может быть слишком большим и поэтому иногда стоит запускать эту
программу в фоновом режиме – система это позволяет
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
То же самое можно сделать с таблицей или полем таблицей или сообщением (что бывает
полезным для поиска места, где возникает сообщение). Заходим в транзакцию
Однако, этот инструмент не учитывает динамического вызова переменных. Тогда нужно ставить
ТЗ или принимать во внимание то, что когда-то сообщение придется искать. Вот как нужно
поступать в случае динамического сообщения или сообщения в IDOC.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Это удобный и быстрый инструмент для поиска кода клиента, настроечных таблиц и нот
(применимых и установленных).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Также можем просмотреть Customer code и список настроечных таблиц, которые находятся в этом
компоненте.
https://blogs.sap.com/2014/09/08/anst-start-and-stop-the-trace-whenever-you-want/
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Вторым способ для поиска стандартных доступов к объекту нужно использовать SAP NOTE и SDN
Community.
Для тестирования BAPI нужно иметь ввиду функционал Test sequence. Заходим в транзакцию SE37
на просмотр и переходим по меню.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Тестовые варианты:
TEST_DONE_DATA
test_cond_ZAP0_7
c WAIT
Покажем на примере.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В SAP ERP имеются типовые и общие приложения/программы, которые участвуют (или могут
участвовать) во многих бизнес-процессах/разработках. К таким «типовым приложения» относятся
печатные формы (pdf-формуляры/Adobe, smartforms, sapscript), обработка IDOC, код в customer
function, user-exit, Enhancement, BTE, substitution, ALV-отчеты, анализ полномочий пользователя,
события WF, создание XML-файлов.
Печатные формы
Инструменты работы с печатной формами в определенной мере стандартизированы. При разборе
ошибки с печатной формой (любого вида) нам нужно, прежде всего, определить правильно
программу печати, сам объект формуляра.
Запись в таблице TNAPR говорит о том, что в программе ZV_RVADOR01 будет вызвана
подпрограмма ENTRY.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Однако в разных модулях вызов программы может делаться по-разному, кроме того довольно
много отдельно стоящих программ, в которых логика определения блока кода для формуляра и
самого формуляра может быть специфической (вплоть до того, что она будет динамической);
поэтому важно знать через какие блоки вызывается формуляр.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Язык: E
Код формуляра: ZSD_RVORDER02
Для этого зайдем в формуляр через транзакцию SE71 и посмотрим, как он выглядит (обратим
внимание на язык).
Переходим в Layout
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Также обратим внимание на FORMAT TAG типа E/ - это начало блоков, которые могут быть
повторены в Window main (и только в этом окне они могут быть повторены).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Синтаксис вывода (ограничение длины, жирный шрифт – можно указывать как через стили, так и
через дополнительные операторы). Подробнее здесь
https://wiki.scn.sap.com/wiki/display/ABAP/SAPscript#SAPscript-HowcanIdebugmySAPscript?
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Дополнительный код в SAP SCRIPT можно вложить с помощью вызова подпрограмм из кода
SAPSCRIPT
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Система остановится в этом ФМе и мы можем определить параметры: как формуляр, так и
программу.
Как видим, имя ФМа - /1BCDWB/SF00000001. Это динамически сгенерированное имя. Именно на
его основе можно сравнивать версии и ставить точки останова в самое смартформе.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Смартформы предоставляют выше гибкость при выводе таблиц, окон и в целом всех блоков кода;
но эта гибкость достигается структурированностью этой формы.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Которые мы можем заполнить уже внутри SMARTFORM и использовать для заполнения значений
ячеек и таблиц.
В ячейках мы можем указать «твердый текст», ссылку на текст из SO10 (стандартный длинный
текст).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
PDF-формуляры
PDF формуляры работают посредством дополнительной службы ADS. Эту функциональность
нужно встраивать отдельно. Более того, чтобы была возможность просматривать шаблоны
формуляров нужна специальная программа Adobe Lifecycle Designer. Ее можно скачать с SAP
Service Market Place (обычно это может сделать только базис, то есть супер-пользователи).
Для проверки работы сервера ADS, а также ознакомление с возможностями PDF, можно
использовать программы FP_TEST_*.
https://help.sap.com/doc/saphelp_erp60_sp/6.0/en-
US/fc/eb2d5a358411d1829f0000e829fbfe/frameset.htm
https://help.sap.com/erp2005_ehp_04/helpdata/en/46/2d15ce7f944250e10000000a1553f6/framese
t.htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Код инициализации
Код FormCalc предназначается для управлением состояния того или иного элемента:
открыть/скрыть элемент, если значение одной ячейки, то окрасить в определенный цвет и т.д.
FormCalc не имеет отладчика. Значение переменных можно выводить при помощи оператора для
вывода сообщений – messageBox()
https://blogs.sap.com/2014/06/23/how-to-debug-adobe-interactive-forms-with-javascript-or-formcalc/
http://help.adobe.com/en_US/livecycle/10.0/DesignerScriptingBasics/index.html
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
4) Жмем скрепку, сохраняем XFD.xml (лучше как <вид вых. документа>.xml , например
ZSPE.xml )
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Выгрузка в Excel
Стандартный подход к выгрузке в Excel у SAP – это выгрузка при помощи OLE. Однако, энтузиасты-
разработчики создали свои подходы (продукты), которые позволяют выгружать в Excel.
Подход
Выгрузка через Если выгрузка идет этим способом, то точку останова нужно
ZWWW_OPENFORM ставить в ФМ ZWWW_OPENFORM
Автор: Parazit
http://sapboard.ru/forum/vi
ewtopic.php?f=13&t=4880&
view=unread#unread
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://wiki.scn.sap.com/wik
i/display/ABAP/abap2xlsx Call transformation (с помощью этого оператора идет создания xml
файлов; затем с помощью стэка можно прояснить ситуацию для
себя)
Полезное сочетание клавиш: Ctrl+Shift+[правая кнопка мыши] на любом пустом месте ALV Grid.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
На основании того, в каком месте остановится программа, мы можем понять, что используется.
Также мы видим, что на вход этому методу подается внутренняя таблица - me->T_OUTTAB[]
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Эта таблица отвечает за каталог полей (за то. какие поля будут отображаться, а какие будут
скрыты). Через поиск по коду текста программы или через точку наблюдения можно определить,
где заполняется эта таблица.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Также кнопки могут добавляться и обрабатываться с помощью экрана. Тогда нужно поставить
точку останова на оператор SET PF-STATUS.
Из стэка мы видим, что вызывается экран 9000 в функциональном модуле Z_Z8M1_SCR9000. (все
это находится в программе SAPLZ8M1_PO_TOOL, группе функций Z8M1_PO_TOOL ).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Нужно определить экран, в котором открывается ALV-экран (мы это определили на предыдущем
шаге) и зайти в PAI модуль.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Чтобы познакомиться подробнее с возможностями ALV можно зайти в пакет SLIS и посмотреть на
программы. Здесь представлены практически все возможности ALV.
Транзакция Описание
WE02 = Отчет по обработанным IDOC со статусами.
WE05 Из конкретного IDOC мы можем узнать тип сообщения, настройки
партнера
WE20 Проверка настроек партнера
WE30 Просмотр типа IDOC.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Прежде всего, нужно прочитать сообщение об ошибке (если оно есть). Причина "падения" IDOC
может быть не связанна напрямую с бизнес-процессом. Это могут быть: нерасширенные данные,
неприсвоенные орг.структуры; по таким проблемам система явно обозначит причину через
сообщение и Вы сэкономите свое время на исследования.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
С помощью транзакции WE57 мы можем определить ФМ, с помощью которого идет обработка
IDOC данного типа.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Эти данные хранятся в таблице EDIFCT (IDoc: Assignment of FM to log. message and IDoc type)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При отправке IDOC через выходные документы удобно использовать программу RSNAST0D
(Generic output issue). С ее помощью можно тестировать выходные документы; и если к
выходному документу привязан IDOC, то данную программу весьма удобно использовать.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Для использования пакетного ввода необязательно даже писать отдельную программу можно
использовать возможности регистратора пакетного ввода.
К регистратору пакетного ввода (Batch Input Recorder) можно перейти практически из любого
экрана SAP
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Выбрав режим E - система остановится только на тех экранах и полях, где будет какая-либо
ошибка; ошибка может быть связана как с логикой проверки бизнес-данных, так и с ошибками в
самом пакетном вводе (например, не предусмотрены данные для какого-либо экрана или
используется ошибочная команда).
Эти два режима пакетного ввода весьма полезны при отладки программы и понимании того,
почему пакетный ввод "отрабатывает не так, как от него ожидается".
в ABAP пакетный ввод может быть использован при помощи оператора CALL TRANSACTION using
bdc_data.
http://help-legacy.sap.com/abapdocu_70/en/ABAPCALL_TRANSACTION_SHORTREF.htm
https://help.sap.com/saphelp_erp60_sp/helpdata/en/fa/09715a543b11d1898e0000e8322d00/framese
t.htm
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В ABAP-коде нам нужно будет заполнить данные для пакетного ввода (которые мы получили на
шаге выше) и вызвать оператор CALL TRANSACTION с соответствующими параметрами
Более того, чтобы пошагово просмотреть выполнение пакетного ввода, вызываемого через
самописный ABAP-код нужно импользовать параметр opt-dismode. Этот параметр может
принимать значение E (режим только ошибок), A (видимый режим) и другие.
Замещения в модуле FI
http://sapland.ru/articles/stats/rabota-s-zamescheniyami-fi.html
http://sapland.ru/articles/stats/rabota-s-zamescheniyami-fi-chasti-2.html
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
FI_SUBSTITUTION_DOC
FI_SUBSTITUTION_HEADER
FI_SUBSTITUTION_ITEM
и проверить значение до и после. Таким образом будет понятно, стоит ли исследовать замещения
FI или дело в чем-то другом.
Замещения в модуле PS
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Работа с расширениями в PS описана в нотах (и в связанных с ними нотах тоже есть полезная
информация):
https://launchpad.support.sap.com/#/notes/358473
https://launchpad.support.sap.com/#/notes/440186
Замещения в модуле CO
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Надо также заметить, что работа с замещениями (по всем модулям и событиям), а также
Validation можно выполнить в транзакции GGB0 и GGB1.
В пакете GVAL также представлены другие полезные транзакции при работе с замещениями.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Деривация в модуле CO
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
1 https://wiki.scn.sap.com/wiki/display/ERPFI/Top+down+Distribution+explained+with+an+exampl
e
2 https://wiki.scn.sap.com/wiki/display/ERPFI/Troubleshooting+Guides+-+COPA
3 https://wiki.scn.sap.com/wiki/display/Community/Add+User-
Defined+Characteristics+to+Operating+Concern
4 https://launchpad.support.sap.com/#/notes/932912/E
(KEDR: Termination after table access)
5 https://wiki.scn.sap.com/wiki/display/ERPFI/How+to+analyze+derivation+analysis
6 https://wiki.scn.sap.com/wiki/display/ERPFI/Derivation
Также при работе с BTE могут быть полезными ссылки, перечисленные в ниже
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
1 http://sapland.ru/articles/stats/bte-business-transaction-events-2.html
2 https://wiki.scn.sap.com/wiki/display/ABAP/BTE+-+Business+Transaction+Event
3 https://blogs.sap.com/2014/05/13/how-to-search-bte/
Customer Function
Customer Function - Это функциональный модуль, в котором есть Z-инклюд, в котором можно
писать код клиента.
Вызываются данные ФМ через оператор call customer-function (по этому оператору в программе
можно найти).
https://help.sap.com/http.svc/rc/abapdocu_751_index_htm/7.51/en-US/abapcall_customer-
function.htm
1 http://sapland.ru/articles/stats/upravlenie-proektami-rasshirenii-v-sistemah-tehnika-
customerexits-polizovatelisk.html
2 https://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=107774353
3 https://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=189893877
Чтобы найти возможные user-exit можно просто зайти в программу (например, SAPMV45A) и
обратить внимание на include, помеченные комментарием user-exit.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Также мы можем определить, в каком месте вызывается данная подпрограмма (либо через поиск
либо просто поставить точку останова и прогнать операцию с объектом).
1 http://sapland.ru/articles/stats/userexits-polizovateliskie-podprogrammi.html
2 https://wiki.scn.sap.com/wiki/display/ERPLO/SD+User+exits
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Формулы/предпосылки в SD/MM
При переносе новой формулы нужно не забывать помещать в запрос программу RV80HGEN.
(https://archive.sap.com/discussions/thread/118726)
Follow-up function in QM
Настройка модуля RCM является наиболее гибкой по моему мнение, которая вобрала в себя и
BADI и BTE и принципы ООП.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
BADI
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Как показывает практика у некоторых BADI есть какая-то специфика использования, о которой
можно узнать из sap note или sdn.sap.com.
1 http://sapland.ru/articles/stats/badi-tehnologiya-vnedreniya-biznes-rasshirenii-
dopolnenii.html
2 https://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=133758980
3 https://wiki.scn.sap.com/wiki/display/SRM/BAdI+-+general+information
4 https://wiki.scn.sap.com/wiki/display/ABAP/Find+a+BADI
5 https://wiki.scn.sap.com/wiki/display/ABAP/BAdI
6 https://wiki.scn.sap.com/wiki/display/ABAP/Document+on+BADI
7
Enhancements
1 http://sapland.ru/articles/stats/rasshireniya-sistemi-enhancement-framework-chasti-1.html
2 http://sapland.ru/articles/stats/rasshireniya-sistemi-enhancement-framework-chasti-2.html
3 https://wiki.scn.sap.com/wiki/display/ABAP/How+to+do+Explicit+Enhancement
4 https://wiki.scn.sap.com/wiki/display/ABAP/Enhancements+Types
5 http://sapland.ru/articles/spj/2008/1/Novaya_kontseptsiya_rasshirenii_kak_metod_sovershenstv
ovaniya_programm_SAP_bez_ih_modifikatsii.html
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При этом рекомендуется включать системную отладку (/hs) – показать пример с ФМом
SMTR_KERNEL_CHECK_AUTHORITY.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
События и WF-события
Транзакции, полезные при работе с WF
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
На селекционном экране мы можем задать параметры для отбора нужны результатов и запускаем
отчет. В моем случае, я запущу отчет на всех параметрах, так как трассировка была активирована
мною на непродолжительное время.
В транзакции SWETYPV мы можем посмотреть события WF, которые привязаны к этим событиям
объектов.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Также, чтобы найти место вызова WF можно поставить точку останова на функциональные модули
https://wiki.scn.sap.com/wiki/display/ABAP/Brief+Overview+of+Workflow+Step-Types
https://wiki.scn.sap.com/wiki/display/ABAP/Workflow+Scenario+for+PO+Change
https://wiki.scn.sap.com/wiki/display/ABAP/SAP+Business+Workflow
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
переходим по меню
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Результат
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
мы можем отображать результат "в столбик" и "в строчку" - регулируется с помощью кнопки
"Single-Column/Parallel" (в левом верхнем углу)
Для сравнения версий между системами нам нужно: выбрать версию в текущей системе, нажать
на кнопку "REMOTE Comparison" (мы можем сравнивать не только активные версии)
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Для сравнения версий и вообще программ между собой можно использовать транзакцию SE39
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Система откроет текст программ: слева и справа; затем нажимаем кнопку "сравнить", и система
покажет места, где программы отличаются и совпадают.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
При создании смартформ у нас за кадром всегда создаётся определенный ФМ и нам нужно
сравнивать именно этот ФМ.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
В ярлыке указывается информация о системе, к которой идет подключение, а также может быть
информация о пользователе/логине/запускаемой транзакции и даже параметры в транзакции
(номер документа или параметр для запуска отчета).
Этот способ позволяет открыть документ, запустить отчет с помощью SAP Logon на основе
команды из внешней программы.
(!!!) непосредственно с помощью SAP Logon запустить любую транзакцию возможности нет;
так как не на каждое поле экрана можно найти нужный параметр и не каждое поле экрана
отображается при запуске той или иной транзакции. Например, транзакцию SE16N запустить
можно с пред указанной таблицей, а сделать выборку по определенным записям уже
затруднительно. Для преодоления этого ограничения есть другие варианты.
Содержимое файла
Код
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
[System]
Name=SYSID
Description = System_Descrition
Client = 500
[User]
Name=USERNAME
Password=PW_14EC7E1AD3F538
Language = EN
[Function]
Title = SAP Easy Access
Command=SESSION_MANAGER
[Configuration]
WorkDir=C:\Users\[windows_username]\Documents\SAP\SAP GUI
[Options]
Reuse=1
В файле может быть различный набор параметров и одним из параметров может быть пароль
Password=PW_14EC7E1AD3F538
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
/SAPDMC/LSSCREEN-PROJECT=Z01
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
http://sapland.ru/articles/stats/2012/1/sozdanie-bistrogo-vvoda-parolya-v-sistemu-sap-erp-ecc-na-
storone-klienta.html
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
После создания ярлыка в SAP Logon мы можем его преобразовать до файлика с расширением .sap
и под редактировать, а также мы можем преобразовать его содержимое до уровня команды.
Для этого перетащим файлик из SAP Logon на рабочий стол или в другую папку.
1) Добавить пароль
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
3) Изменить свойство reuse – чтобы создавать новое соединение или наоборот не создавать
его.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Запустим ярлык дважды и убедимся, что параметр Z02 проставился в нужном поле
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Для функционала как такового потребуется, скорее всего, больше, чем просто создать один
функциональный модуль.
Давайте посмотрим, как это может выглядеть (это не единственная возможная реализация,
естественно).
IF sy-subrc eq 0.
LOOP AT TABLESTRUCT ASSIGNING <fs_tabinfo>.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
ENDIF.
SELECT *
from dd04t
INTO CORRESPONDING FIELDS OF TABLE lt_data_el_text
FOR ALL ENTRIES IN TABLESTRUCT[]
WHERE rollname = TABLESTRUCT-rollname
and ddlanguage = sy-langu
.
IF sy-subrc eq 0.
ENDIF.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
CASE w_tab_wa-type_kind.
WHEN 'STRING'. w_typ = cl_abap_elemdescr=>get_string( ).
WHEN 'XSTRING'. w_typ = cl_abap_elemdescr=>get_xstring( ).
WHEN 'I'. w_typ = cl_abap_elemdescr=>get_i( ).
WHEN 'F'. w_typ = cl_abap_elemdescr=>get_f( ).
WHEN 'D'. w_typ = cl_abap_elemdescr=>get_d( ).
WHEN 'T'. w_typ = cl_abap_elemdescr=>get_t( ).
WHEN 'C'. w_typ = cl_abap_elemdescr=>get_c( p_length = w_tab_wa-
length ).
WHEN 'N'. w_typ = cl_abap_elemdescr=>get_n( p_length = w_tab_wa-
length ).
WHEN 'X'.
w_tab_wa-length = <fs_tabinfo>-INTLEN.
CASE <fs_tabinfo>-DATATYPE.
WHEN 'INT4'.
" w_typ = cl_abap_elemdescr=>get_n( p_length = w_tab_wa-length ).
w_typ = cl_abap_elemdescr=>get_i( ).
WHEN OTHERS.
w_typ = cl_abap_elemdescr=>get_x( p_length = w_tab_wa-length ).
ENDCASE.
WHEN 'P'.
TRY .
w_typ = cl_abap_elemdescr=>get_p( p_length = ( w_tab_wa-
length - w_tab_wa-DECIMALS )
p_decimals = w_tab_wa-
DECIMALS ).
CATCH CX_PARAMETER_INVALID_RANGE.
"w_typ = cl_abap_elemdescr=>DESCRIBE_BY_NAME( P_NAME = <fs_tabinfo
>-ROLLNAME ).
ENDTRY.
ENDCASE.
CLEAR la_comp.
la_comp-type = w_typ. "Field type
la_comp-name = w_tab_wa-name. "Field name ex: FIELD1
APPEND la_comp TO lt_tot_comp. "Add entry to component table
ENDLOOP.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
SELECT (ftab)
INTO CORRESPONDING FIELDS OF TABLE <dyn_tab>
from (tablename)
UP TO N_RECORD ROWS
WHERE (CONDITION)
.
IF sy-subrc eq 0.
CLEAR ls_content.
"ENDIF.
ENDIF.
TABLECONTENT[] = TABLECONTENT[].
TABLESTRUCT[] = TABLESTRUCT[].
TABLESTEXT[] = TABLESTEXT[].
ENDFUNCTION.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
theFunc.Exports("TABLENAME") = table_name
returnFunc = theFunc.Call
die_exception = theFunc.Exception
End Sub
Sub GetTableContent()
Dim functionCtrl As Object 'Function Control (Collective object)
Dim sapConnection As Object 'Connection object
Dim theFunc As Object 'Function object
Set functionCtrl = CreateObject("SAP.Functions")
Set sapConnection = functionCtrl.Connection
'
'Declaration
'
Dim linetab As Object
Dim TabDef As Object
Dim TabDefName As Object
Dim returnFunc As Boolean
Dim startzeil As Integer
Dim endcol As Integer
Dim table_name As String
Dim n_record As String
Dim n_fields As String
Dim where_condition As String
Dim start_char As Integer
Dim WriteCell As String
Dim Offset As Integer
'
'Logon with initial values
'
Worksheets(1).Select
Destination_System = ActiveSheet.Cells(11, 2).Value
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
' If sapConnection.logon(0, False) <> True Then ' < with screen
If sapConnection.logon(1, True) <> True Then ' without screen
MsgBox "No connection to R/3!"
Exit Sub 'End program
End If
startzeil = 1
returnFunc = theFunc.Call
die_exception = theFunc.Exception
If returnFunc = True Then
Set linetab = theFunc.Tables.Item("TABLECONTENT")
Set TabDef = theFunc.Tables.Item("TABLESTRUCT")
Set TabDefName = theFunc.Tables.Item("TABLESTEXT")
' Set linetab = theFunc.Imports.Item("CH_TABLECONTENT")
' Set TabDef = theFunc.Imports.Item("CH_TABLESTRUCT")
' Set TabDefName = theFunc.Imports.Item("CH_TABLESTEXT")
endcol = 0
Call display_header(TabDef, TabDefName, n_fields)
Call display_lines(table_name, linetab, TabDef, startzeil, endcol)
startzeil = endcol
Set customers = Nothing
Else
If die_exception = "NO_RECORD_FOUND" Then
Cells(startzeil, 1) = "No values exist for " + the_name
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
startzeil = startzeil + 1
Else
MsgBox "Error when accessing function in R/3 ! "
Exit Sub
End If
End If
'Close connection to R/3 !
'
functionCtrl.Connection.logoff
'
'Release the objects to free storage space
'
Set sapConnection = Nothing
Set functionCtrl = Nothing
j=1
For Each TabDef In table_def.Rows
Cells(1, j) = Trim(TabDef("FIELDNAME"))
j=j+1
Next
j=1
For Each TabDefName In table_name.Rows
Cells(2, j) = Trim(TabDefName("DDTEXT"))
j=j+1
Next
End Sub
Sub display_lines(TabName As String, ByRef line_table As Object, ByRef table_def As Object, start_zeil
As Integer, ByRef end_col As Integer)
'
'Display contents of customer table
'
bManyLines = False
If (bManyLines = False) Then
i=3
For Each Line In line_table.Rows
Offset = 1
j=1
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Leng = Trim(TabDef("LENG"))
WriteCell = Mid(Trim(Line("LINE")), Offset, Leng)
Cells(i, j) = WriteCell
Offset = Offset + Leng
j=j+1
Next
i=i+1
Next
End If
end_col = i
End Sub
Проверяем так:
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
http://www.eclipse.org/mars/
Устанавливаем версию
http://www.eclipse.org/downloads/packages/release/Mars/2
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
https://www.sap-press.com/sap-gateway-and-odata_3904/
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
/sap/opu/odata/IWFND/USERSERVICE/UserCollection
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Ссылка
http://<host_name:port>/sap/opu/odata/IWFND/USERSERVICE/UserCollection
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Метод TABSTRINGSET_GET_ENTITYSET
method TABSTRINGSET_GET_ENTITYSET.
data lv_tabname TYPE tabname VALUE 'DD03L'.
data lv_condition TYPE char100.
data lt_TABLECONTENT TYPE ZLSP_CHAR1250_T.
data lt_TABLESTRUCT TYPE LTR_T_DD03L.
data lt_TABLESTEXT TYPE BKK_TAB_DD03T.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
IF lv_length gt 0.
lv_tabname = lv_tabname+6.
ENDIF.
lv_condition = lv_condition+5.
" BREAK-POINT.
IF lv_tabname is INITIAL.
else.
" lv_tabname = iv_entity_name.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
ENDIF.
ENDIF.
endmethod.
UseFul links
Conver https://support.office.com/en-us/article/Split-text-into-different-columns-with-the-
t Text Convert-Text-to-Columns-Wizard-30b14928-5550-41f5-97ca-7a3e9c363ed7
to Tab
Split http://www.exceltrick.com/formulas_macros/vba-split-function/
Functi
on
VBA
OData https://blogs.msdn.microsoft.com/marcelolr/2010/02/16/consuming-odata-with-office-
call in vba-part-i/
VBA https://blogs.msdn.microsoft.com/marcelolr/2010/02/17/consuming-odata-with-office-
vba-part-ii/
https://blogs.msdn.microsoft.com/marcelolr/2010/02/18/consuming-odata-with-office-
vba-part-iii-excel/
Itab to https://archive.sap.com/discussions/thread/3550748
JSON
Query http://stackoverflow.com/questions/28052391/odata-sap-gateway-about-query-with-filter-
with and-expand-simultaneously
$filter
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Odta https://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-
v4 in actions-and-functions
.Net
http://www.odata.org/documentation/odata-version-2-0/uri-conventions/
.net https://archive.sap.com/discussions/thread/1446750
.net https://archive.sap.com/discussions/thread/3578601
useful links:
https://blogs.sap.com/2012/08/22/sap-connectivity-with-ms-excel/
As it appears wdtlog.ocx file was missing from c:\Program Files\Common Files\SAP Shared\
https://wiki.scn.sap.com/wiki/display/Snippets/Example+-
+create+a+dynamic+internal+table
http://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.nw.wpc.runtime.docs/libra
ry/abap/_abap/abap-code-
samples/Read%20Any%20SAP%20Table%20with%20Microsoft%20Excel.pdf
https://blogs.sap.com/2006/12/14/read-any-sap-tables-from-excel/
http://scn.sap.com/people/thomas.jung/blog/2004/09/09/receiving-e-mail-and-processing-it-with-
abap--version-610-and-higher
Далее в настройках транзакции SCOT необходимо сделать мэппинг адреса и класс обработчика.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Архитектура работы:
MS Exchange Server -> SAP ERP -> SAPconnect (SMTP Host) -> класс CL_SMTP_EXT_SAPCONNECT ->
класс ZCL_LSP000_MAIL_INBOUND.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
ro_ref = unique_instance.
endmethod.
Класс ZCL_LSP000_MAIL_INBOUND, метод IF_INBOUND_EXIT_BCS~PROCESS_INBOUND
method IF_INBOUND_EXIT_BCS~PROCESS_INBOUND.
DATA: sender TYPE REF TO if_sender_bcs.
DATA: sender_addr TYPE string.
DATA: lo_reply TYPE REF TO cl_send_request_bcs .
DATA: li_document TYPE REF TO if_document_bcs,
l_subject TYPE so_obj_des,
ls_text TYPE soli,
lt_text TYPE soli_tab.
TRY.
**** init
CLEAR e_retcode.
CLEAR es_t100msg.
**** Get a pointer to the reply email object
lo_reply = io_sreq->reply( ).
"ENDIF.
ENDIF.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
* system error
CATCH cx_os_object_not_found
cx_alert_recipient_unknown
cx_document_bcs
cx_send_req_bcs
cx_address_bcs.
TRY.
**** send reply
l_subject = 'Message could not be processed'.
**** build content for reply
ls_text = 'An internal system error occured!! Please send
the message again.'.
APPEND ls_text TO lt_text.
ls_text = 'If this error occurs again please call your sys
tem administrator.'.
APPEND ls_text TO lt_text.
endmethod.
Класс ZCL_LSP000_MAIL_INBOUND, метод SEND_REPLY
method SEND_REPLY.
* —————————————————————————————-
* send confirmation or error status mail
* —————————————————————————————-
data: lo_sender type ref to cl_sapuser_bcs,
ls_config type salrtsconf,
lo_reply_doc type ref to cl_document_bcs,
lo_alert_man type ref to cl_alert_manager,
lo_bcs type ref to cl_bcs,
l_rc type sy-subrc.
* set sender
" NOT MAILER
TRY .
lo_sender = cl_sapuser_bcs=>create( 'OLEGBASH' ).
CATCH cx_address_bcs.
ENDTRY.
* add sender
TRY .
call method io_reply->setu_sender
exporting
i_sender = lo_sender.
CATCH cx_send_req_bcs
cx_address_bcs
.
ENDTRY.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
TRY .
lo_reply_doc = cl_document_bcs=>create_document(
i_type = 'HTM'
i_text = it_content
i_subject = ip_subject ).
CATCH cx_send_req_bcs
cx_document_bcs
.
ENDTRY.
* set document
try.
io_reply->setu_document( lo_reply_doc ).
CATCH cx_send_req_bcs
cx_document_bcs
.
ENDTRY.
* no status messages required
try.
io_reply->setu_status_mail( 'N' ).
CATCH cx_send_req_bcs.
ENDTRY.
try.
io_reply->setu_requested_status( 'N' ).
CATCH cx_send_req_bcs.
ENDTRY.
* get facade
try.
lo_bcs = io_reply->getu_facade( ).
CATCH cx_send_req_bcs.
ENDTRY.
* set send immediately flag
try.
lo_bcs->set_send_immediately( 'X' ).
CATCH cx_send_req_bcs.
ENDTRY.
* send
try.
io_reply->release( ).
CATCH cx_send_req_bcs.
ENDTRY.
commit work.
endmethod.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
- Открыть документы
- запускать отчеты
- запускать функции в отчетах.
Tcode: ZTLSP000_UNI_CODE
Report: ZLSP000_UNI_CODE
[показать функционал]
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Но я решил пойти по пути создания файла для запуска (исполнения) и назвал его uni_file.
Uni file
Uni_file – Это xml файл который состоит из тэгов headerXX и LineYY, то есть из «общих,
обезличенных» тэгов заголовка и позиции (все тэги входят в общий тэг order).
Файл сам по себе может включать информацию о любом объекте; файл может быть небольшим и
большим по размеру.
В атрибутах этого узла содержится тип файла, который говорит о назначениях полей. Описание
(назначение и смысл каждого поля) может быть описана во внутренних таблицах SAP ERP, но это
не является обязательным условием для его обработки.
Класс ZCL_LSP000_UNI_FILE.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Это класс либо «выполняет» содержимое из файла, либо возвращает данные из uni_file во
внутренней таблице.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
С помощью uni_file мы можем передать любое количество параметров в любую программу без
расширения экрана в SAP (в общем случае, редактирование ABAP-логики потребуется).
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
<Tag11>310325932</Tag11></Line></Order>
Получается, что мы можем передать любую информацию для выполнения любого действия в
системе, так как мы можем передать информацию для запуска любого отчета и любой
транзакции, включая параметр.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
Современные ERP-системы (или практически любые системы учета) способны генерировать email.
Таким образом, с помощью данного способа можно развернуть быстро и надежно
интеграционный обмен данными; и это обойдется в минимум затрат по деньгам, по усилиям и по
времени.
*http://sen.sap.com/people/thomas.jung/blog/2004/09/09/receiving-e-mail-and-
processing-it-with-abap--version-610-and-higher
*И
*http://wiki.sen.sap.com/wiki/display/Snippets/Sample+Code+for+processing+In
bound+Ma+with+Adobe+Interactive+Forms
*" http://sen.sap.com/thread/756086
*И
*http://sen.sap.com/community/crm/blog/2005/10/02/inbound-mail-processing-
attach-files-to-opportunity
data binary_file TYPE xstring.
DATA : pdf_line TYPE solix . " SAPoffice: Binary data, length 255
DATA : nb_att(10) TYPE n. " Att(10) of type Numeric Text Fields
DATA : w_part TYPE int4 " Natural Number
, lv_strlen type i " Strlen of type Integers
, lv_char255 TYPE C LENGTH 255 " Char255 of type
, do_not_process TYPE C LENGTH 1 " Not_process of type
, lv_vbeln TYPE VBELN_VA " Sales Document
, lv_auart TYPE auart " Sales Document Type
, lv_vbe1n_tmp TYPE VBELN_VA " Sales Document
, lv_charl00 TYPE C LENGTH 100
, lv_char255_2 TYPE C LENGTH 255 " Char255_2 of type
, lv_char255_3 TYPE C LENGTH 255 " Char255_3 of type
.
FIELD-
SYMBOLS : <pdf_line> TYPE solix. " SAPoffice: Binary data, length 255
data ls_attachement_attributes TYPE BCSS_DBPA. " Attributes of a Documen
t Body Part
data attachement_attributes TYPE BCSS_DBPA. " Attributes of a Document B
ody Part
data: mail TYPE REF TO if_document_bcs " Document Interface for BCS
.
TRY .
* Get the email document that was sent.
mail = io_sreq->get_document( ).
* Get number of attachement in the mail
* If number is lower than 2 that means no attachement to the mail
nb_att = mail->get_body_part_count( ) - 1.
IF nb_att = 0.
"me->ADD_L0G( EXPORTING i_text255 = text-214 ).
else . " ELSE -> IF nb_att = 0
clear lv_char255_3.
lv_char255_3 = text-215.
" REPLACE all OCCURRENCES OF '$$$1' in lv_char255_3 with nb_att.
"me->ADD_LOG( EXPORTING i_text255 = lv_char255_3 ).
CLEAR w_part.
* Process each document
DO nb_att TIMES.
www.olegbash.ru
Read ABAP: чтение ABAP-кода, мастер-класс Олега Башкатова Contents
Москва, 26 октября 2017
clear do_not_process.
w_part = sy-index + 1 .
" CLEAR xml_document .
" Get attachement attributes
" attachement_attributes =
ls_attachement_attributes =
mail->get_body_part_attributes( im_part = w_part ).
MOVE-CORRESPONDING ls_attachement_attributes
to attachement_attributes.
IF attachement_attributes-doc_type IS INITIAL.
DATA w_pos TYPE i . " Pos of type Integers
FIND '.' IN attachement_attributes-filename
IN CHARACTER MODE MATCH OFFSET w_pos.
ADD 1 TO w_pos.
attachement_attributes-doc_type =
attachement_attributes-filename+w_pos.
ENDIF. " IF attachement_attributes-doc_type IS INITIAL
" Get the attachement
TRANSLATE attachement_attributes-doc_type TO UPPER CASE.
if attachement_attributes-doc_type = 'XML'
and attachement_attributes-filename = 'file_uni_pre.xml'.
lv_bool_found_xml = abap_true.
data(attachement_file) = mail-
>get_body_part_content( w_part ).
"If attachement is not a binary one ,
" transform it to binary.
if attachement_attributes-binary IS INITIAL.
CALL FUNCTION 'SO_SOLITAB_TO_SOLIXTAB'
EXPORTING
ip_solitab = attachement_file-cont_text
IMPORTING
ep_solixtab = attachement_file-cont_hex.
endif. " if attachement_attributes-binary IS INITIAL
CLEAR binary_file.
LOOP AT attachement_file-cont_hex ASSIGNING <pdf_line>.
CONCATENATE binary_file <pdf_line>-line
INTO binary_file IN BYTE MODE.
ENDLOOP. " LOOP AT attachement_file-
cont_hex ASSIGNING <pdf_line>
*clear lv_char255_3.
**Iv_char255_3 = text-310.
**" REPLACE all OCCURRENCES OF '$$$1' in lv_char255_3 with nb_att.
**me->ADD_LOG( EXPORTING i_text255 = lv_char255_3 ).
*me->process_xml_file( EXPORTING input_xstring = binary_file
*IMPORTING et_sales = CH_SALES_ORDERS
*) •
E_XSTRING = binary_file.
endif. " if attachement_attributes-doc_type = 'XML'
ENDDO.
ENDIF. " IF nb_att = 0
CATCH cx_root.
ENDTRY.
endmethod.
www.olegbash.ru