Создание
подчиненных отчетов
Подчиненные
отчеты могут создаваться двумя способами:
Для того чтобы
продемонстрировать, как создаются составные отчеты, мы построим отчет, показывающий
квартальные обороты клиентов. Сначала нужно создать запрос, который будет базовым
для главного отчета. Этот запрос будет иметь параметр [Отчетный год:] и выбираться
будут все клиенты, которые имеют заказы в указанном году (рис. 10.5).
Этот запрос
очень просто создать на основе имеющегося в базе данных "Борей" подобного
запроса "Квартальные обороты" (Quarterly Orders):
Рис. 10.5.
Базовый запрос для отчета "Квартальные обороты клиентов"
Теперь создадим
отчет на основе только что созданного запроса. Для этого можно воспользоваться
Мастером отчетов (Report Wizard)
(см. гл. 6).
Выберите для
помещения в отчет поля "Название" (CompanyName), "Город"
(City) и "Страна" (Country), отсортируйте записи по полю "Название",
выберите тип отчета
в столбец
(Column) и один из предложенных стилей
отчета. В результате вы получите отчет примерно такой, как изображен на рис.
10.6.
Для того чтобы
построить подчиненный отчет, содержащий квартальные обороты клиентов, воспользуемся
уже готовым запросом "Квартальные обороты по товарам" (Quarterly Orders
by Product), слегка его изменив. А именно, нужно удалить из запроса последнее
поле "ДатаРазмещения" (OrderDate), для которого задано лишнее в нашем
примере условие выборки. Тогда запрос будет выглядеть так, как это представлено
на рис. 10.7. Сохраните его с именем "Квартальные обороты клиентов по товарам".
Рис. 10.6.
Главный отчет составного отчета
Рис. 10.7.
Базовый запрос для подчиненного отчета
Чтобы создать
подчиненный отчет, воспользуемся Мастером подчиненных отчетов. Для этого:
Рис. 10.8.
Первое диалоговое окно Мастера подчиненных отчетов
Рис. 10.9.
Второе диалоговое окно Мастера подчиненных отчетов
Замечание
Так как поля в связываемых источниках данных имеют одинаковые типы и названия, Мастер подчиненных отчетов может автоматически связать отчеты по этим полям. Именно такие связи будут предложены в списке возможных вариантов связывания отчетов.
Рис. 10.10.
Третье диалоговое окно Мастера подчиненных отчетов
Замечание
То, что между главным и подчиненным отчетами установлена связь по полям "КодКлиента" и "ГодЗаказа", означает, что каждая запись в главном отчете будет связана с набором записей из подчиненного отчета, имеющих соответствующие значения в связанных полях. А поскольку значение года заказа в главном отчете определяется значением параметра запроса [Отчетный год:], то в связанном описанным способом подчиненном отчете будут отобраны только те записи, у которых значение поля "ГодЗаказа" совпадет со значением такого же поля в главном отчете, а значит, и с заданным пользователем значением параметра [Отчетный год: ].
В результате
в главном отчете будет создано поле
Подчиненный отчет
(Subreport). Вам
потребуется только настроить высоту и ширину этого поля, удалить его метку,
и вы получите отчет, аналогичный изображенному на рис. 10.11.
Рис. 10.11.
Отчет "Квартальные обороты клиентов"
В качестве
подчиненного отчета может быть использована и форма. Например, отчет, аналогичный
только что описанному, можно получить с помощью уже имеющейся в базе данных
"Борей" формы "Подчиненная для квартальных оборотов" (Quarterly
Orders Subform).
Для этого:
Замечание
Источник данных для формы доступен в режиме Конструктора в окне свойств формы как свойство Источник записей (Record Source) на вкладке Данные (Data).
В результате
вы получите отчет, аналогичный представленному на рис. 10.12.
Для полноты
картины добавим в главный отчет два вычисляемых поля, которые будут показывать,
на какую сумму клиент купил товара за год. Оба поля представляют собой текстовые
поля, у каждого из которых свойство
Данные
(Control Source) задано выражением.
Первое поле формирует надпись с номером отчетного года. Для вычисления значения
этого поля используется следующее выражение:
="Итоги
за " & [Reports]![Квартальные обороты клиентов 2]![Подчиненная для
квартальных оборотов].[Report]![ГодЗаказа]
(для английской
версии используйте название поля OrderYear). Второе поле содержит сумму всех
заказов клиента за год и вычисляется с помощью следующего выражения:
=[Подчиненная
для квартальных оборотов].Form![Итого]
(для английской
версии используйте название поля Total), т. е. отображает поле "Итого"
(Total) из подчиненной формы "Подчиненная для квартальных оборотов".
Отформатируйте созданное поле для отображения в нем денежной суммы в том же
виде, как отображаются денежные суммы в подчиненной форме, скопировав значения
свойств
Формат поля
(Format) и
Число десятичных знаков
(Decimal
Places).
Рис. 10.12. Составной отчет, включающий подчиненную форму