Настольная СУБД Access 2002

         

Применение подчиненных отчетов


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

отношением "один-ко-многим". Однако это не совсем так. В большинстве случаев для отображения данных из связанных таблиц не требуется внедрять подчиненные отчеты (пример такого отчета см. в разд. "Создание отчета с помощью Мастера отчетов"гл. 6).

Например, если нужно создать отчет по товарам с разбивкой по категориям товаров, это можно сделать двумя способами:

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

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

Примеры использования подчиненных отчетов можно найти в списке отчетов учебной базы данных "Борей" (Northwind). На рис. 10.1 представлен отчет "Продажи по типам" (Sales by Category), который содержит один подчиненный отчет и внедренную диаграмму.

Рис. 10.1. Отчет, содержащий подчиненный отчет

Откройте отчет "Продажи по типам" (Sales by Category) в режиме Конструктора. Вы увидите, что подчиненный отчет размещен в разделе заголовка группы "Категория" (CategoryName) (рис. 10.2). Оба отчета, и главный и подчиненный, базируются на одном и том же запросе "Продажи по типам" (Sales by Category), но в главном отчете выводятся данные о категориях — имя категории, а в подчиненном — о товарах, входящих в эту категорию (наименование товара и его цена).

Выделите элемент управления Подчиненная форма/отчет (Subform/siibreport) и посмотрите свойства этого элемента. Вы увидите, что главный и подчиненный отчеты связываются по полю "Категория" (CategoryName). Поскольку и в формах, и в отчетах используется один и тот же элемент управления Подчиненная форма/отчет, свойства для связанных полей те же, что и в форме (см. гл. 9).

Обратите внимание, что в макете подчиненного отчета нет элемента управления, связанного с полем "Категория", однако, как и при связывании форм, в качестве полей для связи можно использовать поля базового запроса.

Рис. 10.2. Отчет "Продажи по типам" в режиме Конструктора

Отчет "Продажи по годам" (Sales by Year) является примером отчета, в котором подчиненный отчет используется для вывода итоговых данных о продажах по кварталам года (рис. 10.3).

Рис. 10.3. Использование подчиненного отчета для вывода итогов

Оба отчета, основной и подчиненный, базируются на запросе "Продажи по годам" (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) отчета пуст, т. е. в отчет выводятся только итоговые значения (рис. 10.4).

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

Рис. 10.4. Отчет "Подчиненный для продаж по годам" в режиме Конструктора

 

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