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

strel11 Бэнды страницы (Заголовок страницы (Page Header) и Итог страницы (Page Footer)), Водяной знак (Overlay) - эти бэнды взаимосвязаны со страницами отчета, и выводятся на каждой странице отчета;

strel11 Бэнды отчета (Заголовок отчета (Report Title) и Итог отчета (Report Summary)). Как понятно из их названия, эти бэнды взаимосвязаны с самим отчетом и предназначены для вывода заголовка и итога по отчету. Выводятся только один раз.

strel11 Бэнды для вывода списка данных: Данные (Data Band), Дерево (Hierarchical). Далее, по тексту будет упоминаться бэнд Данные (Data Band), в тоже время подразумевая, что вместо него может использоваться и бэнд Дерево (Hierarchical);

strel11 Бэнды, связанные с бэндом Данные (Заголовок данных (Header Band), Итог данных (Footer Band), Заголовок группы (Group Header Band), Итог группы (Group Footer Band), Заголовок колонки (Column Header Band), Итог колонки (Column Footer Band), Пустые данные (Empty Band)).

strel11 Бэнд Подчиненный (Child).

 

cross12-1Порядок расположения бэндов в шаблоне отчета

 

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

 

Порядок

Название бэндов

Описание

1

Заголовок страницы (Page Header)

На каждой странице. Вывод на первой странице – опционально.

2

Заголовок отчет (Report Title)

Один раз в начале отчета. ReportTitleBand может выводится раньше PageHeaderBand если у страницы (на которой находятся оба бэнда), свойство TitleBeforeHeader установлено в истина (true).

3

Заголовок данных (Header),

Заголовок колонки (Column Header)

Один раз перед выводом данных (Для Заголовок колонки (ColumnHeader) - один раз для каждой колонки). Вывод на каждой новой странице – опционально.

4

Заголовок группы (Group Header)

В начале каждой группы. Вывод на каждой новой странице – опционально.

5

Данные (Data)

Для каждой строки данных.

6

Пустые данные (Empty Band)

Для каждой пустой строки на каждой странице отчета.

7

Итог группы  (Group Footer)

В конце каждой группы.

8

Итог данных (Footer),

Итог колонки (Column Footer)

После вывода всех данных (Для Итог колонки (ColumnFooter) - один раз для каждой колонки). Вывод на каждой новой странице – опционально.

9

Итог отчета (Report Summary)

Один раз в конце отчета.

10

Водяной знак (Overlay)

Один раз на каждой странице отчета.

11

Итог страницы (Page Footer)

На каждой странице. Вывод на первой странице – опционально.

 

information Примечание: В первую очередь выводятся компоненты, которые не расположены ни на одном бэнде. После этого выводятся бэнды.

 

Бэнд Подчиненный (Child) может располагаться под любым бэндом, кроме Заголовок страницы (Page Header), Итог отчета (Report Summary), Итог страницы (Page Footer). На рисунке снизу представлена страница шаблона отчета с расположением бэндов:

 

 

 

cross12-1Порядок построения

 

При построении отчета, страницы шаблона обрабатываются последовательно. Порядок обработки страницы определяется положением страницы в дереве отчета. Чем выше страница в дереве отчета, тем выше её приоритет (т.е. очередность) на обработку:

 

 

Для дерева отчетов на рисунке выше, порядок обработки страниц будет следующим: сначала будет обработана страница шаблона Page1, затем Page5, за ней Page4, далее Page3, и наконец последней будет Page2. Допустим на Page1 расположены все бэнды (см. пример страницы шаблона отчета с расположением бэндов выше). В этом случае, бэнды будут обрабатываться в несколько этапов:

 

strel11 На первом этапе проивзодится предварительный анализ всех бэндов страницы и выделение следующих бэндов PageHeaderBand1, PageFooterBand1 и OverlayBand1. Эти бэнды будут всегда в первую очередь обрабатываться и добавляться на каждую новую страницу в построенном отчете. Также, на первую страницу построенного отчета будет также добавлен бэнд ReportTitleBand1.

 

warning16 ОБРАТИТЕ ВНИМАНИЕ: Если свойство Титул до заголовка (Title before Header) установлено в значение истина (true), то в первую очередь будет обрабатываться и  добавляться на первую страницу отчета бэнд ReportTitleBand1, а уже после него PageHeaderBand1.

 

strel11 На втором этапе производится анализ остальных бэндов.

 

information Информация: Следует понимать, что остальные бэнды находятся во взаимосвязи с бэндом Данные (Data Band) и их построение зависит от него. Поэтому сначала находится и анализируется бэнд Данные, а затем другие бэнды.

 

После анализа, будет начато построение отчета. Последним будет обработан ReportSummaryBand1.

 

 

cross12-1Взаимосвязь бэндов

 

Как уже было сказано выше, все бэнды (кроме PageHeaderBand1, PageFooterBand1, OverlayBand1, ReportTitleBand1, ReportSummaryBand1) при построении отчета зависят от бэнда DataBand1. Рассмотрим эти взаимосвязи более подробно и начнем с простого примера. На странице шаблона отчета лежит бэнд Данные (Data Band):

 

 

Количество записей в источнике данных равно пяти, и это значит, что бэнд Данные будет напечатан 5 раз в построенном отчете:

 

 

Почти все бэнды можно разделить на две категории: Заголовки и Итоги, т.е. для каждого типа заголовков существует итог этого же типа. Например, для заголовка групп - есть итог групп, для заголовка данных - есть итог данных и т.д.

 

warning16 ОБРАТИТЕ ВНИМАНИЕ: При одинаковом количестве заголовков и итогов, каждому заголовку будет соответствовать свой итог. Соответствие "заголовок - итог" считается не сверху и снизу страницы, а от бэнда Данные.

 

Рассмотрим пример. Допустим на странице один бэнд Данные, два его заголовка и два его итога:

 

 

Порядок расположения бэндов на странице, в направлении сверху вниз:

 

Порядок

Наименование бэнда

1

Заголовок данных - бэнд HeaderBand3

2

Заголовок данных - бэнд HeaderBand2

3

Бэнд Данные - DataBand2

4

Итог данных - бэнд FooterBand3

5

Итог данных - бэнд FooterBand2

 

В этом случае, бэнду HeaderBand3 будет соответствовать FooterBand2, а бэнду HeaderBand2 - FooterBand3. Иначе говоря, первому заголовоку от бэнда Данные (двигаем вверху) соответствует первый итог от бэнда Данные (двигаемся вниз). Ниже представлен пример построенного отчета:

 

 

Часто бывает, что количество заголовков и итогов определенного типа, разное количество. Например, изменим пример выше, добавив HeaderBand4 между HeaderBand2 и DataBand2. теперь заголовку HeaderBand4 соответствует итог FooterBand3 (цвет - желтый), HeaderBand2 - FooterBand2 (цвет - бирюзовый), а вот бэнд HeaderBand3 (цвет синий) без итога.:

 

 

warning16 ОБРАТИТЕ ВНИМАНИЕ: Простые заголовки/итоги выводятся только один раз до/после бэнда данные, и их количество ни на что не влияет. Заголовки и итоги групп выводятся для каждой группы, и каждому заголовку группы строго соответствует свой итог группы. В сложных отчетах, при неодинаковых количествах заголовков и итогов групп, может возникнуть ошибочная связь итогов и заголовков. Поэтому рекомендуем стремиться к одинаковому количеству бэндов заголовков и итогов групп в шаблоне отчета.

 

information Информация: Для того, чтобы бэнд присутствовал в шаблоне отчете, но не отображался в построенном отчете, необходимо установить у него нулевую высоту.

 

Для примера выше, уровняем количество заголовков и итогов данных:

 

 

В этом случае, HeaderBand4 соответствует FooterBand3 (цвет - желтый), HeaderBand2 - FooterBand4 (цвет - бирюзовый), HeaderBand3 (цвет - синий) - FooterBand2 (нулевая высота). При этом, в построенном отчете FooterBand4 печататься (отображаться) не будет:

 

 

Таким образом, в шаблоне отчета равное количество заголовков и итогов, и легко определить их соответствие. В тоже время, можно выключать (т.е. не отображать) определенные бэнды. Все примеры выше были рассмотрены для бэндов Заголовок данных (Header Band) и Итог данны (Footer Band). Такой же принцип соответствия относится и к бэндам Заголовок группы (Group Header Band), Итог группы (Group Footer Band), Заголовок колонки (Column Header Band), Итог колонки (Column Footer Band).

 

Теперь рассмотрим пример, когда в шаблоне отчета несколько бэндов данные:

 

 

Эти бэнды не имеют связи между собой. Поэтому обрабатываться они будут последовательно. Сначала будет обработан бэнд DataBand1 (список категорий), затем - DataBand2 (список продуктов):

 

 

Теперь добавим в шаблон отчета бэнд Заголовок данных (Header Band). Бэнд Заголовок отчета будет относиться к тому бэнду Данные, над которым он непосредственно расположен. Для того чтобы бэнд Заголовок данных (HeaderBand1) относился к DataBand1 (список категорий), его необходимо размещать выше этого бэнда Данные:

 

 

Для того чтобы бэнд Заголовок данных(HeaderBand2) относился к DataBand2 (список продуктов), его необходимо размещать непосредственно над этим бэндом Данные:

 

 

И тогда первая страница построенного отчета будет следующего вида:

 

 

Теперь рассмотрим взаимодействие итогов в отчете с несколькими бэндами Данные. Как уже говорилось выше, итоги в шаблоне отчета относится к тому бэнду Данные, ниже которого они непосредственно расположены. При этом, бэнд Итог данных (Footer Band) является закрывающим к бэнду Заголовок данных (Header Band). Допустим, необходимо вывести итог по количеству категорий. В этом случае, Итог данных (FooterBand1) должен располагаться ниже бэнда Данные со списком категорий, но выше HeaderBand2 для списка продуктов:

 

 

Страница построенного отчет будет следующего вида:

 

 

Для того чтобы вывести итог по бэнду Данные со списком продуктов, Итог данных (FooterBand2) необходимо разместить ниже DataBand2. Для данного примера рассчитаем итоговую стоимость всех продуктов, используя функцию Sum. Результат будет выводиться на каждой странице отчета (для этого установим флажок у свойства Печатать на всех страницах (Print on All Pages)). Ниже представлена страница шаблона отчета с итогом по бэнду Данные со списком продуктов:

 

 

И тогда первая страница построенного отчета будет следующего вида:

 

 

warning16 ОБРАТИТЕ ВНИМАНИЕ: Для примера описанного выше, расположение FooterBand1 под HeaderBand2 будет не совсем верным:

 

 

Бэнды FooterBand1 и HeaderBand2, в этом случае, не относятся ни к одному бэнду Данные (Data Band). При построении отчета, сначала будут определены все бэнды Данные. Затем определяются для каждого бэнда Данные определяются заголовки, которые относятся к этому бэнду Данные, т.е. все заголовки расположенные выше до какого-либо итогового бэнда или другого бэнда Данные. После заголовков, определяются итоги, которые относятся к этому бэнду Данные, т.е. все итоги расположенные ниже до следующего заголовка или другого бэнда Данные. Поэтому в построенном отчете DataBand1 будет без итога, DataBand2 без заголовка, а HeaderBand2  и FooterBand1 не будут отображены, т.к. не относятся ни к одному из бэндов Данные:

 

 

Такой же принцип взаимодействия распостраняется и на бэнды Заголовок группы (Group Header Band), Итог группы (Group Footer Band), Заголовок колонки (Column Header Band), Итог колонки (Column Footer Band). Еще раз коротко о взаимодействии бэндов:

strel11 Заголовки располагаются выше бэнда Данные (Data Band), к которому они относятся, а Итоги ниже. Сами по себе заголовки и итоги печататься не могут, т.к. они должны относится к какому-либо бэнду Данные.

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