В функциях (пригодных для повторного применения) анализа и обработки данных во внутренних таблиц необходимо знать лишь часть данных о таблицах: саму таблицу и имена тех полей, которые нужно обрабатывать. Возникает вопросы: «Каким должен быть интерфейс функции?» и «Как типизировать параметры?». Интерфейсы для внутренних таблиц еще не изобрели, поэтому в параметрах функции должна передаваться обрабатываемая таблица и названия полей для обработки.
Передача имена полей через параметры через параметры накладывает ряд ограничений. Любые действия с изменением структуры (переименование или удаление полей) будет требовать особой осторожности, так как в журнале использования поля отображаться не будут. Эта задача является примером, когда требуется определить названия поля структуры.
В общем случае постановка задачи звучит следующим образом: имеется структура LS_STRUCT. Требуется написать функцию, которая по значению поля будет возвращать его имя. То есть, при LS_STRUCT-SOME_FIELD вернет строку с содержимым SOME_FIELD.
Читать дальше…
Чтение текстов
Для чтения текстов из ABAP используется функциональный модуль READ_TEXT. Ниже представлен пример чтения текста заголовка FI документа.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
DATA ls_bkpf TYPE bkpf. DATA lv_name TYPE thead-tdname. DATA lt_lines TYPE TABLE OF tline. DATA lv_string TYPE string. ... CONCATENATE ls_bkpf-bukrs ls_bkpf-belnr ls_bkpf-gjahr INTO lv_name RESPECTING BLANKS. CALL FUNCTION 'READ_TEXT' EXPORTING id = '0001' language = sy-langu name = lv_name object = 'BELEG' TABLES lines = lt_lines EXCEPTIONS id = 1 language = 2 name = 3 not_found = 4 object = 5 reference_check = 6 wrong_access_to_archive = 7 OTHERS = 8. IF sy-subrc EQ 0. CALL FUNCTION 'IDMX_DI_TLINE_INTO_STRING' EXPORTING it_tline = lt_lines IMPORTING ev_text_string = lv_string. WRITE / lv_string. ELSE. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. |
Выбор данных ALV в POPUP окне
Возникают задачи, когда пользователю необходимо отобразить ALV таблицу с возможностью выбора одной или нескольких строк. Данную задачу можно решить используя класс CL_RECA_GUI_F4_POPUP.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
DATA lo_f4 TYPE REF TO cl_reca_gui_f4_popup. DATA lt_alv TYPE TABLE OF scarr. DATA lt_sel TYPE TABLE OF scarr. DATA ls_row TYPE scarr. SELECT * INTO TABLE lt_alv FROM scarr. lo_f4 = cl_reca_gui_f4_popup=>factory_grid( lt_alv ). lo_f4->set_title( 'Выбор авиакомпании' ). lo_f4->display( IMPORTING et_result = lt_sel ). LOOP AT lt_sel INTO ls_row. WRITE / ls_row. ENDLOOP. IF sy-subrc NE 0. WRITE / 'Ничего не выбрано'. ENDIF. |
Срытие и отображение фреймов на селекционном экране
Возникают задачи, когда по определенному событию требуется скрыть или отобразить определенные блоки параметров на селекционном экране. Например, при нажатии на Check-Box или Radio-Button требуется отобразить фреймы с дополнительной информацией. Ниже описан способ как можно проводить манипуляции с целыми блоками без привязки к именам параметров. Читать дальше…
RFC модули и параллельная обработка
RFC (Remote Function Call) — протокол обмена данными между системами (подробно о SAP RFC написано в курсе BC415). RFC применяются для интеграции SAP и не SAP систем, обработки данных в новой сессии, параллельной обработки данных и т.п.
Классификация RFC
- Синхронный RFC или sRFC. Определяется с помощью дополнения DESTINATION. При вызове sRFC рабочий процесс приостанавливает свою работу пока вызываемый sRFC модуль не завершит свою работу. Вызов sRFC выполняется в отдельном DB LUW. При вызове sRFC в основном процессе происходит неявный COMMIT.
- Асинхронные RFC – определяются с помощью дополнения STARTING NEW TASK. К ним относятся асинхронные (aRFC) и параллельные (pRFC) RFC вызовы. При асинхронном вызове, вызываемый модуль запускается в новом процессе и работает параллельно с основным рабочим процессом. Результат выполнения ФМ можно получить в функции обратной связи. Вызовы aRFC и pRFC выполняются в отдельных DB LUW.
- Фоновые RFC – определяются с помощью дополнения IN BACKGROUND. К ним относятся транзакционные (tRFC), очередные (qRFC) и фоновые (bgRFC) RFC вызовы. ФМ работают независимо от основного процесса и начинают выполнение после команды COMMIT WORK. На все фоновые RFC создается один DB LUW. Результат фонового RFC нельзя передать в основной процесс.
Подсветка синтаксиса ABAP в Notepad++
В стандартном наборе поддерживаемых языков программирования в Notepad++ нет ABAP. Её можно настроить самостоятельно.
1. Скачиваем XML-файл
2. Синтаксис -> Задать свой синтаксис -> Импортировать

Форматирование ABAP кода
Большинство компаний имеют внутренний регламент форматирования ABAP кода. Не смотря на наличие регламента, оформление кода может сильно отличаться даже в приделах одной программы. Это связано со следующими фактами: многие программы разрабатывались до принятия регламентов; регламентируют в основном только наименования переменных и программных объектов.
Одни из самых сложных конструкций в ABAP — это SELECT и READ TABLE. Ниже предложены правила форматирования данных конструкций, а также средство автоматизированного форматирования для уже имеющегося кода.
Конфигурация SELECT-OPTIONS
Функциональный модуль SELECT_OPTIONS_RESTRICT позволяет настраивать параметры типа SELECT-OPTIONS на экране выбора, ограничивая параметры SIGN и OPTION.
Например, можно ограничить выбор счёта, допустив указание фиксированного значения либо по маске.
![]() |
![]() |
Операторы для сравнения строк
| Оператор | Значение |
|---|---|
| CO | Contains Only: Истина, если операнд1 содержит только символы из операнда2. Оператор регистрозависимый. Операнды чувствительны к ведущим/последним пробелам. Если операнд2 типа string и initial, то результатом логического выражения будет ложь, за исключением тех случаев, когда операнд1 тоже типа string и initial. В таком случае результатом логического выражения всегда будет истина. Если логическое выражение ложь, то sy-fdpos будет содержать смещение первого символа в операнде1, которого нет в операнде2. Иначе, sy-fdpos будет содержать длину операнда1. |
| CA | Contains Any: Истина, Если операнд1 содержит хотя бы один символ из операнда2. Оператор регистрозависимый. Операнды чувствительны к ведущим/последним пробелам. Если операнд1 или операнд2 типа string и initial, то результатом логического выражения всегда будет ложь. Если результат сравнения положительный, то sy-fdpos будет содержать смещение первого символа в операнде1, который содержит операнд2. Иначе, sy-fdpos будет содержать длину операнда1. |
| CS | Contains String: Истина, если содержимое операнда2 содержится в операнде1. Оператор регистронезависимый. Операнды чувствительны к ведущим пробелам. Если операнд1 типа string и initial, или типа C и содержит только пробельные символы, результатом логического выражения будет ложь, за исключением когда операнд2 также типа string и initial, или типа C и содержит только пробельные символы. В этом случае результатом логического выражения будет истина. Если выражение истина, то sy-fdpos будет содержать смещение операнда2 в операнде1. Если результатом сравнения будет ложь, то sy-fdpos будет содержать длину операнда1. |
| CP | Covers Pattern: Истина, если содержимое операнда2 удовлетворяет шаблону операнда1. Операнд2 может содержать шаблонные символы: «*» — любая строка и «+» — любой символ. Оператор не чувствителен к регистру. Операнды чувствительны к ведущим пробелам. Если результат сравнения положительный, то sy-fdpos будет содержать смещение операнда2. Иначе, sy-fdpos будет содержать длину операнда1. Для поиска шаблонных символов их необходимо экранировать путем добавления в операнд2 символа «#» перед требуемым символом. Экранированные символы в операнде2 чувствительны к регистру. |
| CN | Contains Not Only: Эквивалент операнд1 NOT CO операнд2. |
| NA | Contains Not Any: Эквивалент операнд1 NOT CA операнд2. |
| NS | Contains No String: Эквивалент операнд1 NOT CS операнд2. |
| NP | No Pattern: Эквивалент операнд1 NOT CP операнд2. |




