Модель формирования отчета определяет, в каком порядке выполняется генерация отчета с получением необходимых для него данных, позволяя понять, что происходит на каждом этапе этого процесса.
Crystal Report выполняет формирование отчёта в три этапа, которым могут предшествовать некоторые подготовительные действия.
Первым предварительным действием является вычисление всех формул, значения которых постоянны и не будут изменяться, то есть не зависят от содержимого записей. Только после этого начинается первый этап с чтением записей базы данных. На этом этапе выполняются следующие действия:
чтение записей с применением сортировки и фильтрации записей базы данных, если это возможно на данном шаге;
вычисление формул со ссылками на поля базы данных, не использующих итоговые значения;
выполнение фильтрации записей по установленному критерию; сортировка, группировка и подсчет итогов в каждой труппе;
генерация кросс-таблиц;
сохранение всех прочитанных и вычисленных данных в промежуточном файле, данные которого будут использоваться на следующих этапах без нового обращения к записям базы данных.
На предварительном шаге перед вторым этапом Crystal Report упорядочивает группы в соответствии с заданной иерархией. На этом шаге чтения записей не происходит, а осуществляется только просмотр групп, сформированных на первом этапе.
На втором этапе Crystal Report выполняет требуемое форматирование данных на страницах, осуществляя следующие действия:
выбор поля группировки по заданному фильтру;
вычисление полей нарастающих итогов;
вычисление значений формул, использующих итоги;
создание диаграмм и карт;
создание подчиненных отчетов;
генерация страниц отчета по требованию.
На третьем завершающем этапе отчета выполняется подсчет общего числа страниц отчета.
В процессе оформления страниц отчета выполняет следующее:
применяет формулы фильтрации к группам;
вычисляет нарастающие итоги;
вычисляет формулы, отнесенные к этапу WhileReadingRecords. Такие формулы, содержащие ссылки на промежуточные итоги или агрегатные функции, также называют формулами PrintTime. В момент генерации отчета, соответствующего WhileReadingRecords, выполняются следующие действия:
создание диаграмм и карт;
создание подчиненных отчетов;
генерация страниц по требованию.
Существуют следующие мастера создания отчетов
Standard –наиболее общий из мастеров, вкладки диалогового окна которого характерны и для других мастеров. Они позволяют выбрать источник данных, связать таблицы в базе данных, добавить требуемые поля и определить характеристики группирования, подведения итогов и сортировки на основе заданных пользователем критериев. Вкладка «Style» содержит варианты предопределенных структур отчетов, которые можно использовать при его построении, чтобы добиться его компактности.
Form Letter – отчет в виде простого списка, в котором необязательны итоги;
Form – отчет, у которого в качестве фона может использоваться графический рисунок;
Cross – Tab –это таблица с группировкой значений в двух направлениях: по горизонтальным строкам и вертикальным столбцам, на пересечении которых рассчитаны итоги по этим группам. Кроме того, таблица может включать общие итоги по строкам и столбцам.
Subreport – отчет, в который включены "дочерние" отчеты, причем записи в "дочернем" отчете могут быть связаны с данными основного отчета, а могут быть и не зависимыми от них;
Mail Label – эксперт "почтовых наклеек", который формирует отчет в виде последовательности бланков с данными (в одну или несколько колонок);
Следующие два вида шаблонов предназначены для создания отчетов, предназначенных для просмотра в электронном виде (хотя и для них имеется возможность печати):
Drill Down – «раскрывающийся отчет», который в исходном виде содержит только итоговые значения, но с помощью двойного щелчка на соответствующем значении итогов раскрывается секция данных (точно так же ее можно скрыть);
OLAP – (online analytical processing), средство создания многомерных отчетов для сложного анализа данных. При создании отчета на базе OLAP-данных в Seagate Crystal Reports создается таблица, похожая на Cross-Tab отчет, но имеющая большую размерность. Можно создать один многомерный OLAP-отчет, либо несколько плоских таблиц отображающих тот же самый OLAP-отчет.
Report Header содержит объекты, которые будут напечатаны в начале отчета (формулы, размещенные в этой области, вычисляются один раз в начале данного отчета; диаграммы и кросс-таблицы включают полные данные отчета);
Page Header содержит объекты, которые печатаются в начале каждой страницы отчета (область не может содержать диаграммы и кросс-таблицы; формулы, размещенные в этой области, вычисляются один раз в начале каждой новой страницы);
Group Header содержит объекты, которые печатаются в начале каждой новой группы (диаграммы и кросс-таблицы при этом включают данные только этой группы; формулы, размещенные в этой области, вычисляются один раз в начале каждой новой группы);
Details Area содержит объекты, которые выводятся на печать для каждой новой записи базы данных (область не может содержать диаграммы и кросс-таблицы; формулы, размещенные в этой области, вычисляются один раз для каждой записи);
Group Footer содержит объекты, которые печатаются в конце каждой группы (диаграммы и кросс-таблицы при этом включают данные только этой группы; формулы, размещенные в этой области, вычисляются один раз в конце каждой группы);
Report Footer содержит объекты, которые будут напечатаны в конце отчета (формулы, размещенные в этой области, вычисляются один раз в самом конце отчета; диаграммы и кросс-таблицы включают полные данные отчета);
Page Footer содержит объекты, которые печатаются в конце каждой страницы отчета (область не может содержать диаграммы и кросс-таблицы; формулы, размещенные в этой области, вычисляются один раз в конце каждой страницы).
Каждая область имеет одну или несколько направляющих, по которым выполняется выравнивание объектов. Однако для объектов, основанных на тексте, выравнивание происходит иначе, чем для OLE-объектов. Выравнивание текстовых объектов выполняется по базовой линии текста, а не по его рамке. Базовая линия отображается специальными маркерами красного цвета внутри рамки объекта и может быть расположена различным образом в зависимости от размера шрифта.