© Tillypad, 2004-2024
© Tillypad, 2004-2024
С помощью генератора отчетов Fast Report можно создавать печатные представления для отчетов, форматов печати программных модулей и форматов печати экранных форм.
Узнать, что может Fast Report и как с ним работать можно в его документации.
Это можно сделать по команде «Печать».
контекстного меню панелиДанные отчета выводятся на дата-бендах (компоненты MasterData
, DetailData
и SubdetailData
). В печатных представлениях отчетов и форматов печати программных модулей записи на дата-бендах обычно выводятся в том порядке, который определен запросом. А в печатных представлениях форматов печати экранных форм - в том же порядке, что и в таблице элементов экранной формы.
При построении печатных представлений такой порядок не всегда удобен. Для вывода данных в соответствии с требованиями пользователя нужно выполнить дополнительные операции.
Дата-бенд позволяет выполнять некоторые операции с данными потока: отсортировать данные, отфильтровать данные, управлять их видимостью при их выводе в печатном представлении, сформировать древовидный список.
Чтобы выполнить эти операции нужно указать необходимые значения для атрибутов дата-бенда. Какие атрибуты необходимы для выполнения этих операций можно узнать из таблицы.
Операция | Атрибуты дата-бенда | Тип вводимых данных |
---|---|---|
Сортировка | DataFileldOrder | Строчный (список полей, разделенных запятыми) |
Фильтрация | DataFilter | Строчный (выражение) |
Управление видимостью в печатном представлении | VisibleCondition | Строчный (выражение) |
Формирование древовидного списка | DataFieldTreeKey, DataFieldTreeParent | Строчный (названия ключевого поля и поля родителя, соответственно) |
Для сортировки данных дата-бенда используется свойство FieldOrder. Для него нужно указать названия полей, по которым выполняется сортировка. Поля в списке разделяются запятыми.
Для каждого из полей дополнительно можно указать порядок сортировки (по возрастанию ASC или по убыванию DESC). По умолчанию выполняется сортировка по возрастанию значений.
Фильтрация данных позволяет вывести в печатном представлении не все данные из таблицы элементов или возвращенные запросом, а только те, которые удовлетворяют заданным условиям.
Условие фильтрации должно соответствовать требованиям языка Transact SQL.
Для фильтрации данных укажите условие фильтрации в атрибуте DataFilter.
Для фильтрации данных потока можно использовать локальные SQL-запросы. Для выполнения локального запроса необходимо создать новый обработчик событий или использовать ранее созданный.
Для локального запроса необходимо использовать компонент TssFastReportDataSet
.
//Пример локального запроса для фильтрации данных TssFastReportDataSet(MasterData1.DataSet).LocalSQL := 'SELECT FROM Main WHERE <условие фильтрации>'
Управление видимостью данных, так же как и фильтрация, позволяет выводить в печатном представлении только те данные, которые удовлетворяют указанным пользователем условиям. В отличие от фильтрации, при управлении видимостью данных могут быть учтены и те данные, которые не выводятся в печатном представлении.
Для управления видимостью данных необходимо указать условие видимости в значении атрибута VisibleCondition.
С помощью атрибута VisibleCondition можно связать дата-бенды MasterData
и DetailData
. Например, в дата-бенде MasterData
будут выводиться атрибуты актов списания, а в дата-бенде DetailData
- элементы спецификаций этих документов.
В некоторых отчетах может возникнуть необходимость вывести некоторые данные в виде древовидного списка, например, при выводе рецепта составного продукта.
Чтобы правильно отобразить древовидный список, нужно указать значения двух атрибутов: DataFieldTreeKey и DataFieldTreeParent. Для атрибута DataFieldTreeKey нужно указать название ключевого поля, а для атрибута DataFieldTreeParent – название поля родительского элемента.
Для текстового объекта необходимо указать величину отступа от левой границы (атрибут TreeLevelMargin) и, при необходимости, текст, выводимый перед значением (атрибут TreeText).
Для вывода отчетов в стандартном стиле Tillypad в генератор отчетов включен компонент TssPageHeader
().
В заголовке такого печатного представления выводятся:
информация о печатном представлении: название печатного представления (отчета, документа и т.п.), сведения об организациях, выбранные значения фильтров.
служебная информация: номер текущей страницы и общее количество страниц, фамилия сотрудника, который вывел печатное представление на печать, дату и время вывода на печать.
логотип Tillypad.
Вид заголовка первой страницы отличается от вида заголовка на последующих страницах.
В заголовке первой страницы выводятся:
Название печатного представления.
Сведения об организациях.
Если данные отчета относятся к разным организациям, то выводится информация обо всех этих организациях.
Значения фильтров.
Выводятся все выбранные значения всех фильтров. Вывод значений каждого из фильтров начинается с новой строки.
Высота заголовка первой страницы позволяет вывести все значения.
В заголовках последующих страниц выводятся:
Название печатного представления.
Для вывода используется меньший размер шрифта, чем на первой странице.
Сведения об организациях.
Если данные отчета относятся к одной организации, то выводится информация о ней. А если данные отчета относятся к разным организациям, то выводится сообщение <разные организации> или <different organizations>.
Значения фильтров.
Выводятся значения всех фильтров на одной строке, через запятую.
Высота заголовка последующих страниц ограничена высотой блока служебной информации.
При использовании компонента TssPageHeader
можно управлять только выводом информации о печатном представлении и служебной информацией.
Изменение дизайна заголовка страницы невозможно.
В разделе описаны только атрибуты, которые используются для управления содержанием заголовка страниц.
DifferentOrganizationText – сообщение, выводимое на второй и последующих страницах печатного представления, если данные в нем относятся к различным организациям.
Для русскоязычных печатных представлений нужно выбрать значение <разные организации>, а для англоязычных – значение <different organizations>. Выбор вариантов значений для печатных представлениях на других языках не предусмотрен.
FilterNCaption – заголовок фильтра.
В заголовке печатного представления можно указать до 9 фильтров. Для каждого из фильтров в названиях полей FilterNCaption, FilterNDataSet, FilterNFieldName и FilterNFromCurrentRecord вместо символа N выводится порядковый номер фильтра от 1 до 9.
Выводится полужирным шрифтом. Если заданы значения для нескольких фильтров, то отступ слева для вывода значений всех фильтров будет выбран таким образом, чтобы полностью был выведен самый длинный заголовок фильтра.
FilterNDataSet – поток данных, из которого будут выводиться значения фильтра.
Выбор производится из списка поля. В него включаются все доступные потоки данных.
FilterNFieldName – имя поля, данные из которого будут выведены в заголовке печатного представления.
По умолчанию выводится поле, название которого оканчивается на _Name
. Но если в потоке несколько таких полей, то требуется указать, из какого поля следует выводить информацию.
FilterNFromCurrentRecord – признак необходимости вывода значений поля только из текущей записи.
Выбор значений производится из фиксированного списка True или False.
Если выбрано значение False, то в заголовке будут выведены все значения указанного поля, а если выбрано значение True, то только значение поля, относящееся к текущей записи.
Выбор значения поля для текущей записи используется в группированных печатных представлениях, когда для каждой группы должен быть сформирован отдельный отчет. Например, в печатных представлениях складских документов.
OrganizationCurrentRecord – признак необходимости вывода значений поля только из текущей записи.
Выбор значений производится из фиксированного списка True или False.
Если выбрано значение False, то в заголовке будут выведены сведения обо всех предприятиях, к которым относятся данные печатного представления, а если выбрано значение True, то только сведения об организации, относящейся к текущей записи.
OrganizationDataSet – поток данных, из которого будут выводиться сведения об организациях, к которым относятся данные печатного представления.
Выбор производится из списка поля. В него включаются все доступные потоки данных.
OrganizationFieldName – поле, из которого будут выводиться сведения об организациях, к которым относятся данные печатного представления.
PageNumeration – способ нумерации страниц в печатном представлении.
В поле можно выбрать значения pnAbsolutePageNo или pnLogicalPageNo. Если выбрано значение pnAbsolutePageNo, то в печатном представлении будет использована сквозная нумерация страниц. При этом на каждой странице печатного представления будут выводиться ее порядковый номер и общее число страниц. А если было выбрано значение pnLogicalPageNo – то будет использована логическая нумерация страниц, при которой для каждой группы нумерация начинается заново. В этом случае на каждой странице будут выводиться номер странице в группе и общее количество страниц в этой же группе.
Чтобы использовать логическую нумерацию нужно:
Использовать двухпроходный отчет. Для этого необходимо присвоить значение True атрибуту DoublePass объекта Engine.
У заголовка группы (компонент GroupHeader
), в которой нумерация должна начинаться заново, необходимо присвоить значение True атрибутам StartNewPage и ResetPageNumber.
PageTextFormat – формат сообщения для вывода номера текущей страницы и общего количества страниц в заголовке печатного представления.
Для русскоязычных печатных представлений необходимо выбрать значение Страница: %u из %u, а для англоязычных - значение Page: %u from %u. Выбор вариантов значений для печатных представлениях на других языках не предусмотрен
ReportCaption – заголовок печатного представления, выводимый на его первой и последующих страницах.
StretchMode – режим изменения высоты компонента в зависимости от его содержания.
Выбор значений производится из списка: smActualHeight, smDontStretch или smMaxHeight.
Для правильного отображения заголовка печатного представления необходимо выбрать значение smMaxHeight.
UserDataSet – поток данных, из которого будут выводиться фамилия и инициалы сотрудника, который вывел печатное представление на печать.
Выбор производится из списка поля. В него включаются все доступные потоки данных.
UserFieldName – поле, из которого будут выводиться фамилия и инициалы сотрудника, который вывел печатное представление на печать.
В некоторых отчетах или форматах печати экранных форм требуется с помощью одного печатного представления создавать несколько независимых отчетов. Например, в отчете по приходам по складам необходимо вывести отдельный отчет по каждому складу, а в списке расходных накладных формировать отдельные счета-фактуры для каждого из выбранных документов. Для этого необходимо использовать группированные печатные представления с логической нумерацией страниц. В таком печатном представлении в заголовке странице требуется выводить не все значения фильтров, а только относящиеся к текущей группе.
Для формирования такого печатного представления требуется:
Сделать печатное представление двухпроходным, присвоив значение True атрибуту DoublePass объекта Engine. Это требуется сделать для логической нумерации страниц.
У заголовка группы (компонент GroupHeader
), в которой нумерация должна начинаться заново, значение True необходимо присвоить атрибутам StartNewPage и ResetPageNumber.
Значения фильтров, по котором выполняется группировка, может возвращаться как в самом основном потоке отчета, так и в специально созданном потоке. Первая ситуация характерна для печатных представлений форматов экранных форм, вторая – для отчетов.
Если значения фильтров можно получить из основного потока, то для формирования группированного печатного представления достаточно:
в атрибуте FilterNDataSet указать название потока,
в атрибуте FilterNFieldName указать название поля, из которого будут получены значения фильтра.
атрибуту FilterNFromCurrentRecord присвоить значение True,
атрибуту FilterNCaption присвоить, если необходимо, значение для заголовка фильтра.
При использовании специального потока со значениями фильтра требуется на вкладке Code:
Создать глобальную переменную, например, FilterString
, и обработчик события OnBeforePrint
для компонента TssPageHeader.
В обработчике события необходимо предусмотреть фильтрацию специальных потоков по признаку группировки из основного потока, а также перезагрузку данных компонента TssPageHeader
.
var FilterString: String =''; procedure TssPageHeader2OnBeforePrint(Sender: TfrxComponent); begin if TssFastReportDataSet(MasterData1.DataSet).DisplayText('stor_ID') <> FilterStore then begin FilterStore := TssFastReportDataSet(MasterData1.DataSet).DisplayText('stor_ID'); // Фильтрация складов TssFastReportDataSet(Report.GetDataSet('Stores')) := 'SELECT FROM Main WHERE stor_ID='+FilterStore; // Фильтрация юридических лиц TssFastReportDataSet(Report.GetDataSet('OwnFirms')) := 'SELECT FROM Main WHERE stor_ID='+FilterStore; // Обновление данных в компоненте заголовка страниц TssPageHeader2.ReloadData; end; end;
В генератор отчетов включен компонент TfrxVideoFrame
(), позволяющий выводить видео в печатных представлениях.
Чтобы получить возможность воспроизводить видео в печатном представлении, откройте окно дизайнера, поместите компонент TfrxVideoFrame
на форму и укажите путь к файлу с видео в свойстве FileName
.
Формирование QR-кода.
BarcodeCommand(const Text:String=''; BarcodeType:string='QR'; PrintText:Boolean=false; const Overlay:string=''; Alingment:string='center'; Scale:Integer=1; Height:Integer=3):String;
Преобразование диапазона дат в строку.
FormatDateRange(DateBegin,DateEnd:TDateTime; Language:Integer=LANG_NEUTRAL):String;
Преобразование кода лицензии в строку.
LicenseKeyToString(Value: TGUID):String;
Преобразование суммы в строку.
MoneyToVerbal(Value:Extended; Options:Integer=MTVO_NONE; CurrencyType:Integer=CURRENCY_DEFAULT; Language:Integer=LANG_NEUTRAL):String;