Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

BC400_RU_ECC_2005

.pdf
Скачиваний:
1517
Добавлен:
21.05.2015
Размер:
40.8 Mб
Скачать

Глава 7

Подпрограммы в ABAP

Обзор главы

См. цели отдельных уроков в рамках этого раздела.

Цели главы

Прослушав эту главу, вы сможете

определять подпрограммы

вызывать подпрограммы

анализировать процесс выполнения подпрограмм в режиме отладки

Содержание главы

Урок: Подпрограммы..........................................................202 Упражнение 11: Подпрограммы ........................................215

 

© 2006 г. SAP AG All rights reserved. Авторские

201

06-04-2006

права защищены.

Глава 7: Подпрограммы в ABAP

BC400

Урок: Подпрограммы

Обзор урока

На этом уроке рассматриваются цели и способы использования подпрограмм в рамках ABAP-программ. Кроме того, описывается возможность использования интерфейса подпрограмм для переноса параметров и применение различных видов переноса.

Цели урока

Прослушав этот урок, вы сможете

определять подпрограммы

вызывать подпрограммы

анализировать процесс выполнения подпрограмм в режиме отладки

Практический пример

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

Внутренняя модуляризация программы с использованием подпрограмм

Рисунок 114: Использование подпрограмм (причины)

202

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Подпрограммы

Подпрограмма представляет собой единицу модуляризации в рамках программы, в которую в форме исходного текста инкапсулируется определенная функция. Целью переноса частей программы в подпрограмму является упорядочение текста главной программы и возможность повторного использования соответствующей последовательности операторов (см. рисунок выше).

Упорядочение является результатом ориентированности подпрограммы на определенную функцию и подразумевает разделение общей задачи на функциональные составляющие, для реализации каждой из которых создается отдельная подпрограмма.

Использование подпрограмм также приводит к упрощению ведения текста, так как изменения часто должны вноситься только в одну подпрограмму (а не в различные места главной программы). Кроме того, при выполнении программы вызов подпрограммы может обрабатываться отладчиком как вызов “отдельного блока” с последующим анализом результатов. Это позволяет упростить нахождение источников ошибок.

Рисунок 115: Перенос параметров (причины 1)

 

© 2006 г. SAP AG All rights reserved. Авторские

203

06-04-2006

права защищены.

Глава 7: Подпрограммы в ABAP

BC400

Рисунок 116: Перенос параметров (причины 2)

Все (глобальные) переменные, определенные в главной программе, могут использоваться и в подпрограмме. Однако для вызова подпрограмм в определенных ситуациях с различными объектами данных следует

использовать не глобальные переменные, а метки-заполнители, которые при вызове подпрограммы заменяются требуемыми глобальными переменными. Такие метки-заполнители называются формальными параметрами и вместе с глобальными параметрами формируют интерфейс подпрограммы, который должен быть описан при определении подпрограммы.

При вызове подпрограммы формальные параметры должны получать значения посредством соответствующих глобальных переменных (текущие параметры), что позволит использовать при обработке подпрограммы реальные переменные. Это присвоение формальным параметрам текущих параметров при вызове подпрограммы называется переносом параметров.

204

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Подпрограммы

Рисунок 117: Способы переноса интерфейсных параметров

Способ, при помощи которого выполняется перенос переменных главной программы в формальные параметры подпрограммы, называется типом переноса и указывается для каждого параметра в интерфейсе подпрограммы.

Существуют три типа переноса:

Вызов по значению

Создается копия текущего параметра. Эта копия присваивается формальному параметру. Если в подпрограмме соответствующему формальному параметру присваивается некоторое значение, то это значение фактически будет присвоено копии формального параметра, а не его оригиналу.

Этот тип переноса обеспечивает доступность глобальной переменной в подпрограммах (в форме копии переменной) без возможности изменения этой глобальной переменной (защита оригинала). Следует отметить, что создание копий, особенно для больших внутренних таблиц, может занять длительное время.

 

© 2006 г. SAP AG All rights reserved. Авторские

205

06-04-2006

права защищены.

Глава 7: Подпрограммы в ABAP

BC400

Вызов по значению и результату

Этот тип переноса включает в себя процедуру, описанную для “вызова по значению”. Однако при нормальном завершении подпрограммы значение, которое было изменено в ходе обработки, записывается в оригинал. В случае преждевременного прерывания программы посредством оператора STOP или сообщения пользователю типа Е перезапись значений подавляется.

Этот тип переноса используется для переноса значения глобальной переменной в подпрограмму и записи полностью обработанного окончательного значения копии в оригинал. Однако необходимо иметь в виду, что создание копий и запись значений может занимать продолжительное время, особенно в случае больших внутренних таблиц.

Вызов по ссылке

Текущий параметр присваивается непосредственно формальному параметру. Это означает, что присвоение значений формальному параметру выполняется непосредственно для текущего параметра.

Этот тип переноса используется при необходимости запуска подпрограммы непосредственно для указанного текущего параметра. Он часто применяется в целях предотвращения долговременного создания копий больших внутренних таблиц.

206

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Подпрограммы

Рисунок 118: Определение и вызов подпрограмм

Подпрограмма вводится с использованием оператора FORM.

После оператора FORM указываются имя и интерфейс подпрограммы.

Далее следуют операторы подпрограммы.

Для завершения подпрограммы используется оператор ENDFORM.

При определении интерфейса производится перечисление формальных параметров подпрограммы (в данном случае: f1, f2, f3) и, при необходимости, их ввод вручную. Для каждого параметра должен быть указан требуемый тип переноса:

Вызов по значению

Все формальные параметры, в отношении которых должен применяться тип переноса “вызов по значению” (здесь: f1), перечисляются с префиксом VALUE в разделе USING . (См. синтаксис на приведенном выше рисунке.)

Вызов по значению и результату

Все формальные параметры, в отношении которых должен применяться тип переноса “вызов по значению и результату” (в данном случае:

f1), перечисляются с префиксом VALUE в разделе CHANGING . (См. синтаксис на приведенном выше рисунке.)

 

© 2006 г. SAP AG All rights reserved. Авторские

207

06-04-2006

права защищены.

Глава 7: Подпрограммы в ABAP

BC400

Вызов по ссылке

Все формальные параметры, в отношении которых должен применяться тип переноса “вызов по ссылке” (в данном случае: f3), перечисляются без префикса VALUE в разделе CHANGING . (См. синтаксис на приведенном выше рисунке.)

Примечание: Параметр без префикса VALUE, размещенный в разделе USING , также имеет тип переноса “вызов по ссылке”. Однако такой синтаксис описания имеет смысл только для тех формальных параметров, переносимых в большие внутренние таблицы, которые не изменяются в подпрограмме (указываются с использованием USING), но должны передаваться посредством “вызова по ссылке” во избежание длительного создания копий.

При вызове подпрограммы текущие параметры, переносимые без префикса VALUE, определяются при помощи USING или CHANGING. Порядок перечисления определяет их присвоение формальным параметрам. В примере, представленном на рисунке выше, значение a переносится в параметр f1, значение b – в параметр f2, а значения c – в параметр f3.

Рисунок 119: Типизация интерфейсных параметров

Формальный параметр подлежит родовой типизации, если он вводится с использованием выражения TYPE ANY или вообще не типизируется. В этот параметр могут быть перенесены текущие параметры любого типа. Во время выполнения при вызове подпрограммы тип текущего параметра

208

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Подпрограммы

определяется и присваивается формальному параметру (наследование типа). Однако если операторы в подпрограмме не могут применяться в отношении наследуемого типа, может возникнуть динамическая ошибка (конфликт типов). Поэтому родовую типизацию можно использовать только в тех случаях, когда тип текущего параметра должен определяться при создании программы или если он может варьироваться во время выполнения (динамическое программирование).

Точная типизация формального параметра реализуется посредством указания глобального или встроенного типа в дополнении TYPE. При этом указывается, что в подпрограмму должны быть переданы лишь текущие параметры определенного типа. Нарушения непротиворечивости типов между формальными и текущими параметрами выявляются при проверке синтаксиса. Это увеличивает стабильность программы, поскольку предотвращаются конфликты типов в операторах в рамках подпрограммы.

При присвоении стандартных типов Р, N, C или X отсутствующий признак “ длина поля ” не наследуется из текущего параметра до начала выполнения. В случае этого типа полная типизация (т.е. включение длины поля) достигается при определении и указании локально определенных типов.

Рисунок 120: Типизация интерфейсных параметров для структур и внутренних таблиц

Формальные параметры для структур и внутренних таблиц должны быть типизированы в целях получения доступа к соответствующим компонентам. Параметры структурных компонентов уже известны в подпрограмме (после типизации), поэтому к ним можно обращаться с использованием обычного

 

© 2006 г. SAP AG All rights reserved. Авторские

209

06-04-2006

права защищены.

Глава 7: Подпрограммы в ABAP

BC400

синтаксиса. Типизация табличных параметров позволяет указывать их в качестве внутренних таблиц с использованием обычного синтаксиса в подпрограмме.

Рекомендация: Во избежание длительного копирования большие внутренние таблицы должны переноситься путем вызова по ссылке.

Рисунок 121: Видимость глобальных и локальных объектов данных

Переменные, определенные в главной программе, являются глобальными объектами данных. Они являются видимыми (т.е. к ним можно обращаться) в рамках всей главной программы и в каждой вызванной подпрограмме.

Переменные, определенные в подпрограмме, называются локальными, поскольку существуют только в соответствующей подпрограмме, так же как

иформальные параметры. Память для формальных параметров и локальных объектов данных присваивается только на время выполнения подпрограммы

ипосле ее завершения освобождается.

Формальные параметры и локальные объекты данных подпрограммы не могут иметь одинаковые имена. При наличии глобального объекта данных, имя которого совпадает с именем формального параметра или локального объекта данных, в рамках подпрограммы это имя будет указывать на формальный параметр или локальный объект данных, а вне подпрограммы

210

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]