За каждой статьей описания отчета следуют одна или не­сколько статей с номером уровня 01, за каждой из которых следу­ет иерархическая структура, подобная описаниям записи в Коболе. Каждая статья с номером уровня 01 и ее подчиненные статьи опи- ■сывают группу отчета. Каждая группа отчета состоит из нуля, од­ной или нескольких печатаемых строк, рассматриваемых как одно целое. Группа отчета, которую нужно напечатать, печатается це­ликом на одной логической странице; группа никогда не разбива­ется при переходе на следующую страницу.

  1. Структура отчета

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

  1. Вертикальное позиционирование

Средства генератора отчетов позволяют пользователю описы­вать группы отчета, содержащие множество строк. Вертикальное позиционирование строк на странице определяется фразой LINE NUMBER (НОМЕР СТРОКИ), связанной с каждой строкой. Фра­за NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) указывает, сколько строк следует пропустить после представления последней строки группы. Первая фраза LINE NUMBER (НОМЕР СТРОКИ) сле­дующей группы определяет дополнительную информацию о про­пуске строк, которую нужно использовать при позиционировании этой группы.

  1. Горизонтальное позиционирование

Генератор отчетов позволяет пользователю позиционировать поля данных в строке отчета посредством фразы COLUMN NUM­BER (НОМЕР СТОЛБЦА). Система управления генератором от­четов обеспечивает заполнение пробелами промежутка между все­ми определяемыми полями.

  1. Манипулирование данными

При использовании средств генератора отчетов перемещением данных в группу отчета управляют фразы секции отчетов, а не операторы раздела процедур. Фразы секции отчетов, осуществля­ющие манипулирование данными, следующие: SOURCE (ИСТОЧ­НИК), SUM (СУММА) и VALUE (ЗНАЧЕНИЕ).

Фраза SOURCE (ИСТОЧНИК) определяет посылаемое дан­ное неявного оператора MOVE (ПОМЕСТИТЬ). Принимающее печатаемое данное определяется описанием данного группы отче­та, в котором появляется фраза SOURCE (ИСТОЧНИК).

Фраза SUM (СУММА) приводит к автоматическому учрежде­нию счетчика суммы. Объект фразы SUM (СУММА) называет данное (данные), которое прибавляется к счетчику суммы при вы­полнении оператора GENERATE (ГЕНЕРИРОВАТЬ). Пересылка содержимого счетчика суммы в принимающее печатаемое данное, определенное описание данного группы отчета, в которой имеется фраза SUM (СУММА), совершается автоматически при представ­лении этой группы отчета.

Фраза VALUE (ЗНАЧЕНИЕ) указывает литерал, который по­является в печатаемом данном группы отчета каждый раз при представлении группы отчета.Итак, данное в группе отчета представляется, если оно сопро­вождается фразой COLUMN NUMBER (НОМЕР СТОЛБЦА), ука­зывающей, где оно должно быть представлено. Значение, помещаемое в печатаемое данное, определяется фразами VALUE (ЗНАЧЕНИЕ), SOURCE (ИСТОЧНИК) или SUM (СУММА), на­ходящимися в описании группы отчета. Ни при каких обстоятель­ствах печатаемое данное группы отчета не может получить значе­ние непосредственно от оператора раздела процедур.

  1. Подразделения отчета

При определении того, что представляется на странице, учиты­ваются физическая и логическая организация отчета.

  1. Физическое подразделение отчета

Длина страницы, размер полей заголовка и концовки, размер поля, в котором будут располагаться строки фрагментов, опреде­ляется фразой PAGE (РАЗМЕР СТРАНИЦЫ). Система управле­ния генератором отчетов использует фразы LINE NUMBER (НО­МЕР СТРОКИ) и NEXT GROUP (СЛЕДУЮЩАЯ ГРУППА) для: размещения этих групп отчета, и, если необходимо, для перехода на новую страницу с автоматическим воспроизведением групп от­чета PAGE HEADING (ЗАГОЛОВОК СТРАНИЦЫ) и PAGE FOOTING (КОНЦОВКА СТРАНИЦЫ).

  1. Логическое подразделение отчета

Группы отчета типа фрагмент могут быть выстроены во вложен­ный набор управляемых групп. Каждая управляемая группа может начинаться группой отчета управляемый заголовок и за­канчиваться группой отчета управляемая концовка.

Если определены вложенные управляемые группы, распозна­вание изменения значения управляющего данного в иерархии уп­равления называется прерыванием управления, а строки заголов­ков и концовок, связанных с управляющим именем-данного, назы­ваются группами отчета управляемый заголовок и управляемая концовка.

Во время выполнения оператора GENERATE (ГЕНЕРИРО­ВАТЬ) система управления генератором отчетов использует иерар­хию управления для автоматической проверки прерывания уп­равления. Если имеет место прерывание управления, считается, что для всех младших управляющих данных в иерархии управле­ния также имеет место прерывание управления, даже если в дей­ствительности их значения не изменились. Распознавание преры­вания управления вызывает следующую последовательность дейст­вий:

  1. представляются все группы управляемой концовки от млад­шей до уровня, на котором произошло прерывание управления, включая его;

представляются все группы управляемого заголовка о

туровня, соответствующего прерыванию управления, до самого младшего;

  1. представляется группа фрагмента отчета, имя которого ука­зано в операторе GENERATE (ГЕНЕРИРОВАТЬ).

  1. Операторы раздела процедур генератора отчетов

Операторы раздела процедур генератора отчетов следующие: INITIATE (НАЧАТЬ), GENERATE (ГЕНЕРИРОВАТЬ), TERMI­NATE (ЗАКОНЧИТЬ), SUPPRESS (ПОДАВИТЬ) и USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ).

Оператор INITIATE (НАЧАТЬ) приводит к автоматическому выполнению ряда инициирующих действий системой управления генератором отчетов. Отчет должен быть инициирован прежде, чем можно будет выполнять для него детальную обработку.

Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя- данного приводит к форматизации и записи на устройство вывода указанной группы отчета типа DETAIL (ФРАГМЕНТ). Кроме то­го, система управления генератором отчетов настраивается на вы­полнение ряда неявных действий, описанных в п. 3.2 настоящей -части.

Оператор GENERATE (ГЕНЕРИРОВАТЬ) с операндом имя- отчета обеспечивает средства генерации итогов. В отчете, произ­водимом оператором данного типа, автоматически подавляется печать всех строк фрагментов и отчет состоит только из суммарных итогов, накопленных во время обработки групп отчета типа DETAIL (ФРАГМЕНТ). Действия, производимые системой уп­равления генератором отчетов по оператору GENERATE имя-от- чета (ГЕНЕРИРОВАТЬ имя-отчета), аналогичны действиям, про­изводимым по оператору GENERATE имя-данного (ГЕНЕРИРО­ВАТЬ имя-данного), за исключением того, что в первом случае по­давляется печать строк фрагмента.

Оператор TERMINATE (ЗАКОНЧИТЬ) вызывает выполнение системой управления генератором отчетов всех автоматических функций, связанных с завершением отчета. Оператор TERMINA­TE (ЗАКОНЧИТЬ) должен быть выполнен до закрытия файла, со­держащего отчет.

Оператор SUPPRESS (ПОДАВИТЬ) обеспечивает средства подавления печати целой группы отчета во время выполнения про­граммы.

Вариант BEFORE REPORTING (ДО ВЫДАЧИ) оператора USE (ИСПОЛЬЗОВАТЬ) обеспечивает механизм, при помощи которого в автоматических процедурах, выполняемых системой управления генератором отчетов, в отдельных случаях могут быть выполнены операторы раздела процедур. Операторы процедуры USE BEFORE REPORTING (ИСПОЛЬЗОВАТЬ ДО ВЫДАЧИ) могут изменять содержимое данных, имена которых указаны во 70фразах SOURCE (ИСТОЧНИК). Таким образом, имеется воз­можность управления содержимым данных, которые производят­ся автоматически в группах отчета.

  1. ОБРАБОТКА ТАБЛИЦ

Таблицы данных являются наиболее общим компонентом за­дач обработки данных. Хотя повторяющиеся данные, составляю­щие таблицу, могут быть описаны рядом статей описания данных,, имеющих один и тот же номер уровня и подчиненных одному и то­му же групповому данному, существуют две причины, почему та-- кой подход не может быть удовлетворительным. Во-первых, с точ­ки зрения документации однородность таких данных не очевидна и, во-вторых, доступ во время выполнения к отдельным элемен­там при таком подходе затрудняется.

Таблицы данных определяются в Коболе включением фразы OCCURS (ПОВТОРЯЕТСЯ) в статьи описания данных. Эта фра­за указывает, что данное должно быть повторено установленное число раз. Данное рассматривается как элемент таблицы, и его имя и описание применяются к каждому повторению или вхожде­нию. Так как каждое вхождение табличного элемента не имеет приписанного ему особого имени данного, ссылка на конкретное вхождение может быть сделана только указанием имени данного табличного элемента вместе с номером вхождения этого элемента. Номер вхождения называется индексом.

Число вхождений табличного элемента может быть фиксиро­ванным или переменным.

  1. Определение таблиц

Чтобы определить одномерную таблицу, программист исполь­зует фразу 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 ИМЯ ...

В обоих случаях полному набору вхождений данного TABLE­ELEMENT (ТАБЛИЧНЫЙ-ЭЛЕМЕНТ) присвоено имя 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) групповых данных, содержащих этот элемент.

  1. Начальные значения таблиц

Начальные значения элементов таблиц определяются в секции, рабочей памяти одним из следующих способов:

  1. таблица может быть описана как ряд отдельных статей описания данных, подчиненных одному и тому же групповому дан­ному, каждая из которых определяет значение элемента или час­ти элемента таблицы. При определении записи и ее элементов можно использовать любую фразу описания данного (фраза USAGE (об использовании), PICTURE (ШАБЛОН), и т. п.), если это необходимо для полноты определения. Иерархическая струк­тура таблицы затем показывается использованием статьи REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ) и связанных с ней подчи­ненных статей. Подчиненные статьи, следующие за статьей REDE­FINES (ПЕРЕОПРЕДЕЛЯЕТ) и повторяющиеся соответственно фразам OCCURS (ПОВТОРЯЕТСЯ), не могут содержать фразу VALUE (ЗНАЧЕНИЕ);

  2. величины всех размерностей таблицы могут быть иниции­рованы фразой VALUE (ЗНАЧЕНИЕ), относящейся к описанию статьи, определяющей таблицу в целом. Статьи самого низкого уровня покажут иерархическую структуру таблицы; статьи само­го низкого уровня не могут содержать фразы VALUE (ЗНАЧЕ­НИЕ);

  3. значения отдельных элементов таблицы могут быть опре.- делены использованием фразы VALUE (ЗНАЧЕНИЕ).

  1. Ссылки на табличные элементы

Всякий раз, когда пользователь ссылается на табличный' эле­мент или имя-условия, связанное с табличным элементом, за иск­лючением операторов USE FOR DEBUGGING (ИСПОЛЬЗОВАТЬ ДЛЯ ОТЛАДКИ) и SEARCH (ИСКАТЬ), ссылка должна указы­вать, какое именно вхождение предполагается. Для доступа к од­номерной таблице достаточно одного номера вхождения требуемо­го элемента. Для таблиц размерности больше единицы номер вхождения должен быть указан для каждой размерности таблицы. Таким образом, в примере 5 ссылка на четвертый DEPARTMENT (ЦЕХ) или четвертый FIO (ФИО) будет полной, в то время как ссылка на четвертый N-ROOM (N-КОМНАТЫ) полной не будет. Для ссылки на N-ROOM (N-КОМНАТЫ), который является эле­ментом двумерной таблицы, пользователь должен указать, напри­мер, четвертый элемент N-ROOM (N-КОМНАТЫ) в пятом элемен­те DEPARTMENT (ЦЕХ).