Статьи и заметки

Lazarus, LazReport и вычисляемые поля
Вот и настал тот день, когда мне пришлось столкнуться с подготовкой отчётов. При разработке программ в Delphi я использовал в разное время QuickReport, FreeReport и FastReport. Для Lazarus особого выбора не было - либо рисовать отчеты вручную на канве принтера, либо использовать LazReport. Времени для подготовки было в обрез, поэтому я выбрал LazReport.
Сформировать отчёт получилось без особых проблем, так как LazReport сделан на основе FastReport и имеет аналогичный дизайнерский интерфейс. Но вот при заполнении отчёта данными возникла проблема, так как компонент, предоставлявший данные (TSQLQuery), похоже не знал о таком понятии, как вычисляемые поля. Поиск в интернете и эксперименты результатов не дали, хранить в БД данные, которые можно получить вычислением, мне показалось неправильным. Поэтому я решил воспользоваться средствами, предоставляемыми LazReport. Способов как минимум два:
  • Формулы, которые можно вставлять в отчёт.
  • Переменные, которые можно заполнять в run-time.
Я остановился на втором варианте, так как в формулах не было возможности использовать оператор IF. С помощью редактора переменных создал новую группу и добавил новую переменную. В дизайнере отчётов меню File/Variables list..., далее кнопка Variables. Группы задаются в строках без отступов, переменные - с отступами. После этого заданные переменные можно вставлять в отчеты наряду со встроенными переменными и полями из баз данных.
Для заполнения своих переменных пишем обработчик события GetValue:

procedure TFormReports.frReportProtocolGetValue(const ParName: String; var ParValue: Variant);
begin
if ParName <> 'Res' then Exit;
if SQLQuery.FieldByName('result').AsInteger > 0 then
ParValue:= 'Годен'
else
ParValue:= 'Не годен';
end;


После этого всё работает так, как нам надо.

Суворков Василий
28.06.2007 г.



© 2007-2012 ООО "Волна-софт".
Логотип ООО "Волна-софт"


Rambler's Top100 hosted by firstVDS