Что сделать чтобы не показывался диалог?
В отчете есть диалог запроса периода.
У Бэнда(GroupHeader) стоит свойство разворачиваемый(DrillDown).
Отчет стоится все нормально но при каждом клике на группу
выводится диалог
Как сделать чтобы диалог вызывался один раз перед построением отчета
Если в обработчике прописать
procedure DialogPage1OnShow(Sender: TfrxComponent);
begin
if Engine.FinalPass then
DialogPage1.Visible := False;
end;
Все равно диалог вызывается.
У Бэнда(GroupHeader) стоит свойство разворачиваемый(DrillDown).
Отчет стоится все нормально но при каждом клике на группу
выводится диалог
Как сделать чтобы диалог вызывался один раз перед построением отчета
Если в обработчике прописать
procedure DialogPage1OnShow(Sender: TfrxComponent);
begin
if Engine.FinalPass then
DialogPage1.Visible := False;
end;
Все равно диалог вызывается.
Комментарии
отчет Drill down groups 97.fr3
Добавь диалог DialogPage1
туда же кнопку Button1 в свойствах ее ModalResult поставь mrOk
Запусти превью.
procedure DialogPage1OnShow(Sender: TfrxComponent);
begin
if Engine.FinalPass then
DialogPage1.Visible := False;
end;
Работает!!!
Сохраняем выходим из дизайнера.
Нажимаем кнопку превью.
Сколько раз диалог появился?
Я еще не смотрел дергает ли он запрос Но судя по всему дергает так как медленно группа открывается.
Версия последняя 4.7.3
А запрос будет дёргать, т.к. отчёт перестраивается заново
Можно сделать так:
- добавить в отчет переменную (не в скрипт , а в отчет).
- установить ее перед вызовом Preparereport (или showreport).
- установить Report.EngineOptions.DestroyForms := False.
- в скрипте проверять эту переменную и в зависимости от ее значения устанавливать Visible у диалога.
Выглядеть это будет приблизительно так:
В отчете создать переменную bFlag.
Код программы:
Скрипт:
Данные же все с сервера отфечены зачем по новой их все тянуть(А если запрос тяжелый)?
Если только датасет закрывается...
Отчеты лежат в БД в Блобах
Попробовал сделать так как выше - что-то не работает.
Может что я не правильно делаю?
Отчеты лежат в БД. Код который их вытаскивает - менять не могу.
97.fr3 - из стандартной демки
Report.EngineOptions.DestroyForms := False;
Report.Variables := True;
Report.ShowReport();
я его показывал не просто так, через скрипт сделать можно как предложил gpi (Report.EngineOptions.DestroyForms нужно устанавливать в False в обоих случаях, в демке это св-во по умолчанию True).
Но в примере предложенным gpi не учитывается, что отчет может перестраиваться повторно через preparereport.
Из дизайнера такой вариант будет работать (т.к. он перегружает шаблон), а вот при вызове preparereport нужно либо перезагружать шаблон самостоятельно, либо использовать вариант с переменной, которая устанавливается перед вызовом prepareport/showreport.
Если в отчете прописать
Сохранить его и запустить на просмотр FRDemo.exe - падет ничего не сказав.
вроде бы добился чтобы диалог показывался один раз. Ничего не меняя в клиенте
При вычислении выражений сначала проверяется список переменных отчета (т.к. он меньше и это в большинстве случаев экономит время), а последним идет список переменных скрипта.
Не используйте рекурсивных вызовов в переменных.
Добавил проверку на рекурсивный вызов переменных, теперь будет выдавать ошибку и завершать построение отчета.