Модуляризація ABAP: макроси, підпрограми та функціональні модулі
⚡ Розумний підсумок
Модуляризація в ABAP розміщує послідовність операторів у блоку багаторазового використання, який просто викликає основна програма. На цій сторінці пояснюються макроси, програми, підпрограми, функціональні модулі та групи функцій, а також синтаксис, приклади та критерії вибору для кожного методу.

Що таке модуляризація в ABAP?
Під час модуляризації вихідного коду ви розміщуєте послідовність операторів ABAP у модулі. Потім, замість того, щоб розміщувати всі оператори в основній програмі, ви просто викликаєте модуль. Під час генерації програми вихідний код у блоці модуляризації обробляється так, ніби він фізично присутній в основній програмі.
Необхідність модулярізації
- Удосконалити структуру програми.
- Легко читається код
- Легко підтримувати код
- Уникайте надмірності та сприяє повторному використанню коду
Різні методи модулярізації
- Використання макросів
- Використання файлів включення
- Підпрограми
- Функціональні модулі
Розглянемо кожен з них докладніше:
SAP- Макрос ABAP
Якщо ви хочете повторно використовувати той самий набір операторів у програмі більше одного разу, ви можете включити їх у макрос.
Макрос можна використовувати лише в тій програмі, в якій він визначений, і викликати його можна лише в рядках програми, що настають після його визначення.
Макроси можуть бути корисними для довгих обчислень або складних операторів WRITE.
синтаксис
DEFINE <macro_name> 'Macro Statements END-OF-DEFINITION
Макроси можуть використовувати параметри &N де N = 1,2,3…
Приклад:-
DATA: number1 TYPE I VALUE 1. DEFINE increment. ADD 1 to &1. WRITE &1. END-OF-DEFINITION. Increment number1. WRITE number1.
Вихід: 2
Макрос розгортається під час компіляції лише в межах однієї програми. Коли той самий код має бути спільним для кількох програм, використовується програма-підключення.
Включати програми
Програми Include призначені виключно для модулярізації вихідного коду та не мають інтерфейсу параметрів.
Програми-підключення дозволяють використовувати один і той самий вихідний код у різних програмах. Вони можуть бути корисними, якщо у вас є довгі оголошення даних, які ви хочете використовувати в різних програмах.
синтаксис
Include <include program Name>
Бали до примітки
- Програми Include не можуть викликати самі себе.
- Програми включення повинні містити повні оператори.
приклад:
INCLUDE ZILX0004. WRITE: / 'User', SY-UNAME,/ 'Date', SY-DATUM. ================================ PROGRAM ZRPM0001. INCLUDE ZILX0004.
Програми-включення використовують спільний код, але не можуть отримувати параметри. Підпрограми додають цей інтерфейс відсутніх параметрів.
Підпрограми
Підпрограми — це процедури, які можна визначити в будь-якому Програма ABAP а також дзвонити з будь-якої програми. Підпрограми зазвичай викликаються внутрішньо, тобто вони містять розділи коду або алгоритмів, які часто використовуються локально. Якщо ви хочете, щоб функція була повторно використана в усій системі, використовуйте функціональний модуль.
Синтаксис-
FORM <Subroutine> [<pass>]. <Statement block>. ENDFORM.
= Назва підпрограми
= Передаються параметри
Типи підпрограм
- Внутрішній
- Підпрограма, визначена в тій же програмі, що викликається.
- Може отримати доступ до всіх об’єктів даних, оголошених у основній програмі ABAP/4.
- Зовнішній
- Підпрограма, визначена поза викликаною програмою.
- Необхідно використовувати або оголошувати об’єкти даних у загальних частинах пам’яті.
Виклик підпрограми
Внутрішні підпрограми
PERFORM <subroutine> [<pass>]
= Назва підпрограми
= Передаються параметри
Дані, заявлені в основній програмі, доступні автоматично.
Зовнішні підпрограми
PERFORM <subroutine>(<Program>) [<pass>]. PERFORM <subroutine> (<Program>) [<pass>] [IF FOUND]. PERFORM (<subroutine>) IN PROGRAM (<Program>) [<pass>] [IF FOUND]. PERFORM <index> OF <subroutine1> <subroutine2> <subroutine3> [<pass>].
Бали до примітки
- Вкладені виклики дозволені в підпрограмах (тобто PERFORM у межах FORM … ENDFORM).
- Також можливі рекурсивні виклики.
- Щоб визначити локальні дані, використовуйте оператор DATA після FORM. Кожного разу, коли ви входите в підпрограму, дані створюються заново (з початковим значенням) і звільняються в кінці (зі стеку).
- Щоб визначити глобальні дані, які використовуються в підпрограмі, використовуйте оператор LOCAL після FORM. Значення зберігаються під час входу в підпрограму, а потім звільняються в кінці (зі стеку)
💡 Порада: Підпрограми вважаються застарілими в об'єктах ABAP. Нові розробки повинні розміщувати логіку повторного використання в методах класу та використовувати функціональні модулі, коли потрібен віддалений або системний інтерфейс.
Функціональні модулі
Функціональні модулі — це підпрограми загального призначення ABAP/4, якими може користуватися кожен. Фактично, доступна велика кількість стандартних функціональних модулів.
Функціональні модулі організовані у функціональні групи: колекції логічно пов’язаних функцій. Функціональний модуль завжди належить до функціональної групи.
Синтаксис-
FUNCTION <function module> <Statements> ENDFUNCTION.
Важлива інформація, пов’язана з функціональним модулем
- адміністрація
- Імпорт/зміна/експорт параметрів.
- Параметри/виключення таблиці.
- Документація
- Вихідний код – Л U01 . це група функцій
- Глобальні дані – Л TOP .Глобальні дані для функціональної групи – доступні через функціональні модулі у функціональній групі.
- Основна програма – SAPЛ . Містить список усіх файлів включення для цієї групи функцій
Виклик функціонального модуля
Щоб викликати функціональний модуль, використовуйте інструкцію CALL FUNCTION:
CALL FUNCTION <module> [EXPORTING f1 = a 1.... f n = a n] [IMPORTING f1 = a 1.... f n = a n] [CHANGING f1 = a 1.... f n = a n] [TABLES f1 = a 1.... f n = a n] [EXCEPTIONS e1 = r 1.... e n = r n [ERROR_MESSAGE = r E] [OTHERS = ro]].
Кожен функціональний модуль знаходиться всередині функціональної групи, тому в наступному розділі пояснюється, як працює цей контейнер.
Групи функцій
Функціональні групи є контейнерами для функціональних модулів. Насправді існує велика кількість стандартних функціональних груп.
Усі функціональні модулі у функціональній групі можуть отримати доступ до глобальних даних групи.
Як і виконувані програми (тип 1) і модульні пули (тип M), групи функцій можуть містити екрани, екрани вибору та списки.
Бали до примітки
- Функціональні групи не можуть бути виконані.
- Назва функціональної групи може містити до 26 символів.
- Коли ви створюєте функціональну групу або функціональний модуль, основна програма та включені програми генеруються автоматично.
- Функціональні групи інкапсулюють дані.
Як створити групу функцій
- Перейти до транзакції SE80.
- У спадному списку виберіть «Програма».
- Напишіть назву функціональної групи, яку ви хочете створити. Зазвичай групи функцій, створені користувачем, починаються з «Z». наприклад - . Натисніть клавішу Enter.
- Зауважте, що ТОП-включення створюється за замовчуванням, якщо користувач позначає опцію створення ТОП-включення.
Як створити функціональний модуль
- Створіть групу функцій (скажімо «ZCAL»).
- Створіть функціональний модуль, встановіть атрибути, такі як (Група функцій, Застосування, Короткий текст та Тип процесу), та збережіть.
- Файл «LZCALU01» містить вихідний код першого функціонального модуля.
- Включений файл «LZCALTOP» матиме глобальні дані.
- Основна програма"SAPLZCAL” містить
- Глобальні дані Включити файл «LZCALTOP»
- Функціональні модулі включають файл «LZCALUXX»
- Визначено користувачем Включає файли «LZCALF..», «LZCALO..» і «LZCALI..»
- Визначте параметри інтерфейсу та винятки
- Напишіть вихідний код
- Активуйте функціональний модуль
- Тестування функціонального модуля – один тест і налагодження
- Документування та випуск функціонального модуля
Як вибрати правильний метод модуляризації
Ці чотири методи перетинаються, тому рішення залежить від обсягу повторного використання та від того, чи потрібен інтерфейс параметрів.
| Техніка | Обсяг повторного використання | Інтерфейс параметрів | Найкраще використовувати для |
|---|---|---|---|
| Macro | Одна програма, після рядка визначення | Позиційні заповнювачі від &1 до &9 | Короткі повторювані оператори, довгі обчислення, складний вивід WRITE |
| Включити програму | Будь-яка програма, яка називає включення | ніхто | Спільні оголошення даних та спільний вихідний код |
| Підпрограма (FORM) | Локальний або зовнішній за допомогою PERFORM … IN PROGRAM | ВИКОРИСТАННЯ, ЗМІНА, ТАБЛИЦЬ | Логіка часто використовується повторно в одній програмі |
| Функціональний модуль | Вся система, включаючи віддалені дзвінки | ІМПОРТУВАННЯ, ЕКСПОРТУВАННЯ, ЗМІНЮВАННЯ, ТАБЛИЦЬ, ВИКЛЮЧЕННЯ | Підпрограми, спільні для різних програм та інкапсульовані у функціональну групу |
Коротке правило охоплює більшість випадків: використовуйте макрос для скорочення всередині однієї програми, include для спільних оголошень, підпрограму для локальної логіки та функціональний модуль, коли підпрограма має бути викликаною з будь-якої точки системи. Це все, що стосується модульності в ABAP.
