Обратите внимание

 

Сценарии могут представлять угрозу безопасности. Поэтому в режиме вычисления как Интерпретация (Interpretation) они выключены. Если вы уверены, в безопасности сценариев, можно использовать их в режиме вычисления Компиляция (Compilation).

 

 

 

Часто возникает необходимость построить отчет с оглавлением. В таком отчете сначала необходимо вывести структуру отчета, а затем сам отчет. В этом случае встает вопрос, как вывести номера страниц, ведь в тот момент, когда происходит построение оглавления, еще не известны номера страниц, на которые ссылаются элементы оглавления. Для решения этой проблемы предназначен специальный элемент - якорь. Для создания якоря применяется метод AddAnchor. В момент создания якоря, генератор отчетов запоминает текущую страницу и сопоставляет ее с якорем с указанным названием. К примеру - AddAnchor(“MyAnchorName”).

 

 

strel11 В этом коде будет создан новый якорь с названием “MyAnchorName”. Для того чтобы получить значение якоря применяется метод GetAnchorPageNumber. Метод возвращает номер страницы по названию якоря. Если якоря с таким названием нет, то возвращается 0. К примеру -{GetAnchorPageNumber(“MyAnchorName”)}

 

 

strel11 Это текстовое выражение вернет номер страницы, по якорю с названием “MyAnchorName”. Таким образом, имея названия якоря можно узнать номер страницы, на которой он был создан. При помощи этих двух методов и организуется построение оглавления. Для этого сначала строится оглавление, вместо номеров страниц вставляются ссылки на якоря. Причем для всех компонентов, которые вызывают функцию для получения номера страницы через якорь, необходимо установить свойство Обработать в (Process At) в значение В конце отчета (End of Report). Это необходимо, для того чтобы эти компоненты были обработаны в самом конце отчета, когда все номера страниц уже известны.

 

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

 

Информация

 

У текстового компонента выражение, которого возвращает номер страницы необходимо включить свойство Обработать в (Process At) в значение В конце отчета (End of Report). Это необходимо, для того чтобы значения этих текстовых компонентов обработалось после построения отчета (когда уже будут известны номера страниц). В текстовом компоненте указывается следующее выражение: {GetAnchorPageNumber(component.TagValue)}

 

 

 

strel11 Это текстовое выражение вернет номер страницы при помощи якоря.

 

 

 

В качестве наименования якоря используется значение свойства Tag. Для заполнения свойства Tag используется выражение - {Products.ProductName}.

 

strel11 В данном случае используется наименование продукта. Поэтому нельзя использовать, к примеру, такое выражение - {GetAnchorPageNumber(Products.ProductName)}

 

Потому что компонент, который содержит выражение, будет обрабатываться в конце построения отчета, а значит значение поля Products.ProductName будет для всех строк одинаковым – последним в списке. Поэтому необходимо запомнить значения поля Products.ProductName для каждой строки в тот момент, когда будет строиться оглавление. Для этого и используются теги компонента. На второй странице строится сам отчет. В событии Rendering у компонента DataBand, по которому строится оглавление, вызывается метода AddAnchor. Этот метод запомнит текущую страницу в момент своего вызова.

 

 

 

Наименованием якоря является значение поля Products.ProductName. В итоге сначала строится первая страница. Затем строится вторая страница, запоминаются номера страниц. После построения отчета, движок генератора отчетов возвращается к первой странице и расставляет номера страниц.