Основы работы с базами данных
2bbc099f

Разработка отчетов


Для разработки отчетов - печатных документов, отражающих информацию базы данных, в системе VFP существует Конструктор отчетов (Report Designer) и Мастер отчетов (Report Wizard). Важным свойством отчетов является возможность группировки данных и получения итоговых данных для групп и всего отчета. При формировании отчетов можно задавать фильтр отбора необходимых данных либо формировать отчет на основе данных SQL-запроса или представления данных (View).

Наиболее просто для разработки основы отчета воспользоваться Мастером отчетов с последующей модификацией и дополнением отчета в Конструкторе.

Существует 2 типа Мастера отчетов:

One-to-Many Report Wizard - Мастер отчета, в котором для одной записи главной таблицы существует множество записей связанной с ней дочерней таблицы.

Report Wizard - Мастер простого отчета, но с возможностью задания группировки данных.

Поставим задачу разработать отчет, в котором показаны экзаменационные оценки всех студентов за зимнюю сессию 2005-2006 учебного года (с 10.01.2006 по 06.02.2006) с группировкой данных по факультетам, курсам, группам и в группе - по фамилиям студентов.

Как обычно, создание нового объекта начинаем, нажав кнопку New на стандартной панели инструментов, затем выбираем Report - Wizard - One-to-Many Report Wizard.

Далее на первом шаге Мастера (рис. 6.1) выбираем базу Students и поля главной таблицы базы (Spisok), которые мы хотим показать в отчете.


Рис. 6.1.  Шаг 1 Мастера разработки отчета

На втором шаге (рис. 6.2) выбираем поля дочерней таблицы - Ocenki.


Рис. 6.2.  Шаг 2 Мастера разработки отчета

Третий шаг - подтверждаем, что эти таблицы связаны по значению поля NZ.

На четвертом шаге необходимо задать порядок сортировки данных в отчете. Мастер позволяет задать не более трех значений полей для сложной сортировки (с созданием соответствующего сложного индекса). Выберем поля N_fclt, Kurs, N_grup с сортировкой в порядке возрастания (Ascending).

Пятый шаг (рис. 6.3) - задаем стиль отчета, расположение его на листе (вертикальный лист - Portrait или горизонтальный - Landscape) и суммарные параметры - расчет среднего значения (Avg) для поля Ball.



Рис. 6.3.  Шаг 5 Мастера разработки отчета

На последнем, 6- м шаге задаем заголовок отчета, выбираем команду Сохранить отчет и модифицировать его в Конструкторе отчетов - Save report and modify it in Report Designer и после нажатия на кнопку Finish задаем имя (Spisok) и место сохранения файлов отчета (будут созданы два файла с одинаковым именем и расширениями *.frt и *.frx).

В окне Report Designer мы увидим отчет, показанный на рис. 6.4.


увеличить изображение
Рис. 6.4.  Окно Конструктора отчетов

В Конструкторе отчет разбит на отдельные зоны, информация которых может присутствовать в отчете один раз (Title и Summary), в начале каждой страницы (Page Header) или в конце каждой страницы (Page Footer), в начале каждой группы (Group Header, групп может быть много) и в конце каждой группы (Group Footer), а также зона показа информации каждой записи таблицы (Detail).

Особенность отчета, созданного Мастером, - в нем присутствуют зоны итогов для группы NZ и всего отчета, но поля для расчета средней оценки в них нет, хотя мы просили Мастера это сделать (см. рис. 6.3.). Заданное условие не было выполнено, т.к. поле ball имеет текстовый тип, а мы задали функцию для работы с числами. Для вычисления средней оценки придется самим добавить новое поле в отчет с расчетом средней оценки после преобразования в этом поле текстового значения в числовое с использованием функции Val(ball).

Контекстное меню для Конструктора отчетов (щелчок правой кнопкой мыши на пустом месте окна Report Designer ) содержит следующие пункты (рис. 6.5.):


Рис. 6.5.  Контекстное меню

  • Paste - вставить;
  • Run Report: - напечатать отчет на принтере;
  • Print Preview - предварительный просмотр отчета на экране и печать на принтере;
  • Data Environment: - окно данных, связанных с отчетом;
  • Optional Bands: - страница свойств зон Title, Summary и Detail в окне свойств отчета;
  • Data Grouping: - страница группировки данных в окне свойств отчета;
  • Variables: - страница переменных в окне свойств отчета;
  • Properties: - окно свойств отчета.




Для использования в отчете названий факультетов, специальностей и предметов необходимо открыть окно Data Environment, добавить в него справочные таблицы базы и правильно установить связи между ними, как показано на рис. 6.6. (для постоянных связей базы иногда возникает неправильное направление, связь должна идти от поля главной таблицы к индексу дочерней).


Рис. 6.6.  Окно данных отчета

Для связи между таблицами Spisok и Ocenki должно быть установлено свойство OneToMany = .T.

Для таблицы Spisok в окне Properties для Data Environment зададим фильтр VAL(Ocenki.ball)>1 AND VAL(Ocenki.ball)<6 AND Ocenki.data_b=>{^2006/01/10} AND Ocenki.data_b<={^2006/02/06} - условие отбора студентов, у которых есть оценки (от 2 до 5, среди баллов могут быть отметки о неявке (Н), незачете (1), зачете (6) и пр.) в заданном периоде (в фильтре используется формат даты в виде {^ГГГГ/ММ/ДД}). Установленный фильтр имеет особенность: фильтр задан для таблицы Spisok, а его логическое выражение построено из значений полей таблицы Ocenki, что не совсем обычно, но допустимо при наличии связи между этими таблицами. Если данное выражение написать как фильтр для таблицы Ocenki, в отчет могут попасть студенты, у которых нет оценок за заданный период, и средняя оценка будет рассчитана неправильно.

Для дальнейшего оформления отчета необходимо присутствие на экране двух панелей инструментов - Report Controls и Layout.

Первая панель содержит те объекты, которые можно располагать на отчетах (рис. 6.7.).


Рис. 6.7.  Панель объектов отчета

Так как наша задача - представить отчет с группировкой и расчетом средних оценок по факультетам, курсам, группам, необходимо добавить новые группы в отчет и модифицировать, соответственно, индексный файл главной таблицы. Выбрав пункт Data Grouping в контекстном или главном меню (раздел Report), добавим необходимые группы (рис. 6.8.).


Рис. 6.8.  Страница группировки данных в окне свойств отчета

Далее перенесем номера факультетов, курсов и групп в зоны заголовков соответствующих групп, добавим поля с названиями из справочников факультетов, специальностей и предметов, добавим итоговые поля для расчета средних оценок (val(ocenki.ball)).


Новые поля можно создать с использованием соответствующей кнопки на панели Report Controls (рис. 6.7.) или копированием имеющихся в отчете полей (для сохранения заданного шрифта) с изменением данных, которые показывает поле (свойство Expression поля).

В свойствах итоговых полей (окно свойств выбранного поля открывается двойным кликом на нем, или выбором пункта Properties в его контекстном меню, или на клавиатуре Alt+Enter) в разделе Calculate следует правильно указать в пункте Calculation Type - Average (среднее) и в пункте Reset based on - соответствующую группу или End of Report для зоны Summary (см. рис. 6.9.).




Рис. 6.9.  Окно свойств поля отчета. Страницы General и Calculate

Для таблицы Spisok следует модифицировать созданный Мастером сложный индекс с именем WIZARD_1 - добавить в него поле FIO: STR(n_fclt,2,0) + STR(kurs,1,0) + n_grup + fio.

Отчет в Конструкторе будет иметь вид, показанный на см. рис. 6.10..


увеличить изображение
Рис. 6.10.  Окончательный вид отчета в Конструкторе

При предварительном просмотре (Preview) или после печати на принтере мы получим отчет, показанный на рис. 6.1. (примечание: перед формированием отчета откройте таблицу Ocenki, иначе заданный фильтр для таблицы Spisok вызовет сообщение об отсутствии алиаса Ocenki).


увеличить изображение
Рис. 6.11.  Фрагмент отчета, напечатанного на принтере


Содержание раздела