Создание оглавления и гиперссылок

<< Click to Display Table of Contents >>

Navigation:  Проект > Документы объектов > Генератор отчетов > Примеры построения отчетов > Интерактивные отчеты >

Создание оглавления и гиперссылок

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

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

ReportManualPart5_img32

ReportManualPart5_img33

Сначала сделаем для данного отчета оглавление – сделаем чтобы оглавление указывало на начало каждого дня месяца в отчете.

Как правило оглавление должно располагаться в начале отчета. Однако в начале построения номера нужных страниц нам еще неизвестны. Неизвестно нам и в каком месте страницы начнутся показания новых суток. Для решения данных проблем в редакторе отчетов предусмотрены специальные средства.

Для создания оглавления, необходимо в нужном месте отчета создать специальный элемент - "якорь" (Ancor). Якорь – это специальная метка, на которую затем можно получить ссылку. Создание якоря происходит программно в коде события – при помощи метода:

AddAnchor("Имя_Якоря").

AddAnchor("Имя_Якоря").

После того, как якорь создан к нему можно обратится. Например, при помощи метода

GetAnchorPageNumber("Имя_Якоря")

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

Рассмотрим пошагово создание отчета с оглавлением.

Наш отчет содержит один источник данныхПоказанияСчетчика.

ReportManualPart5_img34

Этот источник данных хранит действующие значения расхода газа, в колонке "Расход". Способ формирования отчетапериодический, с интервалом в 1 час. У колонки включен способ обработки Интеграл - таким образом производится вычисление расхода газа за час на основе действующих значений. ReportManualPart5_img35

Через контекстное меню создадим новую страницу в отчете, и поместим ее слева.

ReportManualPart5_img36

Дадим страницам более информативные имена, страницу с оглавлением назовем "Contents", а страницу с отчетом – "ReportData". Имена страниц задаются через панель свойств.

ReportManualPart5_img37

Наш отчет выводит строки на страницу с шагом в 1 час. При построении основного отчета, мы будем создавать якоря с именами по числу месяца ("1", "2" и т.д). Таким образом на странице оглавления нам нужно создать количество строк по количеству дней в месяце. Кроме того, в каждую строку, кроме номера страницы, нужно выводить и информацию о заголовке. В качестве такой информации мы будем выводить полную дату (например – "5 ноября 2013").

Самый простой способ получить источник данных с количеством строк соответствующих количеству дней в месяце – это создать новый источник данных, включить у него периодический способ формирования и задать интервал – 1 сутки.

Создадим новый источник данных и назовем его "Вспомогательный". Свяжем параметры "Начало" и "Конец" с переменными из дерева объекта (аналогичными как для источника "ПоказанияСчетчика").

ReportManualPart5_img38

Зададим периодический способ формирования, с интервалом в сутки.

ReportManualPart5_img39

Добавим в источник данных рассчитываемую колонку, которую назовем "ЗаголовокДата".

ReportManualPart5_img40

Тип установим DateTime, в поле Значение введем формулу. Данная колонка будет возвращать прошедшую дату – то есть из колонки "Время" мы будем вычитать сутки. Для этого нужно использовать метод AddDays(-1). Текст выражения в итоге будет иметь вид:

Вспомогательный.Время.AddDays(-1)

ReportManualPart5_img41

Вытащим источник данных на страницу. Кроме бэнда данных, добавим на страницу и заголовок данных.

ReportManualPart5_img42

Создадим якоря. Перейдем на страницу отчета "ReportData", выделим бэнд данных и перейдем на вкладку событий.

ReportManualPart5_img43

Мы будем создавать якорь в событии Перед печатью. Условием создания якоря у нас будет создание строки данных за новое число. Можно определить создание строки с новым числом отслеживая значение часа (если 0 часов – наступил новый день). Но в нашем случае можно создавать якорь через каждые 24 строки данных. Таким образом код будет выглядеть следующим образом:

if ((Line-1)%24 == 0) 

AddAnchor((Day(ПоказанияСчетчика.Время)).ToString());

Разберем строку где происходит добавление якоря.

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

Теперь разместим на странице оглавления "Content" номер страницы на котором находится каждый якорь. Вызовем редактор текста ячейки для номера страницы и пропишем код:

{GetAnchorPageNumber((Day(Вспомогательный.ЗаголовокДата)).ToString())}

Часть кода

((Day(Вспомогательный.ЗаголовокДата)).ToString())

действует аналогично, как и в случае с добавлением якоря – из даты извлекается день, а затем преобразуется в строку. Полученная строка передается в метод GetAnchorPageNumber, который и возвращает номер страницы, на которой находится указанный якорь.

ReportManualPart5_img44

В свойствах ячейки, установим настройку Обработать в - В конце отчета. В этом случае ячейка будет заполнена в конце отчета – когда все якоря будут добавлены.

ReportManualPart5_img45

Запустим предварительный просмотр отчета. На первую страницу добавились имена заголовков (соответсвующих дате), и соответсвующие им номера страниц.

ReportManualPart5_img46

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

Для создания гиперссылок необходимо у компонента, на который будет осуществляться переход создать закладку (например, "Закладка1"), а у компонента с которого будет осуществляться переход создать гиперссылку на эту закладку. Гиперссылка должна состоять из имени закладки, на которую ссылается с предварительным символом # (например, "#Закладка1").

Сначала создадим закладку. Для этого на странице "ReportData", выделим бэнд данных, и откроем окно настроек Взаимодействия. Затем на вкладке Общие в поле Закладка, пропишем код:

{Day(ПоказанияСчетчика.Время).ToString()}

 

ReportManualPart5_img47

Теперь настроим гиперссылку. Для этого на странице "Contents" пропишем, у ячейки с номером страницы, в окне настроек Взаимодействий – в поле Гиперссылка пропишем код:

#{(Day(Вспомогательный.ЗаголовокДата)).ToString()}

ReportManualPart5_img48

Аналогичный код в той же настройке пропишем и у поля с заголовком.

Также настроим для данных ячеек стиль текста, соответствующий гиперссылке – синий цвет, жирный шрифт с подчеркиванием.

ReportManualPart5_img49

Запустим предварительный просмотр.

ReportManualPart5_img50

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

ReportManualPart5_img51

Примечание. Гиперссылки со страницы оглавления, работают и при экспорте в другие форматы (pdf, html, doc).

 

Примечание. Готовый отчет можно посмотреть в проекте "Интерактивные отчеты" в объекте "Отчет с оглавлением".