Учебники

SAP ABAP — Макросы

Если мы хотим повторно использовать один и тот же набор операторов в программе более одного раза, нам нужно включить их в макрос. Например, макрос может быть полезен для длинных вычислений или для написания сложных операторов WRITE. Мы можем использовать макрос только в той программе, в которой он определен. Определение макроса должно произойти до того, как макрос будет использован в программе.

Макросы разработаны на основе заполнителей. Заполнитель работает как указатели на языке Си. Вы можете определить макрос в операторе DEFINE … END-OF-DEFINITION.

Ниже приведен основной синтаксис определения макроса:

DEFINE <macro_name>. <statements> 
END-OF-DEFINITION. 
   ...... 
  
   <macro_name> [<param1> <param2>....].

Необходимо сначала определить макрос, прежде чем вызывать его. <Param1>…. заменяет заполнители & 1 … в инструкциях ABAP, содержащихся в определении макроса.

Максимальное количество заполнителей в определении макроса — девять. То есть, когда программа выполняется, система SAP заменяет макрос соответствующими операторами, а заполнители & 1, & 2,…. & 9 заменяются параметрами param1, param2, …. param9. Мы можем вызвать макрос в другом макросе, но не в том же макросе.

пример

Перейти к транзакции SE38. Создайте новую программу ZMACRO_TEST вместе с описанием в коротком текстовом поле, а также с соответствующими атрибутами, такими как Тип и Состояние, как показано на следующем снимке экрана —

Новая программа ZMACRO

Ниже приведен код —

REPORT ZMACRO_TEST. 
DEFINE mac_test. 
WRITE: 'This is Macro &1'. 
END-OF-DEFINITION. 

PARAMETERS: s1 type C as checkbox. 
PARAMETERS: s2 type C as checkbox. 
PARAMETERS: s3 type C as checkbox default 'X'. 

START-OF-SELECTION. 
IF s1 = 'X'. 
   mac_test 1. ENDIF. 
IF s2 = 'X'. 
   mac_test 2. 
ENDIF.
 
IF s3 = 'X'. 
   mac_test 3. 
ENDIF.

У нас есть 3 флажка. Выполняя программу, давайте установим флажок S2.

Флажок макропрограммы

Приведенный выше код производит следующий вывод —

A Macro Program 
 
This is Macro 2

Если все флажки установлены, код выдает следующий вывод: