Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4. Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР. Разработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс
Скачать 28.36 Mb.
|
Глава 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 Рис. 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. • — условный цикл с условием завершения. Может также завершаться при условии выхода из цикла. В следующей главе рассказывается о применении подпрограмм и функций. Использование этих эле- ментов языка необходимо при разработке больших и хорошо структурированных приложений. |