Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Подчиненный отчет в access

Иллюстрированный самоучитель по Microsoft Access 2002

Создание подчиненных отчетов

В результате в главном отчете будет создано поле Подчиненный отчет (Subreport). Вам потребуется только настроить высоту и ширину этого поля, удалить его метку, и вы получите отчет, аналогичный изображенному на рис. 10.11.


Рис. 10.11. Отчет «Квартальные обороты клиентов»

В качестве подчиненного отчета может быть использована и форма. Например, отчет, аналогичный только что описанному, можно получить с помощью уже имеющейся в базе данных «Борей» формы «Подчиненная для квартальных оборотов» (Quarterly Orders Subform).

  1. Скопируйте данную форму, задав ей новое имя «Подчиненная для квартальных оборотов 2».
  2. Откройте полученную копию в режиме Конструктора и замените источник данных на запрос «Квартальные обороты клиентов по товарам», созданный для предыдущего примера. Сохраните и закройте форму.

Замечание
Источник данных для формы доступен в режиме Конструктора в окне свойств формы как свойство Источник записей (Record Source) на вкладке Данные (Data)
.

  • Затем скопируйте созданный ранее отчет «Квартальные обороты клиентов», задав ему новое имя «Квартальные обороты клиентов 2», и откройте его в режиме Конструктора.
  • Удалите подчиненный отчет и вместо него просто перенесите с помощью мыши созданную форму из окна базы данных в область данных отчета. Автоматически будет создан элемент Подчиненная форма/отчет (Subform/Subreport) с именем «Подчиненная для квартальных оборотов».
  • Теперь настройте высоту и ширину созданного элемента и в свойствах подчиненной формы на вкладке Данные (Data) определите связующие поля. Для этого нажмите кнопку Построителя справа от свойства Подчиненные поля (Link Child Fields) и задайте в появившемся диалоговом окне две пары одноименных связанных полей: «КодКлиента» (CustomerlD) и «ГодЗаказа» (OrderDate), таким же образом, как это было описано в предыдущем примере. Указанные поля запишутся в качестве значений свойств Подчиненные поля (Link Child Fields) и Основные поля (Link Master Fields).
  • В результате вы получите отчет, аналогичный представленному на рис. 10.12.

    Для полноты картины добавим в главный отчет два вычисляемых поля, которые будут показывать, на какую сумму клиент купил товара за год. Оба поля представляют собой текстовые поля, у каждого из которых свойство Данные (Control Source) задано выражением. Первое поле формирует надпись с номером отчетного года. Для вычисления значения этого поля используется следующее выражение:

    (для английской версии используйте название поля OrderYear). Второе поле содержит сумму всех заказов клиента за год и вычисляется с помощью следующего выражения:

    (для английской версии используйте название поля Total), т. е. отображает поле «Итого» (Total) из подчиненной формы «Подчиненная для квартальных оборотов». Отформатируйте созданное поле для отображения в нем денежной суммы в том же виде, как отображаются денежные суммы в подчиненной форме, скопировав значения свойств Формат поля (Format) и Число десятичных знаков (Decimal Places).


    Рис. 10.12. Составной отчет, включающий подчиненную форму

    Создание подчиненных отчетов

    Подчиненные отчеты могут создаваться двумя способами:

    • с помощью Мастера подчиненной формы/отчета для создания нового подчиненного отчета в существующем отчете;
    • путем внедрения уже существующего отчета (или формы) в другой отчет (в этом случае внедряемый отчет становится подчиненным).

    Для того чтобы продемонстрировать, как создаются составные отчеты, мы построим отчет, показывающий квартальные обороты клиентов. Сначала нужно создать запрос, который будет базовым для главного отчета. Этот запрос будет иметь параметр [Отчетный год:] и выбираться будут все клиенты, которые имеют заказы в указанном году (рис. 10.5).

    Этот запрос очень просто создать на основе имеющегося в базе данных «Борей» подобного запроса «Квартальные обороты» (Quarterly Orders):

    1. Выделите названный запрос в окне базы данных и скопируйте его, используя команды копирования и вставки Правка, Копировать (Edit, Copy) и Правка, Вставить (Edit, Paste). Дайте ему название «Квартальные обороты клиентов».
    2. Откройте его в режиме Конструктора.
    3. Удалите последнее поле «ДатаРазмещения» (OrderDate) из таблицы полей внизу окна запроса и вместо него вставьте вычисляемое поле: ГодЗаказа: Year («[ДатаРазмещения]) (для английской версии используйте английское имя поля OrderDate, в качестве имени вычисляемого поля можете задать OrderYear), а в строку Условие отбора (Criteria) введите имя параметра запроса [Отчетный год: ]. Сохраните и закройте запрос.

    Рис. 10.5. Базовый запрос для отчета «Квартальные обороты клиентов»

    Теперь создадим отчет на основе только что созданного запроса. Для этого можно воспользоваться Мастером отчетов (Report Wizard) (см. гл. 6).

    Выберите для помещения в отчет поля «Название» (CompanyName), «Город» (City) и «Страна» (Country), отсортируйте записи по полю «Название», выберите тип отчета в столбец (Column) и один из предложенных стилей отчета. В результате вы получите отчет примерно такой, как изображен на рис. 10.6.

    Для того чтобы построить подчиненный отчет, содержащий квартальные обороты клиентов, воспользуемся уже готовым запросом «Квартальные обороты по товарам» (Quarterly Orders by Product), слегка его изменив. А именно, нужно удалить из запроса последнее поле «ДатаРазмещения» (OrderDate), для которого задано лишнее в нашем примере условие выборки. Тогда запрос будет выглядеть так, как это представлено на рис. 10.7. Сохраните его с именем «Квартальные обороты клиентов по товарам».

    Рис. 10.6. Главный отчет составного отчета

    Рис. 10.7. Базовый запрос для подчиненного отчета

    Чтобы создать подчиненный отчет, воспользуемся Мастером подчиненных отчетов. Для этого:

    1. Откройте отчет «Квартальные обороты клиентов» в режиме Конструктора.
    2. Выберите элемент управления Подчиненная форма/отчет (Subform/Subreport) на Панели элементов (Toolbox) и разместите его в разделе Область данных (Detail) ниже полей, содержащих данные о клиенте. (Кнопка Мастера (Control Wizards) должна быть нажата.)
    3. В первом диалоговом окне мастера выберите переключатель Имеющиеся таблицы и запросы (Use existing Tables and Queries) (рис. 10.8). Нажмите кнопку Далее (Next).
    Читать еще:  Носитель отсутствует powerpoint видео

    Рис. 10.8. Первое диалоговое окно Мастера подчиненных отчетов

    1. Во втором диалоговом окне мастера нужно определить, какие поля требуется включить в подчиненный отчет (рис. 10.9). При этом поля в общем случае можно выбирать из нескольких таблиц и запросов. В данном случае нужно в раскрывающемся списке Таблицы и запросы (Tables/Query) выбрать запрос «Квартальные обороты клиентов по товарам» (который был создан для этого примера), затем нажать кнопку с двумя стрелками, чтобы включить в подчиненный отчет все поля запроса, и нажать кнопку Далее (Next).

    Рис. 10.9. Второе диалоговое окно Мастера подчиненных отчетов

    1. В следующем диалоговом окне необходимо определить связь между главным и подчиненными отчетами, если эта связь существует, или выбрать из списка значение Отсутствует (None), если вы создаете независимый подчиненный отчет. В данном случае можно выбрать связь в отображенном списке, но нам предложенные варианты не подходят, поэтому выберите переключатель Самостоятельное определение (Define my own), чтобы задать эту связь самостоятельно.

    Замечание

    Так как поля в связываемых источниках данных имеют одинаковые типы и названия, Мастер подчиненных отчетов может автоматически связать отчеты по этим полям. Именно такие связи будут предложены в списке возможных вариантов связывания отчетов.

    1. В диалоговом окне появятся две пары раскрывающихся списков (рис. 10.10). В списках слева отображаются поля главного отчета, а в списках справа — связанные с ними поля подчиненного отчета. Связь может быть задана по одному или нескольким полям. В данном случае требуется задать связь по двум полям, чтобы связать источники данных главного и подчиненного отчетов одновременно и по коду клиента, и по отчетному году. Для этого выберите в раскрывающихся списках слева элементы: «КодКлиента» (CustomerlD) и «ГодЗаказа» (OrderYear), и соответствующие (с такими же именами) элементы в раскрывающихся списках напротив (справа), как представлено на рис. 10.10.

    Рис. 10.10. Третье диалоговое окно Мастера подчиненных отчетов

    Замечание

    То, что между главным и подчиненным отчетами установлена связь по полям «КодКлиента» и «ГодЗаказа», означает, что каждая запись в главном отчете будет связана с набором записей из подчиненного отчета, имеющих соответствующие значения в связанных полях. А поскольку значение года заказа в главном отчете определяется значением параметра запроса [Отчетный год:], то в связанном описанным способом подчиненном отчете будут отобраны только те записи, у которых значение поля «ГодЗаказа» совпадет со значением такого же поля в главном отчете, а значит, и с заданным пользователем значением параметра [Отчетный год: ].

    1. Определив связь между отчетами, нажмите кнопку Далее (Next).
    2. В последнем диалоговом окне требуется задать имя подчиненного отчета. Вы можете оставить предложенное мастером название «Подчиненный отчет Квартальные обороты клиентов по товарам» и нажать кнопку Готово (Finish).

    В результате в главном отчете будет создано поле Подчиненный отчет (Subreport). Вам потребуется только настроить высоту и ширину этого поля, удалить его метку, и вы получите отчет, аналогичный изображенному на рис. 10.11.

    Рис. 10.11. Отчет «Квартальные обороты клиентов»

    В качестве подчиненного отчета может быть использована и форма. Например, отчет, аналогичный только что описанному, можно получить с помощью уже имеющейся в базе данных «Борей» формы «Подчиненная для квартальных оборотов» (Quarterly Orders Subform).

    1. Скопируйте данную форму, задав ей новое имя «Подчиненная для квартальных оборотов 2».
    2. Откройте полученную копию в режиме Конструктора и замените источник данных на запрос «Квартальные обороты клиентов по товарам», созданный для предыдущего примера. Сохраните и закройте форму.

    Замечание

    Источник данных для формы доступен в режиме Конструктора в окне свойств формы как свойство Источник записей (Record Source) на вкладке Данные (Data).

    1. Затем скопируйте созданный ранее отчет «Квартальные обороты клиентов», задав ему новое имя «Квартальные обороты клиентов 2», и откройте его в режиме Конструктора.
    2. Удалите подчиненный отчет и вместо него просто перенесите с помощью мыши созданную форму из окна базы данных в область данных отчета. Автоматически будет создан элемент Подчиненная форма/отчет (Subform/Subreport) с именем «Подчиненная для квартальных оборотов».
    3. Теперь настройте высоту и ширину созданного элемента и в свойствах подчиненной формы на вкладке Данные (Data) определите связующие поля. Для этого нажмите кнопку Построителя справа от свойства Подчиненные поля (Link Child Fields) и задайте в появившемся диалоговом окне две пары одноименных связанных полей: «КодКлиента» (CustomerlD) и «ГодЗаказа» (OrderDate), таким же образом, как это было описано в предыдущем примере. Указанные поля запишутся в качестве значений свойств Подчиненные поля (Link Child Fields) и Основные поля (Link Master Fields).

    В результате вы получите отчет, аналогичный представленному на рис. 10.12.

    Для полноты картины добавим в главный отчет два вычисляемых поля, которые будут показывать, на какую сумму клиент купил товара за год. Оба поля представляют собой текстовые поля, у каждого из которых свойство Данные (Control Source) задано выражением. Первое поле формирует надпись с номером отчетного года. Для вычисления значения этого поля используется следующее выражение:

    =»Итоги за » & [Reports]![Квартальные обороты клиентов 2]![Подчиненная для квартальных оборотов].[Report]![ГодЗаказа]

    (для английской версии используйте название поля OrderYear). Второе поле содержит сумму всех заказов клиента за год и вычисляется с помощью следующего выражения:

    =[Подчиненная для квартальных оборотов].Form![Итого]

    (для английской версии используйте название поля Total), т. е. отображает поле «Итого» (Total) из подчиненной формы «Подчиненная для квартальных оборотов». Отформатируйте созданное поле для отображения в нем денежной суммы в том же виде, как отображаются денежные суммы в подчиненной форме, скопировав значения свойств Формат поля (Format) и Число десятичных знаков (Decimal Places).

    Читать еще:  Access страница доступа к данным

    Рис. 10.12. Составной отчет, включающий подчиненную форму

    Подчиненный отчет в access

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

    По аналогии с составными формами, включающими подчиненные формы, можно предположить, что составные отчеты используются также и для печати данных из таблиц, связанных отношением «один-ко-многим». Однако это не совсем так. В большинстве случаев для отображения данных из связанных таблиц не требуется внедрять подчиненные отчеты (пример такого отчета см. в разд. «Создание отчета с помощью Мастера отчетов»гл. 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), который отображается в верхнем левом углу, вычисляется с помощью выражения:

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

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

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

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

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

    =Sum([ПромежуточнаяСумма]) (или =Sum([Subtotal])).

    Группировка записей выполняется по году и по кварталу. Обратите внимание, что раздел Область данных (Detail) отчета пуст, т. е. в отчет выводятся только итоговые значения (рис. 10.4).

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

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

    Создание формы, содержащей подчиненную форму (форма с отношением «один-ко-многим»)

    Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

    Читать еще:  Access coarse location

    При работе с реляционными данными (т. е. связанными данными, которые хранятся в разных таблицах) нередко требуется просматривать несколько таблиц или запросов в одной форме. Например, может потребоваться одновременно просмотреть данные клиента из одной таблицы и сведения о его заказах из другой. Подчиненные формы — удобный инструмент для подобных задач, и в Access их можно быстро создать несколькими способами.

    В этой статье

    Сведения о подчиненных формах

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

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

    1. В основной форме отображаются данные на стороне отношения «один».

    2. В подчиненной форме выводятся данные на стороне отношения «многие».

    Основная и подчиненная формы взаимодействуют таким образом, что в подчиненной выводятся только те записи, которые связаны с текущей записью в основной. Например, если в основной форме отображаются данные Ольги Зуевой, то в подчиненной отображаются только ее заказы. Если связь между основной и подчиненной формами была разорвана, то в подчиненной форме будут отображаться заказы всех сотрудников, а не только Ольги.

    В таблице ниже описаны некоторые термины, связанные с подчиненными формами. Access будет обрабатывать большинство данных, если вы используете процедуры, описанные в этой статье, но полезно знать, что происходит в фоновом режиме, если вам необходимо внести изменения позже.

    Добавление подчиненной формы

    Форма может отображать информацию (поля) из нескольких таблиц или запросов. Но для этого необходимо, чтобы между этими объектами существовали отношения .

    В Access отношение представляет собой связь между полями с совпадающими именами двух таблиц, которая позволяет установить соответствие между записями этих таблиц. Так, например, можно связать отношением таблицы Типы и Товары, воспользовавшись установленной связью между полями КодТипа.

    Каждый тип включает несколько товаров, но каждый товар может относиться только к одному типу. Это пример наиболее распространенного типа отношений, называемого один-ко-многим (то есть, одной записи в таблице Типы соответствует несколько записей в таблице Товары ).

    При создании форм и запросов Access распознает отношения между базисными объектами, но не всегда правильно. Поэтому лучше установить отношения между объектами вручную, тем более что это не представляет проблемы.

    В этом упражнении вы установите отношение между таблицами Типы и Товары, а затем добавите к форме Типы подчиненную форму. Подчиненная форма предназначена для просмотра товаров, принадлежащих типу, отображающемуся в главной форме. В качестве рабочей будет использоваться папка Office XP SBSAccessChap11Subform. Выполните следующие шаги.

    1. Откройте базу данных GardenCo, расположенную в рабочей папке.
    2. На панели инструментов Access щелкните на кнопке Схема данных (Relationships), чтобы открыть диалоговое окно Схема данных (Relationships).
    3. Если диалоговое окно Добавление таблицы (Show Table) не отображается, щелкните на кнопке Отобразить таблицу (Show Table)на панели инструментов. В списке таблиц щелкните дважды на Типы и Товары. Закройте диалоговое окно Добавление таблицы (Show Table), чтобы перейти в окно Схема данных (Relationships), которое выглядит следующим образом.

    Другие типы отношений

    Помимо отношения один-ко-многим, существуют отношения один-к-одному и многие-ко-многим, но они встречаются реже.

    В отношении один-к-одному каждой записи в одной таблице соответствует только одна запись в другой таблице. Этот тип отношений применяется в том случае, если таблица содержит много полей. Для удобства ее можно разбить на две связанные таблицы, поместив редко используемые поля в отдельную таблицу.

    Отношение многие-ко-многим не реализовано в явном виде в Access и поэтому имитируется через третью таблицу и два отношения один-ко-многим. Например, в базе данных GardenCo имеются таблицы Товары, Заказы и Детали заказа. Таблица Товары содержит по одной записи для каждого товара. Запись таблицы Заказы описывает один заказ, не включая при этом перечня заказанных товаров. Эти данные хранятся в таблице Детали заказа. То есть, одной записи в таблице Заказы соответствует несколько записей в таблице Детали заказа. Очевидно, что между таблицами Заказы и Детали заказа существует отношение один-ко-многим. Но такое же отношение связывает таблицы Товары и Детали заказа. Таблица Детали заказа является связующей в отношении многие-ко-многим между таблицами Товары и Заказы. Проще говоря, один и тот же товар может содержаться в нескольких заказах, а каждый заказ может включать несколько товаров.

    На схеме данных появится линия, отображающая отношение один-ко-многим между полями КодТипа в обеих таблицах, как показано ниже.

    Ссылка на основную публикацию
    Adblock
    detector