За каждой статьей описания отчета следуют одна или несколько статей с номером уровня 01, за каждой из которых следует иерархическая структура, подобная описаниям записи в Коболе. Каждая статья с номером уровня 01 и ее подчиненные статьи опи- ■сывают группу отчета. Каждая группа отчета состоит из нуля, одной или нескольких печатаемых строк, рассматриваемых как одно целое. Группа отчета, которую нужно напечатать, печатается целиком на одной логической странице; группа никогда не разбивается при переходе на следующую страницу.
Структура отчета
При определении структуры отчета главное внимание должно быть уделено требованиям вертикального и горизонтального позиционирования, манипулированию данными, физическим и логическим подразделениям отчета.
Вертикальное позиционирование
Средства генератора отчетов позволяют пользователю описывать группы отчета, содержащие множество строк. Вертикальное позиционирование строк на странице определяется фразой LINE NUMBER (НОМЕР СТРОКИ), связанной с каждой строкой. Фраза NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) указывает, сколько строк следует пропустить после представления последней строки группы. Первая фраза LINE NUMBER (НОМЕР СТРОКИ) следующей группы определяет дополнительную информацию о пропуске строк, которую нужно использовать при позиционировании этой группы.
Горизонтальное позиционирование
Генератор отчетов позволяет пользователю позиционировать поля данных в строке отчета посредством фразы COLUMN NUMBER (НОМЕР СТОЛБЦА). Система управления генератором отчетов обеспечивает заполнение пробелами промежутка между всеми определяемыми полями.
Манипулирование данными
При использовании средств генератора отчетов перемещением данных в группу отчета управляют фразы секции отчетов, а не операторы раздела процедур. Фразы секции отчетов, осуществляющие манипулирование данными, следующие: SOURCE (ИСТОЧНИК), SUM (СУММА) и VALUE (ЗНАЧЕНИЕ).
Фраза SOURCE (ИСТОЧНИК) определяет посылаемое данное неявного оператора MOVE (ПОМЕСТИТЬ). Принимающее печатаемое данное определяется описанием данного группы отчета, в котором появляется фраза SOURCE (ИСТОЧНИК).
Фраза SUM (СУММА) приводит к автоматическому учреждению счетчика суммы. Объект фразы SUM (СУММА) называет данное (данные), которое прибавляется к счетчику суммы при выполнении оператора GENERATE (ГЕНЕРИРОВАТЬ). Пересылка содержимого счетчика суммы в принимающее печатаемое данное, определенное описание данного группы отчета, в которой имеется фраза SUM (СУММА), совершается автоматически при представлении этой группы отчета.
Фраза VALUE (ЗНАЧЕНИЕ) указывает литерал, который появляется в печатаемом данном группы отчета каждый раз при представлении группы отчета.Итак, данное в группе отчета представляется, если оно сопровождается фразой COLUMN NUMBER (НОМЕР СТОЛБЦА), указывающей, где оно должно быть представлено. Значение, помещаемое в печатаемое данное, определяется фразами VALUE (ЗНАЧЕНИЕ), SOURCE (ИСТОЧНИК) или SUM (СУММА), находящимися в описании группы отчета. Ни при каких обстоятельствах печатаемое данное группы отчета не может получить значение непосредственно от оператора раздела процедур.
Подразделения отчета
При определении того, что представляется на странице, учитываются физическая и логическая организация отчета.
Физическое подразделение отчета
Длина страницы, размер полей заголовка и концовки, размер поля, в котором будут располагаться строки фрагментов, определяется фразой PAGE (РАЗМЕР СТРАНИЦЫ). Система управления генератором отчетов использует фразы LINE NUMBER (НОМЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) для: размещения этих групп отчета, и, если необходимо, для перехода на новую страницу с автоматическим воспроизведением групп отчета PAGE HEADING (ЗАГОЛОВОК СТРАНИЦЫ) и PAGE FOOTING (КОНЦОВКА СТРАНИЦЫ).
Логическое подразделение отчета
Группы отчета типа фрагмент могут быть выстроены во вложенный набор управляемых групп. Каждая управляемая группа может начинаться группой отчета управляемый заголовок и заканчиваться группой отчета управляемая концовка.
Если определены вложенные управляемые группы, распознавание изменения значения управляющего данного в иерархии управления называется прерыванием управления, а строки заголовков и концовок, связанных с управляющим именем-данного, называются группами отчета управляемый заголовок и управляемая концовка.
Во время выполнения оператора GENERATE (ГЕНЕРИРОВАТЬ) система управления генератором отчетов использует иерархию управления для автоматической проверки прерывания управления. Если имеет место прерывание управления, считается, что для всех младших управляющих данных в иерархии управления также имеет место прерывание управления, даже если в действительности их значения не изменились. Распознавание прерывания управления вызывает следующую последовательность действий:
представляются все группы управляемой концовки от младшей до уровня, на котором произошло прерывание управления, включая его;
представляются все группы управляемого заголовка о
туровня, соответствующего прерыванию управления, до самого младшего;
представляется группа фрагмента отчета, имя которого указано в операторе GENERATE (ГЕНЕРИРОВАТЬ).
Операторы раздела процедур генератора отчетов
Операторы раздела процедур генератора отчетов следующие: INITIATE (НАЧАТЬ), GENERATE (ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ), SUPPRESS (ПОДАВИТЬ) и USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).
Оператор INITIATE (НАЧАТЬ) приводит к автоматическому выполнению ряда инициирующих действий системой управления генератором отчетов. Отчет должен быть инициирован прежде, чем можно будет выполнять для него детальную обработку.
Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя- данного приводит к форматизации и записи на устройство вывода указанной группы отчета типа DETAIL (ФРАГМЕНТ). Кроме того, система управления генератором отчетов настраивается на выполнение ряда неявных действий, описанных в п. 3.2 настоящей -части.
Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя- отчета обеспечивает средства генерации итогов. В отчете, производимом оператором данного типа, автоматически подавляется печать всех строк фрагментов и отчет состоит только из суммарных итогов, накопленных во время обработки групп отчета типа DETAIL (ФРАГМЕНТ). Действия, производимые системой управления генератором отчетов по оператору GENERATE имя-от- чета (ГЕНЕРИРОВАТЬ имя-отчета), аналогичны действиям, производимым по оператору GENERATE имя-данного (ГЕНЕРИРОВАТЬ имя-данного), за исключением того, что в первом случае подавляется печать строк фрагмента.
Оператор TERMINATE (ЗАКОНЧИТЬ) вызывает выполнение системой управления генератором отчетов всех автоматических функций, связанных с завершением отчета. Оператор TERMINATE (ЗАКОНЧИТЬ) должен быть выполнен до закрытия файла, содержащего отчет.
Оператор SUPPRESS (ПОДАВИТЬ) обеспечивает средства подавления печати целой группы отчета во время выполнения программы.
Вариант BEFORE REPORTING (ДО ВЫДАЧИ) оператора USE (ИСПОЛЬЗОВАТЬ) обеспечивает механизм, при помощи которого в автоматических процедурах, выполняемых системой управления генератором отчетов, в отдельных случаях могут быть выполнены операторы раздела процедур. Операторы процедуры USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) могут изменять содержимое данных, имена которых указаны во 70фразах SOURCE (ИСТОЧНИК). Таким образом, имеется возможность управления содержимым данных, которые производятся автоматически в группах отчета.
ОБРАБОТКА ТАБЛИЦ
Таблицы данных являются наиболее общим компонентом задач обработки данных. Хотя повторяющиеся данные, составляющие таблицу, могут быть описаны рядом статей описания данных,, имеющих один и тот же номер уровня и подчиненных одному и тому же групповому данному, существуют две причины, почему та-- кой подход не может быть удовлетворительным. Во-первых, с точки зрения документации однородность таких данных не очевидна и, во-вторых, доступ во время выполнения к отдельным элементам при таком подходе затрудняется.
Таблицы данных определяются в Коболе включением фразы OCCURS (ПОВТОРЯЕТСЯ) в статьи описания данных. Эта фраза указывает, что данное должно быть повторено установленное число раз. Данное рассматривается как элемент таблицы, и его имя и описание применяются к каждому повторению или вхождению. Так как каждое вхождение табличного элемента не имеет приписанного ему особого имени данного, ссылка на конкретное вхождение может быть сделана только указанием имени данного табличного элемента вместе с номером вхождения этого элемента. Номер вхождения называется индексом.
Число вхождений табличного элемента может быть фиксированным или переменным.
Определение таблиц
Чтобы определить одномерную таблицу, программист использует фразу OCCURS (ПОВТОРЯЕТСЯ) как часть описания табличного элемента, но фраза OCCURS (ПОВТОРЯЕТСЯ) не должна появляться в описании групповых данных, которые содержат табличный элемент. Пример 1 показывает одномерную таблицу, определяемую данным TABLE-ELEMENT (ТАБЛИЧНЫИ-ЭЛЕ- МЕНТ).
Пример 1
01 TABLE-1.
02 TABLE-ELEMENT OCCURS 20 TIMES.
03 FAM ...
03 NAME . ..
01 ТАБЛИЦА-1.
02 ТАБЛИЧНЫЙ-ЭЛЕМЕНТ ПОВТОРЯЕТСЯ 20 РАЗ.
03 ФАМИЛИЯ...
03 ИМЯ ...В примере 2 TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) определяет одномерную таблицу, но FIO (ФИО) не определяет одномерную таблицу, поскольку в описании группового данного TABLE-ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ), содержащего FIO (ФИО), имеется фраза OCCURS (ПОВТОРЯЕТСЯ).
Пример 2
102 TABLE-1.
03 TABLE-ELEMENT OCCURS 20 TIMES.
04 FIO OCCURS 5 TIMES.
05 FAM ...
05 NAME ...
02 ТАБЛИЦА-1.
03 ТАБЛИЧНЫЙ-ЭЛЕМЕНТ ПОВТОРЯЕТСЯ 20 РАЗ.
04 ФИО ПОВТОРЯЕТСЯ 5 РАЗ.
05 ФАМИЛИЯ ...
05 ИМЯ ...
В обоих случаях полному набору вхождений данного TABLEELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) присвоено имя TABLE-1 (ТАБЛИЦА-1). Тем не менее, нет необходимости давать таблице имя группы, если не требуется ссылка на всю таблицу как на групповое данное.
Ни одна из трех одномерных таблиц, приведенных в двух следующих примерах, не имеет имени группы.
Пример 3
01 INFORMATION.
02 OTDEL . ..
02 FIO OCCURS 20 TIMES . . .
02 N-ROOM ...
01 СВЕДЕНИЯ.
02 ОТДЕЛ . ..
02 ФИО ПОВТОРЯЕТСЯ 20 РАЗ . . .
02 N-КОМНАТЫ . ..
Пример 4
01 INFORMATION.
02 DEPARTMENT OCCURS 20 TIMES .. .
02 FIO . ..
02 N-ROOM OCCURS 5 TIMES . . .
01 СВЕДЕНИЯ.
02 ЦЕХ ПОВТОРЯЕТСЯ 20 РАЗ .. .
02 ФИО ...
02 N-КОМНАТЫ ПОВТОРЯЕТСЯ 5 РАЗ ...
Определение одномерной таблицы внутри каждого вхождения элемента другой одномерной таблицы приводит к образованию .двумерной таблицы. Для определения двумерной таблицы фраза •OCCURS (ПОВТОРЯЕТСЯ) должна появиться в описании данных 72табличного элемента и в описании только одного группового элемента данных, который содержит этот табличный элемент. Так, в примере 5 N-ROOM (N-КОМНАТЫ) является элементом двумерной таблицы — он входит 5 раз в каждый элемент данного DEPARTMENT (ЦЕХ), который сам повторяется 20 раз.
FIO (ФИО) является элементом одномерной таблицы.
Пример 5
02 DEPARTMENT OCCURS 20 TIMES . . .
03 FIO ...
03 N-ROOM OCCURS 5 TIMES . . .
02 ЦЕХ ПОВТОРЯЕТСЯ 20 РАЗ ...
03 ФИО . ..
03 N-КОМНАТЫ ПОВТОРЯЕТСЯ 5 РАЗ ...
В общем случае для определения п-мерной таблицы фраза OCCURS (ПОВТОРЯЕТСЯ) должна появиться в описании данного элемента таблицы и в описаниях (n— 1) групповых данных, содержащих этот элемент.
Начальные значения таблиц
Начальные значения элементов таблиц определяются в секции, рабочей памяти одним из следующих способов:
таблица может быть описана как ряд отдельных статей описания данных, подчиненных одному и тому же групповому данному, каждая из которых определяет значение элемента или части элемента таблицы. При определении записи и ее элементов можно использовать любую фразу описания данного (фраза USAGE (об использовании), PICTURE (ШАБЛОН), и т. п.), если это необходимо для полноты определения. Иерархическая структура таблицы затем показывается использованием статьи REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и связанных с ней подчиненных статей. Подчиненные статьи, следующие за статьей REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и повторяющиеся соответственно фразам OCCURS (ПОВТОРЯЕТСЯ), не могут содержать фразу VALUE (ЗНАЧЕНИЕ);
величины всех размерностей таблицы могут быть инициированы фразой VALUE (ЗНАЧЕНИЕ), относящейся к описанию статьи, определяющей таблицу в целом. Статьи самого низкого уровня покажут иерархическую структуру таблицы; статьи самого низкого уровня не могут содержать фразы VALUE (ЗНАЧЕНИЕ);
значения отдельных элементов таблицы могут быть опре.- делены использованием фразы VALUE (ЗНАЧЕНИЕ).
Ссылки на табличные элементы
Всякий раз, когда пользователь ссылается на табличный' элемент или имя-условия, связанное с табличным элементом, за исключением операторов USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и SEARCH (ИСКАТЬ), ссылка должна указывать, какое именно вхождение предполагается. Для доступа к одномерной таблице достаточно одного номера вхождения требуемого элемента. Для таблиц размерности больше единицы номер вхождения должен быть указан для каждой размерности таблицы. Таким образом, в примере 5 ссылка на четвертый DEPARTMENT (ЦЕХ) или четвертый FIO (ФИО) будет полной, в то время как ссылка на четвертый N-ROOM (N-КОМНАТЫ) полной не будет. Для ссылки на N-ROOM (N-КОМНАТЫ), который является элементом двумерной таблицы, пользователь должен указать, например, четвертый элемент N-ROOM (N-КОМНАТЫ) в пятом элементе DEPARTMENT (ЦЕХ).