Знакомство с форматом отчётов FastReport.NET на примере очень простого отчёта.

19.05.2015

Задумывались ли вы каким образом образом работает генератор отчётов, что представляет из себя шаблон отчёта и из чего состоит подготовленный отчёт? Если вы не получили ответ, то давайте вместе попробуем найти ответы на эти вопросы.

С помощью File->New создаём новый отчёт.  Превращаем его в минимальный отчёт, удаляя все бэнды кроме заголовка.  Помещаем простое текстовое поле на бэнд заголовка, как показано на следующем рисунке:

Minimal report sample

Одна страница. Один бэнд не странице. Одно текстовое поле на бэнде. При сохранении этого отчёта получаем следущий файл, содержащий шаблон отчёта (файл с расширением FRX).

 

<?xml version="1.0" encoding="utf-8"?>
<Report ScriptLanguage="CSharp" ReportInfo.Created="05/19/2015 19:07:39" ReportInfo.Modified="05/19/2015 19:21:46" ReportInfo.CreatorVersion="1.0.0.0">
 <Dictionary/>
 <ReportPage Name="Page1">
 <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="37.8">
 <TextObject Name="Text1" Width="689.85" Height="28.35" Fill.Color="Silver" Text="This is a sample of text string." HorzAlign="Center" VertAlign="Center" Font="Arial, 14pt"/>
 </ReportTitleBand>
 </ReportPage>
</Report>
 

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

Preview report

Подготовленный отчёт сохраняется в файл с расширением FPX. Подготовленный отчёт это сжатый алгоритмом gzip файл в формате XML. Ниже показано распакованное содержимое подготовленного отчёта:

<?xml version="1.0" encoding="utf-8"?>
<preparedreport>
 <pages>
 <page1>
 <b1>
 <t1/>
 </b1>
 </page1>
 </pages>
 <sourcepages>
 <ReportPage Name="Page1">
 <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="37.8">
 <TextObject Name="Text1" Width="689.85" Height="28.35" Fill.Color="Silver" Text="This is a sample of text string." HorzAlign="Center" VertAlign="Center" Font="Arial, 14pt"/>
 </ReportTitleBand>
 </ReportPage>
 </sourcepages>
 <dictionary>
 <b1 name="Page0.ReportTitle1"/>
 <page1 name="Page0"/>
 <t1 name="Page0.Text1"/>
 </dictionary>
 <bookmarks/>
 <outline/>
 <blobstore/>
</preparedreport>
 

Как видно из примера, элементы отчёта "мигрировали" в секцию <sourcepages>. Само тело отчёта, содержащее непосредствено данные, содержатся в секции <pages>.  В виду того, что мы использовали нетипично простой отчёт, его тело выродилось в набор ссылок на элементы отчёта. В нашем случае тело отчёта выродилось до следующих ссылок на элементы отчёта:

1
2
3
4
5
6
 <page1>
 <b1>
 <t1/>
 </b1>
 </page1>
 

 В данном случае <page1> ссылается на описание страницы из шаблона отчёта, на странице расположен бэнд <b1>, который ссылается на <ReportTitleBand>, который содержит элемент <t1/>, который ссылается на текстовое поле <TextObject>.

Чтобы понять простые идеи, заложенные в формат FPX, слегка модифицируем подготовленный отчёт в тестовом редакторе, добавив данных в тело отчёта.

 <page1>
 <b1>
 <t1/>
 </b1>
 <b1 Top="38.0">
 <t1 x="Manually inserted line in text editor"/>
 </b1>
 </page1>
 

 И откроем полученный отчёт в режиме предварительного просмотра.

Modified report

С помощью простой операции в подготовленный отчёт были добавлены новые данные. При этом использовалось простое правило - каждый элемент отчёта несёт минимум необходимой информации, необходимой для корректного отображения. Информация, которая не меняется в процессе построения отчёта, берётся из шаблона (секция <sourcepages>).

Теперь вы можете добавить новые данные на страницу отчёта используя простой текстовый редактор. Что делать, если данные не поместились на одну страницу? Для ответа на этот вопрос ещё раз модифицируем подготовленный отчёт, добавив новую страницу и новые даенные:

 <page1>
 <b1>
 <t1/>
 </b1>
 <b1 Top="38.0">
 <t1 x="Manually inserted line in text editor"/>
 </b1>
 </page1>
 <page1>
 <b1>
 <t1 x="This memo on second page"/>
 </b1>
 </page1>
 

 В результате мы получили отчёт из двух страниц, как показано на следующем рисунке:

Add second page with text editor

 

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

 


 





20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.