Синтаксис оператора perform
Определение и вызов внутренних подпрограмм
Подпрограммы
Подпрограмма (subroutine) – раздел многократного использования кода. Чтобы определить подпрограмму, используется оператор form, чтобы указать начало подпрограммы, и используется endform, чтобы указать конец подпрограммы. Название подпрограммы не может превышать 30 символов.
Чтобы назвать подпрограмму, используется оператор perform.
Пример определения и вызова подпрограммы.
report ztx1706.
write: / 'Before call 1'.
perform sub1.
write: / 'Before call 2'.
perform sub1.
write: / 'After calls'.
form sub1.
write: / 'Inside sub1'.
endform.
Before call 1
Inside sub1
Before call 2
Inside sub1
After calls
Есть два типа подпрограмм:
- Internal subroutines Внутренние подпрограммы
- External subroutines Внешние подпрограммы
Предыдущий пример – пример вызова внутренней подпрограммы.
Определения подпрограммы обычно помещаются в конце программы, после всех событий. Оператор form определяет конец предыдущего события, и начало подпрограммы. Подпрограммы не могут быть вложены в события. Синтаксис оператора form
form s [tables t1 t2 ...]
[using u1 value(u2) ...]
[changing c1 value(c2) ...].
---
endform.
- s – название подпрограммы.
- t1, t2, u1, u2, c1, и c2 являются параметрами.
- tables определяют внутренние таблицы, которые должны быть переданы как параметры.
- value не может использоваться после tables.
- value может быть применено к любым переменным, которые передают через using или changing.
- --- представляет любое число строк программы.
Особенности оператора:
- Все дополнения являются дополнительными.
- Порядок параметров: tables, using, changing.
- Каждое дополнение может определено только один раз.
- Не используйте запятые, чтобы отделить параметры.
- tables используется для передачи внутренних таблиц – не таблицы базы данных.
- Подпрограмма может вызывать другую подпрограмму.
- Рекурсия поддержана.
- Определения подпрограммы не могут быть вложены. (Вы не можете определить подпрограмму в пределах другой подпрограммы).
perform a) s
b) n of s1 s2 s3 ...
[tables t1 t2 ...]
[using u1 u2 ...]
[changing c1 c2 ...].
- s, s1, s2, s3, являются названиями подпрограммы.
- n – числовая переменная.
- a) и b) являются взаимоисключающими.
- tables, using и changing могут появиться или с a) или с b).
- value() не может использоваться с perform.
Используя синтаксис b) Вы может определить, какая из списка подпрограмм должна быть выполнена. Энная подпрограмма в списке названий подпрограммы выполнена. Например, если n будет 2, то вторая подпрограмма в списке будет выполнена.
report ztx1707.
do 3 times.
perform sy-index of s1 s2 s3.
enddo.
form s1.
write: / 'Hi from s1'.
endform.
form s2.
write: / 'Hi from s2'.
endform.
form s3.
write: / 'Hi from s3'.
endform.
Hi from s1
Hi from s2
Hi from s3
Выход из подпрограммы.Для выхода из подпрограммы используются следующие операторы:
- exit
- check
- stop
В подпрограммах
- check и exit немедленно выходят из подпрограммы и переход осуществляется на следующий после perform оператор.
- stop немедленно завершает подпрограмму, и переходит непосредственно в событие end-of-selection.
check, exit, и stop не устанавливает значение sy-subrc.
report ztx1708.
data f1 value 'X'.
clear sy-subrc.
perform s1.
write: / 'sy-subrc =', sy-subrc.
perform s2.
write: / 'sy-subrc =', sy-subrc.
perform s3.
write: / 'sy-subrc =', sy-subrc.
perform s4.
write: / 'sy-subrc =', sy-subrc.
end-of-selection.
write: 'Stopped, sy-subrc =', sy-subrc.
if sy-subrc = 7.
stop.
endif.
write: / 'After Stop'.
form s1.
do 4 times.
exit.
enddo.
write / 'In s1'.
exit.
write / 'After Exit'.
endform.
form s2.
do 4 times.
check f1 = 'Y'.
write / sy-index.
enddo.
write / 'In s2'.
check f1 = 'Y'.
write / 'After Check'.
endform.
form s3.
do 4 times.
sy-subrc = 7.
stop.
write / sy-index.
enddo.
endform.
form s4.
write: / 'In s4'.
endform.
In s1
sy-subrc = 0
In s2
sy-subrc = 0
Stopped, sy-subrc = 7