<< Click to Display Table of Contents >> Navigation: Проект > Документы объектов > Генератор отчетов > Примеры построения отчетов > Интерактивные отчеты > Создание оглавления и гиперссылок |
Предыдущие способы детализации отчетов работают только в окне просмотра отчетов. Если же отчет необходимо распечатать или сохранить в сторонний формат, то можно создать отчет с оглавлением и гиперссылками.
В качестве примера рассмотрим создание месячного отчета расхода газа с почасовыми записями. В данном отчете содержаться строки с данными о расходе газа в течении всего месяца, на каждую страницу выводится заголовок данных, а в конце отчета – общий итог данных (суммарный расход за месяц).
Сначала сделаем для данного отчета оглавление – сделаем чтобы оглавление указывало на начало каждого дня месяца в отчете.
Как правило оглавление должно располагаться в начале отчета. Однако в начале построения номера нужных страниц нам еще неизвестны. Неизвестно нам и в каком месте страницы начнутся показания новых суток. Для решения данных проблем в редакторе отчетов предусмотрены специальные средства.
Для создания оглавления, необходимо в нужном месте отчета создать специальный элемент - "якорь" (Ancor). Якорь – это специальная метка, на которую затем можно получить ссылку. Создание якоря происходит программно в коде события – при помощи метода:
AddAnchor("Имя_Якоря").
AddAnchor("Имя_Якоря").
После того, как якорь создан к нему можно обратится. Например, при помощи метода
GetAnchorPageNumber("Имя_Якоря")
можно получить номер страницы, на которой расположен якорь с данным именем. Если якорь с указанным именем не будет найден, то метод вернет 0. С помощью этих двух методов и организуется построение оглавление. Поскольку оглавление должно выводится в начале отчета, но только после того как сформирован весь отчет (и соответственно добавлены все якоря), то у текстового поля в которое выводится номер страницы якоря необходимо включить свойство Обработать в - В конце отчета.
Рассмотрим пошагово создание отчета с оглавлением.
Наш отчет содержит один источник данных – ПоказанияСчетчика.
Этот источник данных хранит действующие значения расхода газа, в колонке "Расход". Способ формирования отчета – периодический, с интервалом в 1 час. У колонки включен способ обработки Интеграл - таким образом производится вычисление расхода газа за час на основе действующих значений.
Через контекстное меню создадим новую страницу в отчете, и поместим ее слева.
Дадим страницам более информативные имена, страницу с оглавлением назовем "Contents", а страницу с отчетом – "ReportData". Имена страниц задаются через панель свойств.
Наш отчет выводит строки на страницу с шагом в 1 час. При построении основного отчета, мы будем создавать якоря с именами по числу месяца ("1", "2" и т.д). Таким образом на странице оглавления нам нужно создать количество строк по количеству дней в месяце. Кроме того, в каждую строку, кроме номера страницы, нужно выводить и информацию о заголовке. В качестве такой информации мы будем выводить полную дату (например – "5 ноября 2013").
Самый простой способ получить источник данных с количеством строк соответствующих количеству дней в месяце – это создать новый источник данных, включить у него периодический способ формирования и задать интервал – 1 сутки.
Создадим новый источник данных и назовем его "Вспомогательный". Свяжем параметры "Начало" и "Конец" с переменными из дерева объекта (аналогичными как для источника "ПоказанияСчетчика").
Зададим периодический способ формирования, с интервалом в сутки.
Добавим в источник данных рассчитываемую колонку, которую назовем "ЗаголовокДата".
Тип установим DateTime, в поле Значение введем формулу. Данная колонка будет возвращать прошедшую дату – то есть из колонки "Время" мы будем вычитать сутки. Для этого нужно использовать метод AddDays(-1). Текст выражения в итоге будет иметь вид:
Вспомогательный.Время.AddDays(-1)
Вытащим источник данных на страницу. Кроме бэнда данных, добавим на страницу и заголовок данных.
Создадим якоря. Перейдем на страницу отчета "ReportData", выделим бэнд данных и перейдем на вкладку событий.
Мы будем создавать якорь в событии Перед печатью. Условием создания якоря у нас будет создание строки данных за новое число. Можно определить создание строки с новым числом отслеживая значение часа (если 0 часов – наступил новый день). Но в нашем случае можно создавать якорь через каждые 24 строки данных. Таким образом код будет выглядеть следующим образом:
if ((Line-1)%24 == 0)
AddAnchor((Day(ПоказанияСчетчика.Время)).ToString());
Разберем строку где происходит добавление якоря.
В помощью функции Day(), мы получаем день месяца из колонки времени. После этого при помощи метода ToString(), мы производим преобразование числа в строку (имя якоря обязательно должно иметь строковый тип данных). Именно эта строка и передается в метод AddAnchor, и якорь с именем соответствующий дню месяца создается.
Теперь разместим на странице оглавления "Content" номер страницы на котором находится каждый якорь. Вызовем редактор текста ячейки для номера страницы и пропишем код:
{GetAnchorPageNumber((Day(Вспомогательный.ЗаголовокДата)).ToString())}
Часть кода
((Day(Вспомогательный.ЗаголовокДата)).ToString())
действует аналогично, как и в случае с добавлением якоря – из даты извлекается день, а затем преобразуется в строку. Полученная строка передается в метод GetAnchorPageNumber, который и возвращает номер страницы, на которой находится указанный якорь.
В свойствах ячейки, установим настройку Обработать в - В конце отчета. В этом случае ячейка будет заполнена в конце отчета – когда все якоря будут добавлены.
Запустим предварительный просмотр отчета. На первую страницу добавились имена заголовков (соответсвующих дате), и соответсвующие им номера страниц.
Теперь сделаем возможность перехода по гиперссылкам – сделаем чтобы при щелчке по полям в оглавлении, мы переходили на соответствующую страницу с данными.
Для создания гиперссылок необходимо у компонента, на который будет осуществляться переход создать закладку (например, "Закладка1"), а у компонента с которого будет осуществляться переход создать гиперссылку на эту закладку. Гиперссылка должна состоять из имени закладки, на которую ссылается с предварительным символом # (например, "#Закладка1").
Сначала создадим закладку. Для этого на странице "ReportData", выделим бэнд данных, и откроем окно настроек Взаимодействия. Затем на вкладке Общие в поле Закладка, пропишем код:
{Day(ПоказанияСчетчика.Время).ToString()}
Теперь настроим гиперссылку. Для этого на странице "Contents" пропишем, у ячейки с номером страницы, в окне настроек Взаимодействий – в поле Гиперссылка пропишем код:
#{(Day(Вспомогательный.ЗаголовокДата)).ToString()}
Аналогичный код в той же настройке пропишем и у поля с заголовком.
Также настроим для данных ячеек стиль текста, соответствующий гиперссылке – синий цвет, жирный шрифт с подчеркиванием.
Запустим предварительный просмотр.
В левой части окна появилась панель с закладками, с помощью которой можно осуществлять навигацию. При наведении мыши на текст, курсор изменяет свой вид, во всплывающей подсказке появляется имя гиперссылки. При нажатии мыши происходит переход на нужную страницу.
Примечание. Гиперссылки со страницы оглавления, работают и при экспорте в другие форматы (pdf, html, doc).
Примечание. Готовый отчет можно посмотреть в проекте "Интерактивные отчеты" в объекте "Отчет с оглавлением".