Многопоточность

Top  Previous  Next

FastReport может работать независимо в разных потоках, но имеется ряд особенностей:

 

- Нельзя создавать TfrxDBDataSet с одинаковыми именами даже в разных потоках, т.к. для поиска используется "глобальный список" и обращение всегда будет происходить к первому созданному TfrxDBDataSet(использование глобального списка можно отключить, по умолчанию активен);

 

- Если во врем выполнения отчета происходит изменение св-в объектов(для примера Memo1.Left := Memo1.Left + 10 в скрипте), то следует помнить, что при последующим выполнении если св-во   TfrxReport.EngineOptions.DestroyForms := False  шаблон отчета уже будет модифицирован и его необходимо заново загрузить или использовать TfrxReport.EngineOptions.DestroyForms := True. При восстановления из потока нельзя использовать интерактивные отчеты, т.к. объекты скрипта уничтожаются после восстановления, поэтому в некоторых случаях рациональней использовать TfrxReport.EngineOptions.DestroyForms := False и восстанавливать шаблон самостоятельно при следующем цикле построения.

 

При необходимости глобальный список,  по которому осуществляется поиск экземпляров TfrxDBDataSet можно отключить.

 

 

 

{DestroyForms можно отключить, если каждый раз восстанавливать отчет из файла или потока}

FReport.EngineOptions.DestroyForms := False;

FReport.EngineOptions.SilentMode := True;

{Данное св-во отключает поиск по глобальному списку}

FReport.EngineOptions.UseGlobalDataSetList := False;

{EnabledDataSets играет роль локального списка, нужно устанавливать до загрузки шаблона}

FReport.EnabledDataSets.Add(FfrxDataSet);

FReport.LoadFromFile(ReportName);

FReport.PrepareReport;