Цикл WHILE Назад В начало Вперед

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

<цикл WHILE > ::=
.{ [<горизонтальный цикл>] [<цикл с отступом>]
		while <условие> [; <имя цикла>]
		<тело цикла>
.}

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

<условие> ::= <логическое выражение>

Цикл может иметь имя, расположенное после условия. Перед именем цикла ставится точка с запятой.

Имя цикла используется при создании агрегатных полей.

<имя цикла> ::= <идентификатор>
<тело цикла> ::=
		[<заголовок>]
		 <тело>
		[<подножие>]

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

Заголовок и подножие цикла, если они заданы, печатаются на каждой странице отчета в пределах действия цикла. Правила оформления заголовков и подножий цикла совпадают с правилами для заголовков и подножий формы.

В теле цикла используется та же конструкция <тело>, что и в соответствующей форме.

Для выхода из цикла до момента его нормального завершения в конструкции <программный блок> тела цикла можно вызвать метод формы fBreak.

Для выхода из текущей итерации цикла до момента ее нормального завершения и перехода к следующей итерации в конструкции <программный блок> тела цикла можно вызвать метод формы fContinue.

Алгоритм выполнения цикла следующий:

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

Если условие не может быть вычислено или условие приняло значение false к началу цикла, то цикл не будет иметь ни одной итерации.

Пример 1

.form auto2
.table blank
.var
  x:integer
.endvar
.begin
  x:=1;
end.
   пример цикла while
   ------------------
.fields
  x
.endfields
.{while x<10
.begin
  x:=x+1;
end.
  x= (
.}
.endform

Пример 2

.form "ex3_0_1"
.ard
.var
  x:integer
.endvar
.table blank
.fields
  x
  x
  x
.endfields
пример горизонтального цикла
-----------------------------
.{horizontal while x<10
.begin
  x:=x+1;
end.
  x = ^
.}
.begin
  x:=0;
end.
пример горизонтального цикла с отступом
------------------------------
.{horizontal margin while x<10
.begin
  x:=x+1;
end.
  x = ^
.}
.begin
  x:=0;
end.
пример обычного цикла с отступом
--------------------------------
.{margin while x<10
.begin
  x:=x+1;
end.
  x = ^
.}
.begin
  x:=0;
end.
.endform

При исполнении данной автономной формы мы получим следующий отчет:

пример горизонтального цикла
--------------------------------
1 2 3 4 5 6 7 8 9 10
пример горизонтального цикла с отступом
--------------------------------  1 2 3 4 5 6 7 8 9 10
пример обычного цикла с отступом
--------------------------------  1
														2
														3
														4
														5
														6
														7
														8
														9
														10