Модуляризація ABAP: макроси, підпрограми та функціональні модулі

⚡ Розумний підсумок

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

  • 🧩 Основний принцип: Блок модуляризації генерується так, ніби його вихідний код фізично присутній у викликаючій програмі, тому структура покращується без витрат часу виконання.
  • Макрос: Визначається за допомогою DEFINE та END-OF-DEFINITION, використовується лише всередині програми, яка його визначає, і лише після рядка визначення.
  • 📄 Включити програму: Не має інтерфейсу параметрів та існує виключно для спільного використання вихідного коду, такого як довгі оголошення даних, між кількома програмами.
  • 🔁 Підпрограма: Оголошується за допомогою FORM та ENDFORM, викликається за допомогою PERFORM та підходить для логіки, що повторно використовується локально в одній програмі.
  • 🧱 Функціональний модуль: Загальносистемна процедура з типізованим інтерфейсом для імпорту, експорту, зміни параметрів таблиці та винятків.
  • 📦 Функціональна група: Контейнер, глобальні дані якого спільно використовуються кожним функціональним модулем усередині нього, генерується автоматично разом з його включеннями TOP та UXX.
  • 🧭 Правило відбору: Виберіть макрос для локального скорочення, підпрограму для локальної логіки та функціональний модуль, коли підпрограма має бути повторно використовуваною в системі.

Модуляризація в 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.

= Назва підпрограми

= Передаються параметри

Типи підпрограм

  1. Внутрішній
    • Підпрограма, визначена в тій же програмі, що викликається.
    • Може отримати доступ до всіх об’єктів даних, оголошених у основній програмі ABAP/4.
  2. Зовнішній
    • Підпрограма, визначена поза викликаною програмою.
    • Необхідно використовувати або оголошувати об’єкти даних у загальних частинах пам’яті.

Виклик підпрограми

Внутрішні підпрограми

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 символів.
  • Коли ви створюєте функціональну групу або функціональний модуль, основна програма та включені програми генеруються автоматично.
  • Функціональні групи інкапсулюють дані.

Як створити групу функцій

  1. Перейти до транзакції SE80.
  2. У спадному списку виберіть «Програма».
  3. Напишіть назву функціональної групи, яку ви хочете створити. Зазвичай групи функцій, створені користувачем, починаються з «Z». наприклад - . Натисніть клавішу Enter.
  4. Зауважте, що ТОП-включення створюється за замовчуванням, якщо користувач позначає опцію створення ТОП-включення.

Як створити функціональний модуль

  1. Створіть групу функцій (скажімо «ZCAL»).
  2. Створіть функціональний модуль, встановіть атрибути, такі як (Група функцій, Застосування, Короткий текст та Тип процесу), та збережіть.
  3. Файл «LZCALU01» містить вихідний код першого функціонального модуля.
  4. Включений файл «LZCALTOP» матиме глобальні дані.
  5. Основна програма"SAPLZCAL” містить
    • Глобальні дані Включити файл «LZCALTOP»
    • Функціональні модулі включають файл «LZCALUXX»
    • Визначено користувачем Включає файли «LZCALF..», «LZCALO..» і «LZCALI..»
  6. Визначте параметри інтерфейсу та винятки
  7. Напишіть вихідний код
  8. Активуйте функціональний модуль
  9. Тестування функціонального модуля – один тест і налагодження
  10. Документування та випуск функціонального модуля

Як вибрати правильний метод модуляризації

Ці чотири методи перетинаються, тому рішення залежить від обсягу повторного використання та від того, чи потрібен інтерфейс параметрів.

Техніка Обсяг повторного використання Інтерфейс параметрів Найкраще використовувати для
Macro Одна програма, після рядка визначення Позиційні заповнювачі від &1 до &9 Короткі повторювані оператори, довгі обчислення, складний вивід WRITE
Включити програму Будь-яка програма, яка називає включення ніхто Спільні оголошення даних та спільний вихідний код
Підпрограма (FORM) Локальний або зовнішній за допомогою PERFORM … IN PROGRAM ВИКОРИСТАННЯ, ЗМІНА, ТАБЛИЦЬ Логіка часто використовується повторно в одній програмі
Функціональний модуль Вся система, включаючи віддалені дзвінки ІМПОРТУВАННЯ, ЕКСПОРТУВАННЯ, ЗМІНЮВАННЯ, ТАБЛИЦЬ, ВИКЛЮЧЕННЯ Підпрограми, спільні для різних програм та інкапсульовані у функціональну групу

Коротке правило охоплює більшість випадків: використовуйте макрос для скорочення всередині однієї програми, include для спільних оголошень, підпрограму для локальної логіки та функціональний модуль, коли підпрограма має бути викликаною з будь-якої точки системи. Це все, що стосується модульності в ABAP.

Поширені запитання

Макрос розгортається під час генерації та працює лише всередині програми, яка його визначила. Підпрограма — це реальна процедура з інтерфейсом типізованих параметрів, яку також можна викликати з іншої програми за допомогою PERFORM.

Функціональний модуль, тип обробки якого встановлено на модуль з віддаленим керуванням, може бути викликаний з іншого SAP системи або із зовнішньої програми. Його параметри мають передаватися за значенням, а винятки обробляються як системні збої.

Макрос не можна покроково виконати в налагоджувачі, оскільки він розгортається перед генерацією. Перемістіть логіку в підпрограму або метод, коли потрібне порядкове налагодження, і обмежте макроси короткими операторами.

Помічники коду штучного інтелекту в інструментах розробки ABAP можуть створювати скелет функціонального модуля, його інтерфейс параметрів та винятки на основі простого опису. Розробник все одно переглядає логіку, активує модуль та тестує його перед транспортуванням.

Інструменти штучного інтелекту сканують програму, виявляють повторювані блоки та пропонують, де слід виправити підпрограму, метод або функціональний модуль.tracЦя пропозиція пришвидшує рефакторинг, хоча модульне тестування залишається необхідним для підтвердження ідентичної поведінки.

Підсумуйте цей пост за допомогою: