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 program Name>
Посочва забележка
- Програмите за включване не могат да се самоизвикват.
- Програмите за включване трябва да съдържат пълни изрази.
Пример:
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.
Важна информация, свързана с функционален модул
- Администрация
- Импортиране/промяна/експортиране на параметри.
- Параметри/изключения на таблицата.
- документация
- Изходен код – L 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..“
- Дефинирайте параметри на интерфейса и изключения
- Напишете изходния код
- Активиране на функционален модул
- Тестване на функционалния модул – единичен тест и отстраняване на грешки
- Документиране и пускане на функционален модул
Как да изберем правилната техника за модулизация
Четирите техники се припокриват, така че решението зависи от обхвата на повторна употреба и от това дали е необходим интерфейс за параметри.
| Техника | Обхват на повторното използване | Интерфейс с параметри | Най-добре се използва за |
|---|---|---|---|
| Макро | Една програма, след дефиниционния ред | Позиционни заместители от &1 до &9 | Кратки повтарящи се оператори, дълги изчисления, сложен WRITE изход |
| Включи програма | Всяка програма, която назовава включването | None | Споделени декларации за данни и споделен изходен код |
| Подпрограма (FORM) | Локално или външно с PERFORM … IN PROGRAM | ИЗПОЛЗВАНЕ, ПРОМЯНА, НА ТАБЛИЦИ | Логика, използвана често повторно в рамките на една програма |
| Функционален модул | Цялата система, включително отдалечени повиквания | ИМПОРТ, ЕКСПОРТИРАНЕ, ПРОМЯНА, ТАБЛИЦИ, ИЗКЛЮЧЕНИЯ | Рутини, споделени между приложенията и капсулирани във функционална група |
Едно кратко правило обхваща повечето случаи: използвайте макрос за съкращения в рамките на една програма, include за споделени декларации, подпрограма за локална логика и функционален модул, когато рутината трябва да може да се извиква от всяка точка на системата. Това е всичко за модулността в ABAP.
