Перекрестные отчеты
Перекрестные отчеты строятся на основе перекрестных запросов и содержат итоговые данные (см. также гл. 8).
В предыдущем разделе мы использовали один из таких перекрестных запросов для создания подчиненного отчета "Квартальные обороты клиентов по товарам". Аналогично создается и обычный отчет на базе перекрестного запроса. Пример такого отчета приведен на рис. 10.13. Он создан на базе того же самого запроса "Квартальные обороты клиентов по товарам", но отображает данные в другом разрезе: проданные товары группируются по наименованию, затем по клиентам. Разработать такой отчет не сложно:
- Создайте новый отчет в режиме Конструктора и выберите для него в качестве источника данных запрос "Квартальные обороты клиентов по товарам".
- Разместите надписи, содержащие заголовки столбцов отчета, в разделе Верхний колонтитул (Page Header), а все текстовые поля со значениями — в области данных. (Еще проще создать такой отчет с помощью автоотчета ленточный.)
- Определите в окне Сортировка и группировка (Sorting and Grouping) группировку по полям "Марка" (ProductName) и "КодКлиента" (CustomerlD). Для поля "Марка" отобразите заголовок группировки, выбрав значение Да (Yes) в раскрывающемся списке Заголовок группы (Group Header). Закройте окно.
- Перенесите текстовое поле "Марка" в отображенный заголовок группы.
Замечание
В данном запросе, когда он был создан для примера с подчиненным отчетом, не был задан параметр для выбора только относящихся к указанному отчетному году записей, т. к. записи выбирались на основании связанных данных из главного отчета. Поэтому, чтобы в создаваемом теперь отчете отображались только записи за указанный год, определите выражение с параметром для фильтрации данных в новом отчете: ГодЗака-за = [Отчетный год:] (для английской версии используйте английское имя поля OrderYear) (как задать фильтр, рассказано в разд. "Фильтрация данных в отчете" этой главы).
Отчет готов. Такой отчет называется статическим перекрестным отчетом, т. к. хотя его источник данных — перекрестный запрос, число столбцов в нем всегда одинаково, заголовки столбцов являются постоянными. Он создается так же, как и обычный отчет, на базе готового запроса.
Рис. 10.13. Статический перекрестный отчет
Более сложной задачей является создание динамического перекрестного отчета. Это такой отчет, у которого в качестве источника данных задан перекрестный запрос, и формирующийся этим запросом набор записей может иметь разное количество и разные заголовки столбцов, в зависимости от выполнения некоторых условий. Пример такого запроса приведен на рис. 10.14. Этот отчет показывает выработку сотрудников фирмы по месяцам года. Такой отчет может создаваться ежеквартально, и каждый раз число столбцов в нем будет увеличиваться, пока в конце года не станет равным 14 (12 месяцев плюс итоговый столбец и столбец с фамилиями сотрудников).
Еще одним примером динамического перекрестного отчета является отчет, в котором показывается, какие товары вы заказали поставщикам, но еще не получили. Такой отчет может представлять собой таблицу, в которой по вертикали отображаются товары, а по горизонтали — поставщики, которым эти товары заказаны. Его можно построить, если число поставщиков ограничено и не очень велико.
Рис. 10.14. Динамический перекрестный отчет
Для создания динамических отчетов не обойтись без программирования. В режиме Конструктора отчет о выработке сотрудников выглядит так, как это представлено на рис. 10.15, т. е. он содержит несвязанные с данными надписи и текстовые поля.
Привязка их к результатам запроса выполняется программным путем в процессе выполнения отчета. Позже мы покажем, как создать программы для такого отчета (см. разд. "Создание перекрестного отчета с изменяющимся числом столбцов"гл. 13).
Рис. 10.15. Динамический перекрестный отчет в режиме Конструктора