Структура программы отчета
Программа отчета начинается оператором REPORT, в котором указывается имя и список аргументов, и включает секции DEFINE, OUTPUT, ORDER BY и FORMAT, из них только последняя является обязательной.
В секции DEFINE описываются аргументы, переданные в отчет и локальные переменные отчета. Правила их описаний аналогичны описаниям 4GL-переменных, за исключением того, что параметры отчета не могут быть типа ARRAY, а также записями с членами ARRAY.
Секция OUTPUT
Информация секции OUTPUT используется в момент выполнения оператора Start Report. Ниже приведен формат секции OUTPUT:
[OUTPUT
[
REPORT TO направление вывода:
{
"filename" | - в файл;
PIPE "program"| - на принтер;
PRINTER - в программный канал;
}
]
[LEFT MARGIN integer] левая граница поля;
[RIGHT MARGIN integer] правая граница поля;
[TOP MARGIN integer] верхняяя граница поля;
[BOTTOM MARGIN integer] нижняяя граница поля;
[PAGE LENGTH integer] число строк на странице;
]
Оператор REPORT TO в секции OUTPUT направляет вывод отчета в файл, на системный принтер или в программный канал. Операторы LEFT (RIGTH) MARGIN задают соответственно левую (правую) границу печатной страницы отчета. Операторы TOP (BOTTON) MARGIN устанавливают сколько строк нужно пропустить в начале (в конце) каждой страницы отчета. Оператор PAGE LENGTH устанавливает количество строк на каждой странице отчета.
Секция ORDER BY
Секция ORDER BY специфицирует переменные, по которым необходимо отсортировать строки, передаваемые в отчет (альтернатива к конструкции order by SQL-оператора Select), а также порядок, в котором должны обрабатываться блоки Before group, After group, указанные в секции FORMAT. Сортировка выполняется последовательно по каждому аргументу, указанному в конструкции order by. Дополнительный аргумент EXTERNAL указывает, что строки были ранее отсортированы (на основании конструкции order by SQL-оператора Select) и их не требуется пересортировывать.
Секция FORMAT
Секция FORMAT определяет внешний вид отчета.
Ниже приведен формат секции FORMAT.
FORMAT
{
EVERY ROW | быстрый отчет;
{
{
[FIRST] PAGE HEADER | в начале [первой] страницы;
PAGE TRAILER | в конце страницы;
ON {EVERY ROW | для каждой строки;
LAST ROW} | после последней строки;
{BEFORE | AFTER} перед/после группы.
GROUP OF variable
}
statement . . .
} . . .
}
Самая простая секция FORMAT содержит единственный оператор EVERY ROW и используется для формирования быстрого отчета; в этом случае в секции FORMAT нельзя использовать никакие другие операторы или управляющие блоки.
Более сложные секции FORMAT могут содержать следующие управляющие блоки:
PAGE HEADER control block; | ON LAST ROW control block; |
PAGE TRAILER control block; | BEFORE GROUP OF control block; |
ON EVERY ROW control block; | AFTER GROUP OF control block; |
После перечисленных выше конструкций, открывающих управляющий блок, следует последовательность 4GL-операторов (в том числе и SQL-операторов), 4GL-функций, а также операторов и функций форматирования, которые могут использоваться только в блоке REPORT.
Операторы форматирования секции FORMAT
NEED integer-expr LINES | Начать вывод с новой страницы, если заданное количество строк (LINES) не помещается на текущей странице | |
PAUSE ["string"] | Приостановить вывод в отчет до нажатия клавиши Enter | |
PRINT [integer-list] [;] | Вывести информацию в отчет так, как указано в секции OUTPUT; один оператор PRINT выполняет вывод в одну строку до тех пор, пока не использована конструкция CLIPPED (отсечь пробелы), USING(форматировать) или n SPACES (пропустить n позиций); очередное выражение выводится в поле, ширина которого зависит от типа данных | |
Тип данных | Размер по умолчанию | |
Char | размер Char-переменной | |
Date | 10 | |
Float | 14 (включая знак и десятичную точку) | |
Smallint | 6 (включая знак) | |
Integer | 11 (включая знак) | |
Smallfloat | 14 (включая знак и десятичную точку) | |
Decimal | число цифр + 2 (включая знак и десятичную точку) | |
Serial | 11 | |
Money | число цифр + 3 (включая знак, десятичную точку и знак доллара) | |
PRINT FILE "filename" | Вывод содержимого текстового файла в отчет | |
SKIP {integer-expr LINE[S] | TO TOP OF PAGE} |
Пропуск строк в отчете или переход к началу следующей странице |
Функции форматирования секции FORMAT
[GROUP] указание отображать информацию только для конкретной группы (только в AFTER GROUP OF);
{
COUNT(*) | общее количество строк;
PERCENT(*) | процент от общего числа строк
в отчете;
{SUM | AVG | MIN | MAX} (expression)
сумма, среднее, минимальное, максимальное значение от указанного выражения с игнорированием значения NULL в
выражении;
}
[WHERE Boolean-expr] условие, уточняющее количество строк;
LINENO номер строки отчета;
PAGENO номер страницы отчета;
integer-expr SPACE[S] пропустить указанное число пробелов.
Управляющие блоки PAGE HEADER ( PAGE TRAILER) указывают, какая информация должна появиться в начале (в конце) каждой страницы отчета.