Подготовка составных отчетов

Одной из важнейших функций, которые обычно предоставляют настольные СУБД, является возможность создания различных отчетов — документов, содержащих дан—ные из таблиц базы данных. Отличительной особенностью Microsoft Access является наличие очень мощного генератора отчетов, который позволяет создавать отчеты высокого качества. Наличие мастеров, генерирующих автоматически или при помощи диалога с пользователем самые разнообразные отчеты, значительно облегчает трудоемкий процесс их создания. В мы уже рассматривали основные вопросы, касающиеся создания отчетов в Access. В этой главе мы поговорим о них более подробно, ориентируясь на профессиональное использование средств Access 2010. В частности, покажем, как с помощью Мастера отчетов или в режиме Конструктора создавать достаточно сложные по структуре отчеты, включающие подчиненные отчеты или имеющие несколько уровней группировки записей. А также обсудим здесь многие другие вопросы о работе с отчетами, не вошедшие . Мы не будем затрагивать здесь тему программирования на VBA или использования макросов при создании отчетов, оставив ее для рассмотрения в последующих главах, и покажем, как много можно сделать, -применяя только интерактивные средства, предоставляемые Access. В качестве примеров будут использованы уже готовые отчеты, которые содержатся в учебной базе данных "Борей" (Northwind), или отчеты, созданные на основе таблиц этой базы данных.
Microsoft Access 2000 и 2002 имеют существенные отличия и преимущества по сравнению с другими наиболее известными СУБД: это главная черта продуктов Microsoft — удобство использования и одновременно мощность продукта — в сочетании с возможностью построения комплексных решений на базе современных технологий, а именно: интеграция баз данных с SQL Server, с другими приложениями Office и публикация интерактивных данных в Web. В Access 2010 средства публикации в Web значительно расширились. Это касается и отчетов: теперь они могут быть преобразованы в формат XML и в интерактивные страницы доступа к данным. В настоящей главе рассмотрены следующие вопросы:

  • Создание отчетов, включающих подчиненные отчеты
  • Создание отчетов на базе перекрестных запросов
  • Печать отчета в несколько колонок — в стиле газетных полос
  • Способы сортировки и группировки записей в отчете
  • Вычисления в отчетах
  • Фильтрация данных в отчете

 

Создание составных отчетов
Под составными отчетами в данном случае понимаются отчеты, имеющие сложную структуру: включающие подчиненные отчеты, построенные на базе перекрестных запросов, выводимые на печать в виде нескольких колонок, как это делается, например, в газетах. Ниже будут описаны такие отчеты, их назначение и способы создания.
Применение подчиненных отчетов
По аналогии с составными формами, включающими подчиненные формы, можно предположить, что составные отчеты используются также и для печати данных из таблиц, связанных отношением "один-ко-многим". Однако это не совсем так. В большинстве случаев для отображения данных из связанных таблиц не требуется внедрять подчиненные отчеты.
Например, если нужно создать отчет по товарам с разбивкой по категориям товаров, это можно сделать двумя способами:

  • в основном отчете выводятся данные о категории товаров, а в подчиненном — о товарах, входящих в категории. И это будет аналогично созданию формы "Категории товаров", в которую включается подчиненная форма, отображающая данные из таблицы товаров;
  • то же самое может быть выполнено без использования подчиненного отчета с помощью группировки товаров по категориям. Отчет в этом случае должен строиться на базе запроса, включающего данные из таблиц "Категории" и "Товары".

Тем не менее бывают ситуации, когда использование подчиненного отчета необходимо или предпочтительно. Например:

  • Главный отчет представляет собой контейнер, в который включаются один или более подчиненных отчетов из несвязанных таблиц. В этом случае главный отчет может вообще не быть связанным с таблицей или запросом и содержать только надписи и вычисляемые элементы.
  • Иногда итоговые данные требуется представить в документе в виде отдельной таблицы наряду с детальными данными. В этом случае просто группировкой записей с итоговыми строками не обойтись, нужно ввести подчиненный отчет, который выведет итоговые данные в требуемом виде.
  • Группировка в отчетах Access является очень мощным механизмом, который позволяет получить самые разные способы обработки данных отчета. Однако только при использовании подчиненных отчетов можно создать группы, которые содержат две и более подгруппы данных.
  • Главный отчет может содержать, во-первых, несколько подчиненных отчетов и, во-вторых, два уровня вложенности подчиненных отчетов. И, кроме того, на любом уровне вложенности наряду с подчиненным отчетом можно вставить в главный отчет подчиненную форму.

Основное достоинство подчиненных отчетов состоит в том, что с их помощью можно разместить на странице отчета самую разнообразную информацию в удобном структурированном виде, чего невозможно добиться, если просто создать сложный запрос, включив в него данные из многих таблиц.
Примеры использования подчиненных отчетов можно найти в списке отчетов учебной базы данных "Борей" (Northwind). На представлен отчет "Продажи по типам" (Sales by Category), который содержит один подчиненный отчет и внедренную диаграмму.
Откройте отчет "Продажи по типам" (Sales by Category) в режиме Конструктора. Вы увидите, что подчиненный отчет размещен в разделе заголовка группы "Категория" (CategoryName). Оба отчета, и главный и подчиненный, базируются на одном и том же запросе "Продажи по типам" (Sales by Category), но в главном отчете выводятся данные о категориях — имя категории, а в подчиненном — о товарах, входящих в эту категорию (наименование товара и его цена).
Выделите элемент управления Подчиненная форма/отчет (Subform/siibreport) и посмотрите свойства этого элемента. Вы увидите, что главный и подчиненный отчеты связываются по полю "Категория" (CategoryName). Поскольку и в формах, и в отчетах используется один и тот же элемент управления Подчиненная форма/отчет, свойства для связанных полей те же, что и в форме .
Обратите внимание, что в макете подчиненного отчета нет элемента управления, связанного с полем "Категория", однако, как и при связывании форм, в качестве полей для связи можно использовать поля базового запроса.
Отчет "Продажи по годам" (Sales by Year) является примером отчета, в котором подчиненный отчет используется для вывода итоговых данных о продажах по кварталам года.
Оба отчета, основной и подчиненный, базируются на запросе "Продажи по годам" (Sales by Year), который позволяет выбрать все заказы за указанный период времени (проверяется поле "ДатаИсполнения" (ShippedDate). Запрос включает вычисляемое поле "Год" (Year), которое рассчитывается на основе даты заказа и используется при группировке в отчете, и поле, содержащее итоговую сумму каждого заказа "ПромежуточнаяСумма" (Subtotal).
Подчиненный отчет "Подчиненный для продаж по годам" (Sales by Year Subreport) содержит несколько вычисляемых элементов:

  • ГодНадпись" (YearLabel), который отображается в верхнем левом углу, вычисляется с помощью выражения:

= "Итог за " & [Год] & " г." (или=[Year] & " Summary");

  • "Квартал" (Quarter), который в качестве источника данных содержит выражение:

=Format([ДатаИсполнения];"q") (ИЛИ =Format([ShippedDate];"q"));

  • "ПодсчетПромежуточнойСуммы" (CountSubtotal) — количество исполненных заказов, которое вычисляется с помощью статистической функции Count:

=Count([КодЗаказа]) (или =Count([OrderlD]));

  • "КвПромежуточнаяСумма" (QtrSubtotal) — итоговая сумма за квартал, которая вычисляется с помощью выражения:

=Sum([ПромежуточнаяСумма]) (или =Sum([Subtotal])).
Группировка записей выполняется по году и по кварталу. Обратите внимание, что раздел Область данных (Detail) отчета пуст, т. е. в отчет выводятся только итоговые значения.

Детальные данные, т. е. все записи из базового запроса, включены в главный отчет.