
- •Типы модулей abap/4.
- •Что такое событие. Основные события.
- •Программа драйвера.
- •Порядок выполнения событий, определенный программой драйвера.
- •События abap/4, распределенные по категориям.
- •Операторы, используемые для прекращения событий.
- •Типы подпрограмм.
- •Определение и вызов внутренних подпрограмм.
- •Особенности оператора form.
- •Синтаксис оператора perform.
- •Операторы, используемые для выхода из подпрограммы.
- •Определение глобальных переменных.
- •Определение локальных переменных.
- •Определение рабочей области tables.
- •Передача параметров без контроля типов.
- •Передача типизированных параметров.
- •Синтаксис передачи типизированных параметров.
- •Передача Field Strings.
- •Способы передачи параметров.
- •Дополнения оператора form и получающийся метод передачи параметров:
- •Передача по значению.
- •Передача по ссылке.
- •Передача значения и результата.
- •Передача внутренних таблиц как параметров, синтаксис каждого метода передачи.
- •Методы и результаты передачи внутренней таблицы в подпрограмму:
- •Синтаксис каждого метода передачи внутренней таблицы в подпрограмму:
- •Синтаксис описания внутренней таблицы в подпрограмме.
- •Синтаксис описания внутренней таблицы подпрограмме:
- •Передача внутренней таблицы со строкой заголовка.
- •Вызов внешних подпрограмм.
- •Оператор include.
- •Представление функциональных модулей.
- •Функциональные группы.
- •Определение функционального интерфейса модуля
- •Создание функционального модуля.
- •Использование releasing в функциональном модуле.?
- •Установка значения sy-subrc по возвращению из функционального модуля.
- •Оператор message ... Raising.
Синтаксис передачи типизированных параметров.
form s1 using u1 type t value(u2) type t
changing c1 type t value(c2) type t.
где:
s1 — имя подпрограммы
u1, u2, c1 и c2 — формальные параметры
t — или тип данных ABAP/4, или тип данных, определенный пользователем
Передача Field Strings.
Можно передать Field String тем же способом, что и любой другой параметр. Однако если нужно обратиться к компонентам Field String в пределах подпрограммы, необходимо сделать структуру Field String известной в подпрограмме, используя одно из двух дополнений оператора form:
like x
structure x
Здесь x может быть или Field String, или структурой DDIC, или таблицей. Например,
form s1 using fs1 structure ztxlfa1.
определяет fs1 имеющей структуру таблицы DDIC ztxlfa1.
Способы передачи параметров.
Есть три способа передачи параметров подпрограммам:
передача по ссылке
передача по значению
передача по значению и результату
Дополнения оператора form и получающийся метод передачи параметров:
Дополнение |
Метод передачи |
using v1 |
Передача по ссылке |
changing v1 |
Передача по ссылке |
using value(v1) |
Передача по значению |
changing value(v1) |
Передача по значению и результату |
Передача по значению.
При передаче параметра по значению для этого значения выделяется новая память. Эта память выделяется при вызове подпрограммы и освобождается по окончании выполнения подпрограммы. Поэтому ссылка на параметр — ссылка на отдельную область памяти, которая известна только в пределах подпрограммы. Исходное значение не изменяется при изменении значения параметра.
Эффект передачи параметров по значению:
1 report ztx1806.
2 data: f1 value 'A'.
3
4 perform s1 using f1.
5 write / f1.
6
7 form s1 using value(p1).
8 p1 = 'X'.
9 write / p1.
10 endform.
X
A
В строке 2 выделяется память для переменной f1
В строке 4 управление передается строке 7
В строке 7 определяется передача f1 по значению, поэтому p1 обращается к новому участку памяти, который независим от f1. Значение f1 автоматически копируется в память для p1
В строке 8 изменяется содержимое памяти для p1. Значение f1 неизменно
В строке 9 выводится значение p1: X
В строке 10 управление возвращается к строке 5
В строке 5 выводится значение f1: A
Передача параметров по значению используется при потребности в локальной копии переменной, которую можно изменять, не затрагивая оригинал. Передача по ссылке более эффективна, чем передача параметров по значению.
Передача по ссылке.
При передаче параметра по ссылке новая память для значения не выделяется. Вместо этого передается указатель на исходную область памяти. Передача параметров по ссылке — ссылка на исходное положение переменной в памяти. Изменения переменной в подпрограмме изменяют исходное значение памяти.
Эффект передачи параметров по ссылке:
1 report ztx1804.
2 data f1 value 'A'.
3
4 perform s1 using f1.
5 write / f1.
6
7 form s1 using p1.
8 p1 = 'X'.
9 endform.
X
В строке 2 выделяется память для переменной f1 (для примера предположим, что адрес памяти — 1000)
В строке 4 управление передается строке 7
В строке 7 определяется передача f1 по ссылке, поэтому p1 — указатель на адрес памяти 1000
В строке 8 изменяется содержимое памяти по адресу 1000, вызывая изменение содержимого памяти для f1 на X
В строке 9 управление возвращается к строке 5
В строке 5 выводится значение f1: X
Оба дополнения using f1 и changing f1 при передаче f1 по ссылке идентичны по своей функции. Оба существуют по причине, что при их использовании должным образом «регистрируется», изменит подпрограмма параметр или нет.
Код changing нужно использовать с параметрами, изменяемыми подпрограммой, код using — с параметрами, которые подпрограммой не изменяются.