Язык программирования баз данных Informix-4GL

4. Разработка отчетов в Informix-4GL

4.1. Управление программой отчета

4.2. Структура программы отчета

4. Разработка отчетов в Informix-4GL

Отчет - документ, формируемый на основе таблиц базы данных или входного файла в формате ASCII. Средства генерации отчетов в Informix-4GL распадаются:

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

4.1. Управление программой отчета

Управление отчетом из 4GL-программы осуществляется с помощью трех операторов: Start Report, Output to Report, Finish Report.

Оператор Start Report идентифицирует отчет (имя программного блока REPORT) и указывает направление выдачи отчета (принтер, файл и пр.), оператор Output to Report используется для выдачи очередной строки (порции данных) в отчет, делая это, как правило, в цикле, оператор Finish Report заканчивает работу с отчетом.

4.2 Структура программы отчета

Программа отчета начинается оператором 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;

FIRST PAGE HEADER 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) указывают, какая информация должна появиться в начале (в конце) каждой страницы отчета.

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

Управляющий блок ON EVERY ROW задает действия, которые должны быть выполнены для каждой строки, переданной в отчет.

Управляющий блок AFTER GROUP OF задает действия, которые нужно выполнить по окончании формирования группы строк. Группа строк - это все строки, которые содержат одно и то же значение для переменной, заданной в конструкции AFTER GROUP OF. Группировка задается в секции ORDER BY отчета, либо спецификатором ORDER BY SQL-оператора SELECT. Если в спецификаторе ORDER BY задано более одной переменной Informix-4GL упорядочивает строки сначала по первой переменной, затем по второй и т.д. до переменной, которая была задана последней.

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

В случае сортировки по нескольким полям (a, b, c) последовательность включения Control-блоков в секцию FORMAT должна иметь вид

Before group of a

Before group of b

Before group of c

on every row

After group of c

After group of b

After group of a

Управляющий блок ON LAST ROW задает действия, которые должны быть выполнены после обработки последней строки, переданной в отчет.

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

Фрагмент сгенерированного отчета приведенной выше программы может быть следующим.