Проблема: Как добавить пользовательские переменные в отчет FastReport’а.
Инструментарий: Delphi XE4, FastReport 4
Решение: Переменная это полезная вещь которой можно присвоить значение или выражение, которое будет автоматически вычисляться при обращении к ней. Конечно мы можем в отчет добавить переменные с помощью визуального редактора, пользуясь окном «Дерево данных», но нам этот подход не подходит, поскольку нам нужно динамически добавить нужные данные в отчет с программы. Ссылка на список переменных отчета хранится в свойстве TfrxReport.Variables.
Если у Вас на форме размещен компонент frxReport1, тогда обратится к списку переменных можно так:
frxReport1.Variables
Для создания списка вручную надо выполнить следующие шаги:
- очистить список
frxReport1.Variables.Clear
- создать категорию. Переменная от категории отличается только пробелом перед названием. Если он есть — тогда это категория, иначе переменная.
frxReport1.Variables[' ' + 'My Category 1'] := Null;
- создать переменные (Название категории указывается без пробела).
frxReport1.Variables.AddVariable('My Category 1', 'My Variable 1', 1);
frxReport1.Variables.AddVariable('My Category 1', 'My Variable 2', 'Текст 1');
- повторить шаги 2 и 3 для создания других категорий.
Чтобы просмотреть переменные нужно открыть дизайнер FastReport’a и открыть пункт меню Отчеты — Переменные, в результате откроется окно в котором можно посмотреть доступные переменные Рис. 1
Для удаления категории есть метод DeleteCategory
frxReport1.Variables.DeleteCategory('My Category 1');
Для удаления переменной есть метод DeleteVariable
frxReport1.Variables.DeleteVariable('My Variable 1');
Пример: Для демонстрации описанного, я создал тестовый проект, который можно скачать и посмотреть на GitHub. (При написании проекта использовал Delphi XE4). PS: Есть прекрасная онлайн документация, в которой описаны все манипуляции которые можно произвести для работы с пользовательскими переменными. Да и еще, создавайте переменные после того как отчет загружен, а не до загрузки (просто были прецеденты) 🙂