Sign in Join
Wiki copytemporary

FPReport/ru: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Архитектура
22
33FP Report - это инструмент для создания групповых отчетов.
44
55Он был разработан с нуля, чтобы иметь возможность работать на веб-сервере без интерфейса с минимальными зависимостями. Важным примером использования был сервер Linux, работающий в контейнере без установленных X-библиотек. Создание отчета - это просто размещение квадратиков с содержимым на странице, обычно на основе цикла обработки данных. Это можно сделать полностью в памяти и не требует отображения или графического интерфейса пользователя.
66
77Отчеты могут быть созданы полностью в коде или их можно прочитать из преодпределенного файла. В файле, поставляемом по умолчанию, используется формат [[JSON]] для хранения определения отчета. Отчеты также могут быть оформлены визуально с помощью конструктора. Существует автономный конструктор, а также возможность разработки отчета в среде IDE Lazarus.
88
99После создания отчета его можно сохранить на диск или отрисовать. Отрисовка - это процесс создания визуального вывода.
1010
1111Были реализованы различные средства визуализации:
1212
1313 * Для [[PDF]]. Предпочтительным средством визуализации является средство визуализации в формате PDF
1414 * Для серии изображений. Программа визуализации изображений FP создает растровое изображение для каждой страницы, и растровые изображения могут быть сохранены в каталоге в любом из поддерживаемых форматов изображений FP.
1515 * В HTML: каждая страница отображается как HTML-страница с использованием соответствующей CSS-разметки.
1616
17- Части, которые не могут быть отображены в формате HTML и CSS, будут отображены в виде изображения и размещены на странице HTML.
17+Части, которые не могут быть отображены в формате HTML и CSS, будут отображены в виде изображения и размещены на странице HTML.
1818
1919 * В LCL (холст).
2020
21- Фактически, это основа предварительного просмотра, конструктора и поддержки печати.
21+Фактически, это основа предварительного просмотра, конструктора и поддержки печати.
2222
2323 * В AggPas canvas. AggPas - это мощная графическая библиотека, и этот инструмент визуализации аналогичен инструменту визуализации изображений FP
2424 * В fpGUI - его можно использовать для предварительного просмотра отчета в отчете FPGUI
2525
2626## Модули
2727
28-fpreport
29- Для создания отчета в коде достаточно этого модуля.
30- Он содержит базовый отчет, страницу, бэнды и элементы.
31-fpreportstreamer
32- Этот модуль содержит стример, который считывает/записывает определение отчета из/в файл.
33-fpjsonreport
34- Этот модуль содержит класс отчета, который можно удалить из модуля формы/данных Lazarus:
35- определение отчета будет записано в файл формы.
36-fpreportdb
37- Этот модуль содержит компонент цикла обработки данных **Данные набора данных отчета TFP** , который основывает цикл на данных из набора данных.
38-fpreportpdfexport
39- Этот модуль содержит программу экспорта отчетов в формате PDF **TFP Report Export PDF**.
40- Экземпляр этого класса можно использовать для экспорта отчета в формат PDF.
41-fpreporthtmlexport
42- Этот модуль содержит HTML-экспортер **TFP Report Export HTML**.
43- Экземпляр этого класса можно использовать для экспорта отчета на HTML-страницы.
44-fpreportfpimageexport
45- Этот модуль содержит программу экспорта изображений **TFPReportExportfpImage**.
46- Экземпляр этого класса можно использовать для экспорта отчета в любой поддерживаемый формат изображений.
28+**fpreport**
4729
30+Для создания отчета в коде достаточно этого модуля.
31+
32+Он содержит базовый отчет, страницу, бэнды и элементы.
33+
34+**fpreportstreamer**
35+
36+Этот модуль содержит стример, который считывает/записывает определение отчета из/в файл.
37+
38+**fpjsonreport**
39+
40+Этот модуль содержит класс отчета, который можно удалить из модуля формы/данных Lazarus:
41+
42+определение отчета будет записано в файл формы.
43+
44+**fpreportdb**
45+
46+Этот модуль содержит компонент цикла обработки данных **Данные набора данных отчета TFP** , который основывает цикл на данных из набора данных.
47+
48+**fpreportpdfexport**
49+
50+Этот модуль содержит программу экспорта отчетов в формате PDF **TFP Report Export PDF**.
51+
52+Экземпляр этого класса можно использовать для экспорта отчета в формат PDF.
53+
54+**fpreporthtmlexport**
55+
56+Этот модуль содержит HTML-экспортер **TFP Report Export HTML**.
57+
58+Экземпляр этого класса можно использовать для экспорта отчета на HTML-страницы.
59+
60+**fpreportfpimageexport**
61+
62+Этот модуль содержит программу экспорта изображений **TFPReportExportfpImage**.
63+
64+Экземпляр этого класса можно использовать для экспорта отчета в любой поддерживаемый формат изображений.
65+
4866## Структура отчета
4967
5068Отчет является экземпляром класса **TFP Report**. Он состоит из одной или нескольких страниц, каждая страница является экземпляром **TFPReportCustomPage**. Экземпляры доступны в свойстве массива **Pages** класса отчетов. Количество страниц указывается в свойстве **PageCount**.
5169
5270При создании отчета сначала будет отображена первая страница (в соответствии с циклом обработки данных), затем будет отображена вторая страница и так далее.
5371
5472Каждая страница может состоять из одного или нескольких бэндов. Некоторые бэнды будут отображаться в выходных данных только один раз, другие - в обычных местах, но большинство бэндов будут отображаться произвольное количество раз, в зависимости от данных, которые передаются в отчет. Обычно для каждой записи в цикле обработки данных один раз печатается бэнд данных.
5573
5674Каждый бэнд содержит один или несколько элементов (потомков **TFPReportElement**).
5775
5876При каждой печати бэнда печатаются все элементы в нем. Существует несколько типов элементов. Основными из них являются
5977
6078 * Memo. Это текстовый элемент, который печатает текст.
6179
62- Текст может содержать заполнители, которые будут вычисляться при каждой печати текста.
80+Текст может содержать заполнители, которые будут вычисляться при каждой печати текста.
6381
6482 * checkbox. Это графический элемент, который печатает флажок (установленный или нет)
6583 * image. Это графический элемент, на котором печатается изображение.
6684 * shape. Это элемент, который может отображать одну из нескольких геометрических фигур.
6785
6886Эти элементы имеют некоторые общие черты, такие как возможность обводить их рамкой и иметь цвет фона.
6987
7088## Типы бэндов
7189
7290Отчет FP содержит различные типы бэндов. У каждого бэнда есть свое назначение. Некоторые бэнды могут отображаться в определении отчета только один раз, другие бэнды могут отображаться несколько раз.
7391
7492### DataBand
7593
7694Это бэнд (класс **TFPReportDataBand**), который будет распечатываться один раз для каждой записи в цикле данных отчета. В отчет можно поместить несколько бэндов данных, если они связаны отношением мастер-деталь.
7795
7896### Report title и Summary
7997
8098Заголовок отчета (**TFPReportTitleBand**) и краткое содержание (**TFPReportSummaryBand**) могут отображаться один раз на каждой странице отчета. Они печатаются один раз: при запуске и завершении подготовки отчета.
8199
82100### Page Header и Footer
83101
84102Верхний колонтитул (**TFPReportPageHeaderBand**) и нижний колонтитул (**TFPReportPageFooterBand**) печатаются соответственно вверху и внизу каждой страницы. Такую полосу можно добавить один раз на страницу. Можно не печатать верхний колонтитул на первой странице и нижний колонтитул на последней странице.
85103
86104### Data Header и Footer
87105
88106Верхний колонтитул данных (**TFPReportDataHeaderBand**) и нижний колонтитул (**TFPReportDataFooterBand**) печатаются при запуске и завершении цикла обработки данных. Если отчет содержит несколько страниц и использует несколько циклов, то сводка отчета и заголовок печатаются только один раз, но заголовок данных и сводная информация печатаются для каждого цикла. Эту полосу можно добавить один раз для каждого цикла данных в отчете.
89107
90108### Group Header и Footer
91109
92110Данные могут быть сгруппированы на основе выражения. При изменении значения выражения запускается новая группа. Группа определяется путем размещения на странице заголовка группы (**TFPReportGroupHeaderBand**). Итоговые данные по группе могут отображаться в конце группы с помощью нижнего колонтитула группы (**TFPReportGroupFooterBand**)
93111
94112Этот диапазон можно добавлять один раз для каждого цикла обработки данных в отчете.
95113
96114### Column Header и Footer
97115
98116Отчет может содержать несколько столбцов. В начале каждого столбца (на каждой странице) можно напечатать заголовок, используя полосу заголовков столбцов (Column Header) (**TFPReportColumnHeaderBand**). В нижней части столбца (опять же, на каждой странице) может быть напечатана полоса нижнего колонтитула (Column Footer) (**TFPReportColumnFooterBand**).
99117
100118Эту полосу можно добавить один раз для каждой страницы отчета.
101119
102120### Child band
103121
104122За исключением бэндов нижнего колонтитула страницы и столбца, к каждому бэнду может быть присоединен дочерний бэнд (**TFPReportChildBand**). Это может быть полезно для выравнивания, например, когда бэнд содержит увеличивающийся memo, и бэнд настроен на растяжение, что позволяет разместить содержимое memo.
105123
106124Этот бэнд можно размещать в отчете произвольное количество раз.
107125
108126## Элементы, доступные для печати
109127
110128На бэнд можно поместить один или несколько элементов, доступных для печати. Элементом, доступным для печати, является один из следующих элементов:
111129
112130 * Memo. Это текстовый элемент. Текст может содержать формулы и ограниченный набор HTML-тегов, таких как полужирный шрифт, курсив, подчеркивание и теги шрифта или якоря. Формулы будут обработаны, и результат будет подставлен в текста.
113131 * Shape: это одна из нескольких фигур, таких как круг, квадрат, треугольник или прямые линии различной ориентации.
114132 * Image: Вы можете вставить в свой отчет любое изображение. Можно использовать все форматы изображений, поддерживаемые FPC fcl-image.
115133 * Checkbox. Это особый случай компонента изображения: он использует 2 изображения, одно для значений true, другое для значений false.
116134
117135Какое из них используется, зависит от значения выражения, которое вычисляется каждый раз при печати флажка.
118136
119137 * элемент Barcode. Этот элемент находится в отдельном блоке (fpreportbarcode) и может использоваться для отображения одного из многих типов штрих-кода.
120138 * элемент QRCode. Этот элемент находится в отдельном блоке (fpreportqrcode) и может использоваться для отображения QR-кода. Он обладает некоторыми свойствами, позволяющими определить тип штрих-кода и способ его позиционирования.
121139
122140## Циклы обработки данных
123141
124142Цикл обработки данных является основной концепцией отчета. Его можно рассматривать как абстракцию массива записей: для каждой "записи" в "массиве" будет напечатан бэнд данных. "Поля" каждой записи доступны для использования в выражении, и когда вычисляется выражение, содержащее поле, в выражении будет использоваться значение поля для текущей записи.
125143
126144Очевидно, что цикл обработки данных определяет количество страниц в подготовленном отчете.
127145
128146В настоящее время доступно 5 типов циклов обработки данных:
129147
130148 * Цикл обработки пользовательских данных (user data loop).
131149
132- Этот цикл полностью управляется событиями, и для извлечения данных используются различные события.
150+Этот цикл полностью управляется событиями, и для извлечения данных используются различные события.
133151
134152 * Цикл обработки данных базы данных (DB data loop).
135153
136- Этот цикл управляется набором данных: запись - это 1 запись в наборе данных, "поля" в записи - это поля в наборе данных.
154+Этот цикл управляется набором данных: запись - это 1 запись в наборе данных, "поля" в записи - это поля в наборе данных.
137155
138156 * Цикл, основанный на TFPObjectList.
139157
140- При этом используется RTTI объектов для предоставления данных в цикле.
158+При этом используется RTTI объектов для предоставления данных в цикле.
141159
142160 * Цикл, основанный на TCollection.
143161
144- Аналогично циклу TFPObjectList, при этом используется RTTI объектов для предоставления данных в цикле.
162+Аналогично циклу TFPObjectList, при этом используется RTTI объектов для предоставления данных в цикле.
145163
146164 * Цикл, основанный на массиве JSON/Object.
147165
148- Это берет массив JSON (или объект) и выполняет цикл по элементам в массиве.
166+Это берет массив JSON (или объект) и выполняет цикл по элементам в массиве.
149167
150168### Структура цикла передачи данных
151169
152170Циклы данных отображаются на нескольких уровнях, они определяют структуру отчета.
153171
154172 * На странице может быть цикл данных.
155173 * Бэнд Master данных. На странице может существовать только один такой бэнд.
156174
157- Это основной цикл данных для страницы.
175+Это основной цикл данных для страницы.
158176
159177 * Бэнды Detail данных.
160178
161- Цикл этих бэндов выполняется каждый раз, когда печатается бэнд Master данных бэндов Detail данных.
162- Бэнды Detail данных могут быть вложенными, бэнд Detail данных может быть Master для другого бэнда Detail данных.
179+Цикл этих бэндов выполняется каждый раз, когда печатается бэнд Master данных бэндов Detail данных.
163180
181+Бэнды Detail данных могут быть вложенными, бэнд Detail данных может быть Master для другого бэнда Detail данных.
182+
164183Для каждой страницы отчета обработчик определяет основной цикл обработки данных для этой страницы.
165184
166185Это первый цикл обработки данных для бэнда данных, если у бэнда данных нет master бэнда. Он будет использоваться для запуска отображения бэндов на этой странице.
167186
168187Обычно Page.Data будут равны Nil.
169188
170189Но если он установлен и отличается от основного цикла обработки данных на странице, то для каждой записи в цикле Page.Data отображается вся страница (и все циклы на ней).
171190
172191Если основной цикл обработки данных равен циклу обработки данных страницы, логика такова, как если бы Page.Data был равен Nil (для обратной совместимости).
173192
174193Для каждого диапазона, у которого есть поддиапазоны, движок выполнит аналогичный цикл по поддиапазонам.
175194
176195### Цикл передачи пользовательских данных
177196
178197Пользовательский цикл обработки данных полностью управляется событиями и должен использоваться для любого типа данных. Ожидается, что пользователь реализует несколько обработчиков событий для цикла обработки данных, чтобы реализовать его функциональность.
179198
180-OnOpen
181- Вызывается, когда цикл передачи данных 'открыт'.
182- Может быть использовано для настройки фактических данных.
183-OnFirst
184- Вызывается, когда механизму создания отчетов необходимо поместить цикл обработки данных в первую запись.
185-OnGetValue
186- Вызывается, когда механизму создания отчетов необходимо получить значение поля.
187-OnGetNames
188- Вызываемый перед открытием цикла обработки данных, он используется для получения списка полей в цикле обработки данных
189-OnNext
190- Вызывается для подачи сигнала о том, что цикл передачи данных должен перейти к следующей записи
191-OnGetEOF
192- Вызывается, чтобы проверить, есть ли еще какие-либо записи в цикле обработки данных.
193-OnClose
194- Вызывается, когда отчет завершен и цикл обработки данных больше не нужен.
199+**OnOpen**
200+
201+Вызывается, когда цикл передачи данных 'открыт'.
202+
203+Может быть использовано для настройки фактических данных.
204+
205+**OnFirst**
206+
207+Вызывается, когда механизму создания отчетов необходимо поместить цикл обработки данных в первую запись.
208+
209+**OnGetValue**
210+
211+Вызывается, когда механизму создания отчетов необходимо получить значение поля.
212+
213+**OnGetNames**
214+
215+Вызываемый перед открытием цикла обработки данных, он используется для получения списка полей в цикле обработки данных
216+
217+**OnNext**
218+
219+Вызывается для подачи сигнала о том, что цикл передачи данных должен перейти к следующей записи
220+
221+**OnGetEOF**
222+
223+Вызывается, чтобы проверить, есть ли еще какие-либо записи в цикле обработки данных.
224+
225+**OnClose**
226+
227+Вызывается, когда отчет завершен и цикл обработки данных больше не нужен.
195228
196229### Цикл обработки данных БД
197230
198231Цикл обработки данных набора данных (**TFPReportDatasetData** , модуль _fpreportdb_) содержит некоторые события цикла обработки пользовательских данных, но, в отличие от цикла обработки пользовательских данных, события предназначены исключительно для получения обратной связи пользователем. Цикл обработки данных набора данных управляет всеми данными самостоятельно. Он открывает набор данных или выполняет навигацию по набору данных, когда механизм создания отчетов вызывает различные методы.
199232
200233### Цикл данных Collection
201234
202235Подобно циклу обработки данных базы данных, цикл сбора данных (**TFPReportCollectionData** , модуль _fpreportcontnr_) содержит некоторые события цикла обработки пользовательских данных, но, в отличие от цикла обработки пользовательских данных, события предназначены исключительно для получения обратной связи пользователем. Цикл сбора данных выполняет циклическую обработку элементов коллекции. Он предоставляет опубликованные свойства элементов Collection в виде полей.
203236
204237### Цикл обработки данных ObjectList
205238
206239Подобно циклу сбора данных collection, цикл обработки данных ObjectList (**TFPReportObjectListData** , модуль _fpreportcontnr_) содержит некоторые события цикла обработки пользовательских данных, но, в отличие от цикла обработки пользовательских данных, события предназначены исключительно для получения обратной связи от пользователя.
207240
208241Цикл обработки данных ObjectList выполняет циклическую обработку элементов списка объектов.
209242
210243Он отображает опубликованные свойства элементов списка в виде полей. Предполагается, что все объекты в списке принадлежат к одному классу, и для определения полей используется первый объект в списке.
211244
212245### Цикл передачи данных в формате JSON
213246
214247Подобно циклу данных collection, цикл обработки данных в формате JSON (**TFPReportJSONData** , модуль _fpreportjson_) содержит некоторые события цикла обработки пользовательских данных, но, в отличие от цикла обработки пользовательских данных, события предназначены исключительно для получения обратной связи пользователем.
215248
216249Цикл обработки данных в формате JSON повторяет элементы массива или объекта в формате JSON.
217250
218251Он отображает свойства первого элемента в массиве (или объекте) в виде полей. Если первый элемент в массиве снова является массивом, то в качестве имен полей используются Column1 по ColumnN
219252
220253Предполагается, что все объекты/массивы в списке идентичны по структуре.
221254
222255Массив может быть вложен в сложный объект: свойство Path может использоваться для указания циклу обработки данных JSON правильного местоположения массива (или объекта).
223256
224257## Загрузка и сохранение в файл
225258
226259Сам по себе TFPReport не имеет представления о форматах файлов.
227260
228261Ему известен только класс `streamer`. По этой причине у него нет методов `LoadFromFile`/`SaveToFile`. Единственным поддерживаемым в настоящее время классом `streamer` является **TFPReportJSONStreamer** , который можно использовать для сохранения и загрузки дизайна отчета в файл/из файла из другого файла.
229262
230263На странице [[FPReport Usage]] объясняется, как загрузить отчет из файла.
231264
232265По той же причине TFPReport нельзя использовать для хранения информации в файле lazarus.lfm.
233266
234267Класс **TFPJSONReport** (модуль _fpjsonreport_) наследуется от **TFPReport** и объединяет его со стримером JSON. Если вы хотите иметь возможность автоматически загружать дизайн из файла или сохранять его в файле lazarus.dfm, вам лучше использовать этот класс.
235268
236269## Управление данными
237270
238271Сам по себе компонент TFPReport не обладает знаниями о наборах данных. Ему известен только абстрактный цикл обработки данных.
239272
240273Если вы разрабатываете отчет с помощью конструктора отчетов, автономный конструктор записывает определения данных в созданный им JSON-файл. Однако сам отчет игнорирует эту информацию, и никакие наборы данных или другие циклы обработки данных не будут созданы.
241274
242275Чтобы загрузить и использовать информацию о данных в структуре отчета, вы можете использовать компонент **TFPReportDataManager**.
243276
244277Просто укажите в свойстве _DataManager_ экземпляра **FPJSONReport** экземпляр компонента **TFPReportDataManager** , и он создаст необходимые наборы данных и свяжет их с отчетом.
245278
246279На странице [[FPReport Usage]] объясняется, как это сделать.
247280
248281## Дополнительная информация
249282
250283 * На странице [[FPReport Usage/ru|FPReport_Usage]] объясняется, как создать базовый отчет.
251284 * На странице [[FPReport Designer]] объясняется, как использовать автономный конструктор отчетов.
252285 * На странице [[FPReport Custom elements]] объясняется, как создавать пользовательские элементы для механизма создания отчетов
253286 * На странице [[FPReport Lazarus support]] представлен обзор того, как можно использовать FPReport в Lazarus.
254287
255288### FAQ
256289
257290См. FAQ -> [[FPReport FAQ]]
258291
259292---
260293*From the Free Pascal wiki, page "FPReport/ru", as the Internet Archive kept it on 2025-04-27, last changed on 2025-03-01. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history