Главная страница

Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4. Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР. Разработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс


Скачать 28.36 Mb.
НазваниеРазработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс
АнкорР. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4.pdf
Дата21.12.2017
Размер28.36 Mb.
Формат файлаpdf
Имя файлаР. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР.pdf
ТипКнига
#12433
страница8 из 24
1   ...   4   5   6   7   8   9   10   11   ...   24
Глава 8
Запись данных
Вывод данных на экран
• Улучшение компоновки страницы
• Поддержка нескольких языков

94 Глава 8
предыдущей главе рассматривалась передача данных в программе с помощью команд move и
В этой главе будет уделено внимание другой важной операции — выводу данных на экран ИЛИ на устройство печати (принтер) посредством команды write. АВАР/4
широкие возможности для подготовки, форматирования и вывода данных, наиболее важная из которых под- держка нескольких языков, что делает систему действительно
Используя команду write, содержимое полей можно вывести в стандартном формате, зависящем от типа поля. Можно также построить заголовок и нижний колонтитул страницы, полезные для ее иден- тификации (см. главу 17). Допускается применение символов, пиктограмм, разных цветов и специаль- ных опций вывода, улучшающих качество отображения страницы. Как указывалось выше, в системе поддерживаются национальные символы различных языков, причем язык страны задается пользовате- лем при регистрации в системе.
сложные понятия, такие как вложенная
будут обсуждены в главе
Использование базовых форматов компоновки
Операторы write распечатывают которая направляется на экран или принтер.
Выходные страницы, построенные с помощью команд write, называются в АВАР/4 списками.
этом разделе будет показано, как построить список с базовых средств компоновки.
Простой пример выходной информации, содержащей текущую дату:
writs: 'This is
current
ay-datum.
В результате на экране появляется символьная строка This is the current date:, за которой следует те- кущая дата (например, 12/31/1999), содержащаяся в системном поле sy-datum. Два выходных поля раз- деляются пробелами.
В АВАР/4 предусмотрены специальные опции для определения формата, цвета или положения поля,
которые будут рассмотрены в разделе "Улучшение компоновки страницы". Если формат не задан явном виде с помощью одной из опций, содержимое поля выводится в форме, соответствующей типу поля. Символьные поля выводятся со сдвигом содержимого к левой границе, а числовые — к правой.
Обозначение десятичной точки — (.) или (,) — и формат даты (например, MM/DD/YYYY или
DD/MM/YYYY) определяются спецификациями пользователя, которые можно изменять в меню нистрирования (Administration) начального экрана системы R/3. В представленном ниже фрагменте программы поля специально не форматируются:
data:
,
int type
type p decimals 2,
date
string
l i s t ' .
int = 17.
datum
ay-date +
write: string, i n t ,
date.
Надпись Customer list займет левую часть поля string размером в 20 символов, число 17 — праву часть int (без начальных нулей) и будет как 1.25, если пользователь точку (.) для отображения числа с десятичной
И, наконец, содержимое поля date как если был выбран формат даты
Если пользователь для представления числа с десятичной точкой задал запятую (,), тот же самь вывод будет иметь вид
Если позиция в строке не задана в явном виде, выходные поля разделяются одиночными белами. Однако, если а текущей строке не хватает позиций, выходное переносится в начало дующей строки. Длина строки может быть установлена в явном виде с помощью дополнения line-si команды new-page. В противном случае применяется значение по умолчанию — 84 символа. В
случае оператор new-page начинает новую страницу списка и может использован без

Запись данных 95
Приведенная ниже короткая программа содержит цикл do/enddo, обработка внутри которого будет повторяться 40 раз.
цикла находится в системном значение которого пересыла- ется в переменную типа "строка цифр" counter (цикл do/enddo подробно рассматривается в главе 9).
Эта программа создает список с 10 строками по 44 символа в каждой. Каждая строка содержит четыре элемента по девять символов с пробелами, разделяющими выводимые поля. Пятый элемент выводится во второй строке, поскольку не умещается первой.
standard
n.
44 •
do 40
counter -
write counter.
enddo.
Список-результат показан на
8.1. Дополнение standard page heading в конце оператора gram удаляет стандартный заголовок страницы, в качестве которого использован заголовок программы,
задаваемый на экране
8.1
Список с распечаткой
40 чисел и автоматическим
разбиением на строки
Выходная информация может выводиться с новой строки, для служит команда new-line. Тот же самый результат можно получить с помощью дополнения (/) для формата команды write или оператора skip. В следующей программе использованы оба приема.
выполнепия программы приведен на рис. 8.2.
write 'This string will appear on the f i r s t l i n e . ' .
write:
l i n e ' ,
/ 'Yet another line'.
skip 3.
write /
produces
empty
Задать положение поля в списке можно с помощью дополнения at оператора или команды position, которая определяет положение следующего выходного поля. Пример применения обоих этих приемов приведен в следующем фрагменте:
write at 5 ' p o s i t i o n 5' .
роз 20.
write at
'position 20'.
position =
write 'position 40'.

96 Глава 8
Рис. 8.2
Ведомость с тремя
пустыми строками
размер поля определяется его типом (например, 2п байт для упакованного числа длиной п), однако эту можно динамически изменить, используя дополнение at:
pOS
write at
'position
length 20'.
Относительное положение может быть задано с помощью дополнения under, позволяющего привя- зать позицию к уже выведенному на экран полю. В данном случае выходное поле записывается в той же колонке, что и поле, к которому оно привязано.
Оператор write переходит на другую страниц)' вывода, так как страница имеет некоторую длину. По умолчанию задается только одна выходная страница бесконечной длины. Разделитель страниц разрешено задавать в явном виде посредством команды new-page. Заголовки и колонтитулы выводятся при возникновении событий н
(см. главу 17).
Улучшение компоновки страницы
Для улучшения представления выходной информации на экране можно настроить процедуру вывода.
Допускается использовать в списках такие графические элементы, как символы или пиктограммы. С
помощью дополнения color операторов write или format задается цвет фона поля иди части списка.
Наконец, можно выбрать опции вывода, которые связаны с типом, например визуализацию знака числа или число десятичных знаков в числовом поле.
СИМВОЛЫ И
пиктограммы
АВАР/4 имеет около 200 предварительно определенных символов и пиктограмм, которые можно выводить на экран, используя дополнения as symbol или as icon команды
/
as
/
as
/
t_hand as
/
as
/
as
/ icon_delete as
/
as
' fax machine' ,
pointing
'checked; okay',

Запись данных 97
Имена символов и циклограмм являются предварительно определенными константами, которые вклю- чены в команды include и include соответственно. Список-результат показан на рис. 8.3.
Рис. 8.3
Несколько символов
и пиктогамм, добавленных для улучшения внешнего
вида списка
Цвета
Дополнение color оператора write позволяет задать цвет фона для каждого поля:
write 'Header' c o l o r c o l _ h e a d i n g .
Ниже приведен перечень разрешенных цветов.
Имя цвета Область Описание
в
применения цвета заголовки ключевые столбцы основной список светло-серый фон серый положительное ограничение зеленый отрицательное ограничение красный управляющие уровни фиолетовый coLtotal итоговые суммы желтый
Обратите что имена цветов отражают область их а не обычное название самого цвета (например, красный). SAP использует подобный подход к применению цветов исключи- тельно для того, чтобы все списки бизнес-приложений выглядели и воспринимались единообразно. Так,
ключевые столбцы всегда должны быть окрашены в один и тот же цвет.
По умолчанию весь текст выводится в цвете coLbackground. Если цвет задается в команде write, он действует только па текущее поле. Переключать стандартные цвета можно с помощью команды format,
например сделать цвет
(желтый) стандартным для всех текстов:
c o l o r
В АВАР/4 можно восстановить стандартный текущий цвет с помощью команды format color off или задать другой цвет. Разрешается переопределять любой цвет, указав в операторе write конкретный цвет дог каждого поля.
Допускается также изменять интенсивность цвета, уменьшая его яркость (по умолчанию цвет яркий);
write ' total
color
intensified
Формат, заданный в операторе format, остается в силе до тех пор, пока будет задан новый.
Однако с помощью оператора можно изменить формат отдельного поля. Рассмотрим следующую программу:

98 Глава 8
color format color skip.
w r i t e : /
color
'Background' ,
color
/ ' Total sum' color off.
Выходной список,
этой будет иметь серовато-синюю первую строку заголовка, за которой идет пустая строка. Фон полей следующей строки —
серый и красный, а фон поля последней строки — желтый.
С помощью цвета можно выделить в списке части информации. Для подбора наилучшего сочетания цветов, используемых в были проведены исследования, целью которых являлся поиск наиболее эффективного (в смысле восприятия) отображения страницы, и по результатам этих исследований установлены
Пользователь, конечно, может задать свою собственную схему цветов.
Опции вывода, зависящие от типа поля
АВАР/4 предлагает специальные опции для вывода полей, связанные с типом последних. Следующие примеры поясняют действие этих опций:
• no-sign: знак не выводится
• currency: задается формат валюты

устанавливается число десятичных знаков
• using edit mask: задается шаблон формата

удаляются промежутки между полями в строке
Полный перечень опций и результатов их выполнения можно получить из оперативной справки АВАР/4 Help в контексте описания команды write.
Например, можно вывести время с помощью маски редактирования (edit mask):
data time type t value write at (8)
using e d i t mask ' :
Эта программа выведет на экран время 15:46:33. С помощью дополнения using edit mask необходимо в явном виде задать выходную длину поля, поскольку дополнительные символы требуют ного пространства. В противном случае время будет выведено в виде 15:46, так как длина поля типа по умолчанию равна 6, а этого недостаточно для записи всех символов, включая секунды.
Поддержка нескольких языков
ЕСЛИ программу предполагается применять в другой стране со своим национальным языком, то текст списка-результата должен быть переведен на этот язык. АВАР/4 предлагает удобный способ вывода текста на языке, задаваемом пользователем во время регистрации в системе. При этом нет необходи- мости изменять программу. Для выведения текста на языке пользователя нужно просто присоединить определитель (символ) текста к выходному литералу. Его можно указать также вне контекста w r i t e : /
without
/ 'Original t e x t of source code' (001),
/
Двойной щелчок мышью на определителе текста в режиме Editor позволяет переключиться на новый экран, обеспечивающий ввод и редактирование текстов на текущем языке
Результаты выполнения приведенной выше программы показаны на рис. 8.5.
Оба способа задания определителей текста приводят к одинаковым результатам, за исключением единственного случая. Добавление определителя текста к литералу всегда гарантирует наличие текста на экране (печатной странице) —
определителя текущего языка, либо оттранслированного литерала,
определитель текста не поддерживается. Напротив, если, применяя вторую альтернати- ву, не поддерживать текст, выходной экран окажется пустым.

Запись данных 99
Рис. 8.5
Результат выполнения
программы, использующей
средства определителя текста
Рис. 8.4
Сопровождение
определителей текста

100 Глава 8
Резюме
Поддержка нескольких языков рассматривается в разделе Текстовые
зависящие от языка" главы 17.
• Стандартный способ вывода определяется типом поля: символьные поля сдвинуты к левому краю поля, числовые — к правому, без заполнения начальными нулями, поля чисел с десятичной точкой и дат выводятся согласно спецификациям пользователя.
• Позиция и выводимая длина могут задаваться с помощью дополнения at команды write.
• Предварительно определенные символы и пиктограммы отображаются с помощью дополнений symbol и icon.
• Разрешается использовать восемь цветов, каждый цвет имеет вариант с пониженной яркостью.
• Существует несколько опций, связанных с типами полей: no-sign, currency, decimals, using edit mask и т.д.
• С помощью определителей текста можно автоматически переводить выходные тексты на нужный язык без изменения исходного текста программы.
Следующая глава будет посвящена более сложным средствам программирования, применяемым для разработки больших приложений, а именно событиям, условиям и циклам.

Глава 9
События и управление
выполнением программы
• Системные события и действия пользователей,
управляющие выполнением программы
• Условия с логическими выражениями
• Циклы с условиями завершения

102 Глава 9
Abap/4 относится к языкам, управляемым событиями, т.е. действия пользователя или события управляют выполнением программы, В повседневной жизни мы постоянно сталкиваемся с по- нятием события. Предположим, служащий работает в информационном отделе компании. Отвечая на телефонный звонок, он должен поговорить с абонентом и,
произвести определенные дейст- вия, например послать абоненту информационные материалы. Событием другого типа можно назвать ситуацию, когда в приемную заходит посетитель и спрашивает, где находится конференц-зал,
этом случае служащий дает необходимые разъяснения. Эти два события объединяет то, что служащий заранее не знает, когда произойдет событие. Между тем хорошо известно, что нужно делать а каждом случае,
т.е. имеется детерминированный ответ. Точно так же программа,
событиями, реагирует на их возникновение. Например, пользователь нажимает кнопку или указывает на строку в списке двойным щелчком мыши. Программа отвечает появлением диалогового окна или приглашением к другим дейст- виям.
Концепция события в является мощным и гибким инструментом, который позволяет рабатывать диалоговые программы, так как система автоматически обрабатывает события. Поскольку события инициируются пользователем или системой, они образуют внешнее управление программой. Ис- пользуя такие управляющие структуры, как и do/enddo, можно выполнять различные ветви программы, переключая их в зависимости результатов проверки условий внутри самой про- граммы. Их принято называть внутренним управлением. Диалоговые программы с широкими интерактив- ными возможностями (например, с диалоговыми окнами) обычно порождают большое число событий.
С другой стороны, алгоритмы вычислений требуют применения инструментов внутреннего управления.
На практике внешнее управление представлено событиями, описывающими основные шаги управления,
в то время как внутреннее управление используется для структурирования тех частей программы, ко- торые последовательно обрабатывают реакцию на каждое событие.
В данной главе на примере выбора пользователем строки из списка проиллюстрирована обработка события, (Более сложные события будут рассмотрены в частях V и VI), а также описаны внутренние управляющие структуры, в частности условие if. Как и в других языках программирования,
циклов — наиболее удобный прием в тех случаях, когда необходимо многократно выпол- нять одну и ту же операцию, такую как извлечение квадратного корня из чисел от до 100. Безусловные циклы реализуются с помощью do/enddo, циклы с завершением по условию —
Внешнее управление: события
В АВАР/4 для описания взаимодействия программы с пользователем и системой "существует набор событий. Поскольку здесь будут обсуждаться общие свойства событий, мы объясним, как обрабатывается типовое событие at line selection, возникающее при двойном щелчке мышью на строке выходной стра- ницы экрана.
Предположим, программа выводит на экран список следующим образом: все данные клиентов из базы данных считываются в цикле, содержащем оператор select (в главе 11 будет объяснено, как полу- чить доступ к базе данных), и отображаются командой write:
s e l e c t *
Чтобы обеспечить переключение обработки, программа должна реагировать на выбор пользователем строки. Операторы этого события записаны после оператора at line a t s e l e c t single * from customers
При двойном щелчке мышью на какой-либо строке будут выполнены все команды между at line se- lection и следующим оператором события или концом программы.
Кроме события at selection, в АВАР/4 немало и других событий, среди которых наиболее часто встречаются:
• at line-selection, at реакция на действия пользователя (см. главу 17)

создание и вывод на экран заголовков и нижних колонтитулов страниц
(см. главу 17)

get,
поиск данных, с помощью Logical Databases (см. главу 15)
process before output, process after input: события, определяющие действия системы до и после вывода на экран (см. главу 19)

События и управление выполнением программы 103
При возникновении события система выполняет все операторы между ключевым словом данного тия и ключевым словом следующего
Каждая программа по умолчанию обладает событием которое инициируется в начале выполнения программы. Тем не менее его можно включить в программу в явном виде. Порядок операторов событий в исходном тексте программы не имеет значения, а порядок их обработки определяется только пользователем или действиями системы.
Внутреннее управление: условия и циклы
ДЛЯ определения внутреннего управления АВАР/4 поддерживает логические условия (logical conditions) и циклы (loops).
Условия
Практически каждая программа (написанная на любом языке программирования) должна различать ситуации путем проверки логических условий. Например, анализ регистрации авиарейсов в туристичес- ком агентстве показал, что коммерсанты обычно предпочитают места бизнес-класса, а остальные кли- енты — более дешевые места экономического класса. В АВАР/4 предусмотрены две базовые конструкции для определения подобных ситуаций:

ветвление по условию, результат проверки которого заранее неизвестен

ветвление в соответствии с фиксированным набором возможных значений
Ниже приведен пример использования конструкции при заказе билетов в бизнес- класс бизнесменами и в экономический класс остальными клиентами:
if
= ' Б ' .
*
business
. . .
* book economy class
. . .
При содержимом поля равном В (бизнесмен), выполняются операторы между if и else. Затем выполнение программы продолжается с оператора, который располагается после endif. Если customers-custtype не равно В, то выполняются команды между else и endif.
Разрешается использовать вложенные операторы if. Допустим, нужно увеличить целое число на 1,
если оно положительное, вывести на экран zero, если число равно 0, и уменьшить на 1 в остальных случаях:
> 0,
п п + 1.
iff
- 0.
write
n n - 1.
endif.
Вложенные предложения if часто употребляются, когда нужно выбирать более чем из двух вариан- тов. В нашем примере таких вариантов три: n > 0 , n = 0 и п < 0. В большинстве случаев можно написать более короткую программу, используя elseif:
iff n > 0.
n
n + 1.
n
0.
write
n
n -
«ndif.
При п больше нуля выполняются только операторы между if и elseif. В противном случае проверя- ется условие, записанное после elseif, и, если оно удовлетворяется, то сначала выполняется часть про- граммы между elseif и else, а затем программа продолжает выполняться с оператора, записанного после endif. Если второе условие также не удовлетворяется, выполняются операторы, записанные после else.
Эта более короткая программа дает тот же результат, что и предыдущая.

104 Глава 9
Кроме нескольких вложенных операторов if, может использоваться ряд операторов
Так как глубокое вложение предложений if обычно затрудняет понимание программы, рекомендуется по воз- можности прибегать к операторам elseif. Во вложенных конструкциях if каждый оператор else относится к ближайшему оператору if. Этот оператор считается неправильным, если ему не соответст- вует ближайший endif, однако elseif и else могут отсутствовать, как это показано в следующем примере:
i f n
0.
write
При работе с некоторым фиксированным набором возможных значений поля для ветвления по ним можно использовать синтаксическую конструкцию case/when/endcase:
case
when
. write
is
when
. write 'color is green' .
when ' yellow'. write
is yellow' .
when
write
При выполнении программы содержимое поля color сначала проверяется на значение red. Если резуль- тат положительный, выполняются операторы до следующего when. Оставшаяся часть оператора case пускается, и выполнение программы продолжается с оператора, записанного после endcase. В случае отрицательного результата обрабатывается следующее предложение when (значение green). При положи- тельном результате выполняются операторы, стоящие после when 'green'. И, наконец, если результаты всех проверок отрицательные, выполняются операторы, стоящие после when others. Эта часть может отсутство- вать, если разработчик не хочет принимать во внимание никакие другие возможности, кроме описанных в явном виде в операторах when. Приведенная выше программа эквивалентна следующей:
if color
write
is red'.
elseif color = 'green' .
write
is
.
elseif color
write
is yellow'.
else.
write 'non-standard color' .
endif.
Выбор варианта записи условия зависит от вкуса разработчика, однако в предложении when можно использовать только ограниченный набор условных операций. Поле, расположенное после case, всегда сравнивается на равенство с величиной, находящейся после when. Следовательно, в case нельзя записать условие типа а >
Логические выражения
Оператор if содержит две части: ключевое слово if и логическое выражение. В приведенном выше примере были продемонстрированы два типа логических выражений:
• а - b если а равно
• а > b (true, если а больше
В АВАР/4 разрешается использовать буквенные эквиваленты вместо символов математических опе- раций:
• a eq b (вместо а b)
• a gt b (вместо а > b)
Точно так же могут быть выражены и другие отношения:
• a b (а о а не равно b
• a b (a < b): а меньше b
• a ge b (a b): а больше или равно b
• a b (a <= b): а меньше или равно b
• a between b and с: (b <= a) and (а о с)

События и управление выполнением программы 105
• a is initial: a имеет начальное значение (0 для чисел и пробел для символов).
Условия могут группироваться с помощью скобок и объединяться посредством and или or, а также проверяться на наличие противоположного значения с использованием not:
if (not
£ 2 ) ) o r
=
and
Скобки могут отсутствовать, если подразумеваются принятые правила иерархии операций. Приори- тет оператора not выше, чем and, который, в свою очередь, выше
Поэтому приведенное ранее выражение эквивалентно следующему:
if not
or
-
and
=
Вычисление выражения производится слева направо и завершается, когда результат однозначно определяется начальной частью условия:
if f l =
and
>
and
<
Если fl не равно f2, то условие принимает значение false (ложь) и система прекращает его
Сравнение полей различных типов
В логических выражениях часто сравниваются поля различных типов. Например, нужно сравнить текст, содержащий цифры, с упакованными числами:
data: n(4) type n value
, р type p.
if n > р.
write 'n is
than p ' .
Можно предположить, что условие будет удовлетворено для начальных значений
(0124 и 0).
Это верно с точки зрения языка, но сравниваемые числа относятся к разным типам. Следовательно,
одно из них перед сравнением должно быть преобразовано. В этом примере п преобразуется к упако- ванному числу 124, которое уже можно сравнивать со значением р (0).
В общем случае, если у элементов отношения (например, а <
разные тип и длина, сравнение будет иметь смысл только при соблюдении правил преобразования. Порядок применения правил сле- дующий:
Если оба поля имеют одинаковый тип и разную длину, то более короткое из них дополняется нулями или пробелами (слева или справа в зависимости от типа). Правила преобразования move приведены в главе
2. Если одно из полей типа f, другое также преобразуется к типу f.
3. Если одно из полей типа р, другое также преобразуется к типу р.
одно из полей типа или t, то другое также преобразуется к этому типу. Сравнение полей типа "дата и время" не предусмотрено, и возникает ошибка выполнения.
5. Если одно из полей типа п, а другое типа с или х, то они преобразуются к типу р.
6. Если одно из полей типа а другое типа с, то поле преобразуется к типу с (символьному).
Например, в случае, когда операнды имеют одинаковый тип и разную длину, действует первое правило:
data: c4(4) v a l u e ' 1 2 4 ' ,
v a l u e ' 0 0 1 2 4 ' .
if c4
с 5 .
write ' с4 and c5 are equal' .
Начальные значения полей с4 и с5 равняются 124 и 00124 соответственно, и условие с4 = с5 не выполняется, так как во время преобразования с4 заполняется пробелами, а не нулями (т.е. 124 не равно
Сравнение символьных строк
В предыдущих примерах проверялись в основном отношения, содержащие числа, например а > Ь.
Довольно часто требуется определить, содержит ли символьное поле заданный символ (например, А)
или строку символов (например, SAP). АВАР/4 предлагает следующие отношения сравнения символь- ных полей а и а
b (содержит
а содержит как минимум один символ из b а со b (содержит только): а содержит только символы из b (в любом порядке)

106 Глава 9
Ь (содержит строку): а содержит символьную строку b (концевые пробелы игнориру- ются; при сравнении не различаются символы верхнего и нижнего регистров)
а b (содержит шаблон): а содержит шаблон b (* означает любую символьную строку, + —
отдельный символ)
Выполнение этих условий иллюстрируется следующими примерами:
data:
(6) value
,
i f а
'
.
result - a+sy-fdpos(2).
Так как поле содержит символ Р, результат проверки — true (истина). Кроме того, системное поле
(от position — положение в поле) будет иметь сдвиг символа Р относительно начала поля
(в данном примере 3). Следовательно, после выполнения поле result будет содержать Р/. Приведем пример сравнения второго типа:
i £ а со 'АВР' .
write 'a only contains А, В, and
Условие в этом примере не выполняется, поскольку поле а содержит также символы / и 4. Следую- щий пример иллюстрирует третий случай:
i f a
write ' a contains the string
.
В данном примере условие выполняется, так как поле содержит строку ВАР. И, наконец, приведем пример поиска по шаблону:
if а ср ' *АР++' .
write ' a contains АР
two more
Условие удовлетворяется, так как поле содержит строку АР, которой предшествует другой набор символов (соответствует *) и которая завершается двумя символами, не равными пробелам (соответст- вуют ++).
Приведем еще несколько примеров.
АВАР/4' со false, sy-fdpos-3 (сдвиг в строке АВАР/4, но не в строке АВ)
'АВАР/4' cs 'ВА':
sy-fdpos=l (сдвиг от строки ВА в АВАР/4)
'АВАР/4' cs 'AA': false,
(длина АВАР/4)
'АВАР/4' ср '*ВА*':
sy-fdpos=l (сдвиг начала строки ВА в строке 'АВАР/4' ср '++А+*': true, sy-fdpos-0 (сдвиг начала строки ++A+ в строке АВАР/4)
ср '+А*': false,
(длина АВАР/4)
ЦИКЛЫ
Изучив использование условных выражений для организации ветвления в программе, можно перей-
ти к описанию циклов и условий их завершения, которым и посвящен данный раздел.
Повторяющиеся операции можно выполнять с помощью следующих элементарных конструкций для
организации циклов:

— безусловный цикл

— цикл с условием завершения
Другие конструкции циклов, используемые для внутренних таблиц и таблиц базы
рассматриваются в части IV.
Предположим, необходимо вычислить квадраты первых ста чисел:
do 100 times
=
**
write

События и управление выполнением программы 107
В начале выполнения программы, на первом шаге цикла, системная переменная sy-index равна 1. С
каждым шагом цикла она автоматически увеличивается на 1 и может служить счетчиком цикла. Цикл завершается после 100 шагов. Вместо того чтобы использовать статическую верхнюю границу цикла,
можно задавать ее динамически, путем задания поля:
data
±.
п 200.
do n
Часто заранее неизвестно число шагов цикла. В этом случае применяется бесконечный цикл, и его завершение контролируется с помощью некоторого условия:
do.
terminate loop after 5 steps or when the color is red
if sy-index > 5 or color
endif.
* main loop step
write..*
Команда exit прекращает выполнение цикла, и программа будет продолжена с оператора, записан- ного после enddo. Потенциальный риск использования таких конструкций очевиден: если условие за- вершения сформулировано некорректно, цикл может никогда не завершиться. Это приведет к ошибке
(превышение лимита времени) в программе. Команда continue позволяет прервать текущий шаг цикла и продолжить выполнение со следующего:
do max times.
+
if f 2 <
endif.
).
enddo.
Команда do/enddo поддерживает также применение вложенных циклов. Системное поле sy-index всегда содержит правильный номер шага цикла, который автоматически помещается в стек выполнения.
Предположим, необходимо реализовать алгоритм двоичного поиска. Так как число шагов заранее неизвестно, можно применить следующее условие завершения:
= 0.
max
while key <>
key = ( min + max ) div
if key >
max
key -
e l s e .
min
key + 1.
endif.
Всякий раз при выполнении условия while обрабатываются операторы между while и endwhile. Когда условие становится ложным, программа продолжает выполняться с оператора, записанного после end- while. Необходимо позаботиться, чтобы условие было выполнено за определенное время,
возник- нет ошибка, связанная с превышением его лимита (time-out). Остальные условия завершения можно сформулировать с помощью оператора exit:
while a <> Ь.
if a > b .
endif.
Если условие а > b выполняется, цикл while завершается и программа продолжается с оператора,
записанного после endwhile. Точно так же в цикле do/enddo можно прекратить выполнение текущего шага, применив continue.

108 Глава 9
Резюме
• События — программы языка АВАР/4, имеющие структуру, ориентированную на обработку собы- тий, которые инициируются действиями пользователя или программой. При возникновении со- бытия выполняются все операторы между текущим и последующим событиями.
• Операторы позволяют различать ситуации (обеспечивая ветвление программы) по результатам выполнения логических условий.
• Операторы позволяют различать ситуации в соответствии с некоторым набо- ром возможных значений.
• Поля различных типов и длин могут участвовать в вычислении логических выражений. Перед сравнением поля преобразуются по общим правилам, установленным для оператора move.
• do/enddo — безусловный цикл. Завершается при достижении верхней границы числа шагов в цикле (do n times) или при выполнении оператора Exit.

— условный цикл с условием завершения. Может также завершаться при условии выхода из цикла.
В следующей главе рассказывается о применении подпрограмм и функций. Использование этих эле- ментов языка необходимо при разработке больших и хорошо структурированных приложений.

1   ...   4   5   6   7   8   9   10   11   ...   24


написать администратору сайта