FastReport: работа с пользовательскими функциями

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

Все функции в дизайнере FastReport распределены по категориям и делятся на:
1) математические
2) агрегатные
3) текстовые
4) конвертирование
5) прочие
6) дата и время
7) форматирование
И так, приведу пример добавления пользовательской функции Округления до нескольких знаков после запятой. Полный аналог функции RoundTo из модуля Math.pas. В стандартной комплекте FastReport есть пользовательская функция Round – округление до целого числа, но не редко требуется вывести результат, чтобы он был округлён до определённого знака. Для этого я написал функцию MyRoundTo, выглядит она следующим образом

 function MyRoundTo(X:Extended; N: Integer): Extended;
var
i,i1: Integer;
begin
Result := X;
i1 := 1;
for i := 1 to N do
i1 := i1*10;
result := Round(Result*i1)/i1;
end;

Подключение функций производится через интерфейс скриптовой библиотеки FastScript, входящей в состав FastReport. Для добавления нашей функции в FastReport, необходимо отредактировать файл fs_isysrtti.pas, находящийся в ./FastReports/FastReport 4/FastScript. Именно в этом файле и описаны все пользовательские функции.
Преступим к редактированию файла fs_isysrtti.pas. Откроем его с помощью любого текстового редактора (я использовал текстовый редактор Bred). После секции implementation вставим код нашей пользовательской функции, описанный выше

Для того, чтобы наша функция появилась в списке доступных в дизайнере отчётов, необходимо её добавить в конструкцию constructor TfsSysFunctions.Create следующим образом AddMethod(‘function MyRoundTo(X:Extended; N: Integer): Extended’, CallMethod6, FCatMath)

Далее, найдём поиском по документу функцию CallMethod6 и добавим следующий код

После всех сделанных изменений, сохраним файл. После чего необходимо перекомпилировать исходники скриптовой библиотеки FastScript. Для этого, запускаем ReCompile.exe из корневой папки FastReport, в пункте What you want to do, выбираем Recompile on packages и нажимаем кнопку Compile (при компиляции IDE должна быть закрыта).

После компиляции, откроем дизайнер FastReport, перейдём на вкладку Functions и увидим, что списке функций появилась наша функция

Попробуем использовать нашу функцию на простом примере. К примеру, необходимо округлить число -2.656654 до 3-х знаков после запятой, а число -5.75656324 до 5-ти знаков после запятой. Сделаем, как показано на рисунке ниже

и нажмём на просмотр

Видим, что всё работает как положено

Copyright© 2009 Савельев Андрей Специально для reportingfor.info

Comments are closed.