Синтаксис оператора 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