Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Отчеты к базам данных для пользователей: Crystal Reports 11.5
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

11. Применение подотчетов

Подотчеты (subreports) в отчетах Crystal Reports 11.5, несвязанные подотчеты для модульности разработки, связанные подотчеты для отображения данных из различных источников, подотчеты по запросу (on-demand subreports)

Еще одна очень важная функциональная возможность Crystal Reports — возможность встроить один отчет в другой, то есть воспользоваться подотчетами (subreports).

В Crystal Reports предусмотрены подотчеты двух типов, при этом каждый из этих типов предусмотрен для совсем разных задач.

Первый тип подотчета — несвязанные подотчеты (unlinked subreports). Они не используются для связи информации между разными источниками данных. Их основная роль — являться контейнерами для отображения какой-нибудь информации в главном отчете (текстовых полей, изображений и т.п.). Поскольку в несколько внешних отчетов можно поместить один подотчет, сохраненный в отдельном внешнем файле, то можно добиться того, что при внесении изменений в этот подотчет одновременно изменяются все внешние отчеты. Таким образом, можно централизованно изменять информацию о названии предприятия, контактную информацию, логотип фирмы и т.п.

Конечно же, такое решение не является рекомендованным. Для хранения такой общей информации, совместно используемой разными отчетами, разработчики Crystal Reports рекомендуют использовать возможности репозитария. Однако далеко не на всех предприятиях есть возможность развернуть систему Crystal Enterprise, необходимую для поддержки репозитария, поэтому решение с несвязанными подотчетами на практике используется очень активно.

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

Сразу отметим некоторые важные моменты, которые связаны со связанными подотчетами:

  • Crystal Reports позволяет добавить в окне Database Expert информацию из разных источников данных. Теоретически это может позволить объединить в одном отчете информацию из разных источников и без подотчетов. Однако проблемы возникнут уже на уровне связывания данных: скорее всего, информацию из разных источников напрямую связать вам не удастся. Поэтому в подавляющем большинстве ситуаций применение подотчетов для связывания информации из разных источников является обязательным;
  • еще одна возможность попытаться избежать применения связанных подотчетов — воспользоваться связыванием информации на уровне источника данных. Например, в SQL Server для этой цели можно использовать объекты связанных серверов (linked servers), в Microsoft Access — связанные таблицы и т.п. Затем эти возможности можно использовать из отчета, применив SQL Command с требуемым кодом SQL в качестве источника данных для отчета. Однако такое решение возможно только в том случае, если у пользователя есть соответствующие разрешения в базе данных (например, на создание объектов связанных серверов), и разработчики баз данных разрешают создание таких объектов;
  • как правило, использование связанных подотчетов приводит к резкому падению производительности, в особенности для больших отчетов. Связано это с "механикой" работы подотчетов: для каждой записи из внешнего отчета Crystal Reports выполняет отдельный запрос в источнику данных подотчета с соответствующими значениями параметров (и фактически каждый раз формирует подотчет заново). В некоторых ситуациях падение производительности может быть настолько значительным, что, возможно, имеет смысл подумать о том, чтобы вначале организовать хранилище данных (data warehouse), в которое помещается информация из разных источников данных, а затем обращаться к информации в этом хранилище данных уже без применения подотчетов;
  • иногда перед разработчиками отчетов встает выбор: а какой из отчетов делать внешним, а какой будет подотчетом?. Критерий выбора очень прост: внешним отчетом должен быть тот, в котором значений, через которые происходят связи с подотчетом, больше. Связано это с описанной выше механикой работы отчета: если внешний отчет не передаст в качестве значения параметра какое-то значение поля (например, название страны), данных по этой стране из подотчета мы не увидим. Здесь возникает вопрос: что делать, если в обоих отчетах есть свои уникальные значения и мы в любом случае какую-то часть не увидим? Средствами Crystal Reports решить эту проблему нельзя. Придется вносить изменения на уровне источника данных, например, создавая запрос, который возвращает полный набор значений и используя этот запрос в качестве источника данных для внешнего отчета.

Добавление подотчетов в отчет Crystal Reports производится при помощи меню Insert (Вставка) | Subreport (Подотчет). Откроется окно Insert Subreport, в котором можно будет выбрать, использовать ли подотчет из внешнего файла, сохраненного на диске (Choose an existing report) или создать новый подотчет с нуля при помощи мастера (Create a subreport with the report Wizard). Во втором случае подотчет будет полностью интегрирован во внешний отчет — отдельного файла для него не потребуется.

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

Флажок On-demand subreport (Подотчет по запросу) позволяет настроить изначальный режим отображения подотчета. Если этот флажок установлен, вместо подотчета будет выводиться его значок. Сам подотчет будет показан только в случае, если пользователь щелкнет на этом значке мышью. Такое решение позволит повысить производительность, но пользователей оно устраивает редко.

На следующей вкладке, которая называется Link (Связь), можно настроить параметры связывания внешнего отчета и подотчета. Если на этой вкладке оставить все по умолчанию (не выбрано ни одно поле для связи), то получится несвязанный (unlinked) подотчет, который, как уже говорилось, обычно используется для использования в нескольких отчетах одних и тех же текстовых полей, изображений и т.п. Если же выбрать поле внешнего отчета, то вам будет предложено настроить параметры его связывания с подотчетом (см. рис. 11.1).

Рис. 11.1 Окно настройки связей отчета и подотчета

В поле Subreport parameter field to use можно согласиться с именем параметра, который будет использован для передачи информации в подотчет (оно генерируется автоматически) или выбрать ранее созданный параметр. При помощи флажка  и списке Select data in subreport based on field можно автоматически создать фильтрацию данных в подотчете, которая будет производиться по выбранному в списке полю подотчета. Для целей фильтрации будет использоваться параметр, значения для которого для каждой записи внешнего отчета будут передаваться из поля, выбранного в верхней части экрана.

После того, как все настройки в окнах мастера будут произведены, подотчет можно будет разместить во внешнем отчете. Скорее всего, вам потребуется доработать созданный подотчет в дизайнере. Для этого необходимо щелкнуть по подотчету и в контекстном меню выбрать команду Edit Subreport (Редактировать подотчет). Подотчет будет открыт в режиме дизайнера в отдельной вкладке. С этой же отдельной вкладки можно будет производить его тестирование при помощи кнопки F5 (значение параметра при этом придется вводить вручную).

Если вам необходимо поменять настройки связей между отчетом и подотчетом, в вашем распоряжении — команда Change Subreports Links в контекстном меню для объекта подотчета.

В остальном подотчет ведет себя как обычный объект Crystal Reports. Для него так же можно настраивать рамки (их часто приходится снимать), условное форматирование и т.п.

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 

 
© 2004-2016, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru