Не получается прервать выполнение отчета

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Не получается прервать выполнение отчета

Сообщение s2176 »

Добрый день!
Проблема такая:
Есть достаточно сложный ard-отчет. Нужна возможность его прервать.

.form errpo_xls
.ard
...
startNewVisual(vtRotateVisual,vfBreak+vfConfirm+vfTimer+vfThread,'Выгружаю отпуска.....',100);
...
.{ table t1
..
if NextVisual()=false { stopVisual('',0); errpo_xls.fbreak; }
..
.}
.endforn
При нажатии кнопки "Прервать" визуализация прерывается, но на экране остается окно "Формирование Х отчета", которое я никаким образом не могу снять.
Кто сказал, что бесполезно биться головой об стену?!
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Re: Не получается прервать выполнение отчета

Сообщение RAJAH »

Может быть, fexit лучше вместо fbreak? Либо вот так попробовать:

Код: Выделить всё

errpo_xls.fexit;
exit;
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Не получается прервать выполнение отчета

Сообщение edward_K »

И уж лучше restartvisual чем start - stop. У вас визуализация, что осталось на экране просто не знает, что ее прервали.
Если же делаете так, то уж сделайте цикл while и выйдите из него по какой нибудь переменной - чтобы отчет нормально заверщил свою работу.
Возможно в месте вызова ард отчета имеет сделать
if visualisationactive then stopvisual('',0).
А лучше делать на vip или FastReport.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: Не получается прервать выполнение отчета

Сообщение s2176 »

errpo_xls.fexit; exit; - не помогает.
Проблема, похоже, в том, что внутри цикла по таблице t1 есть еще дюжина вложенных циклов по другим таблицам.
Когда я nextvisual вставила во все циклы, тогда визуализация прервалась, хотя Гал-ка еще какое-то время продолжала что-то делать, т.е. была недоступна для пользователя.
Если я все это переложу в vip, не возникнет ли там такая же проблема?
Кто сказал, что бесполезно биться головой об стену?!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Не получается прервать выполнение отчета

Сообщение edward_K »

Код: Выделить всё

.var
 wkl:boolean;
.endvar
.begin
 wkl:=(t1.getfirst table0=0)
 end.
.{ while wkl
.....
.begin
  wkl:=(t1.getnext table=0)
 if not nextvisual wkl:=false
 end.
.} // while wkl
На vip нормально работают функции break (прерывание цикла), exit (выход из процедуры) - вам этого вполне хватит. Делаете вывод в процедуре или в функции и все. StartNewVisual - StopVisual и другие аналогичные пары, которые нужно выполнить независимо от прерывания, делаете в месте вызова этой процедуры, а не в ней самой.
Fcom же заточен под управлениями событиями на vip. В нем самом обрабатывать прерывание не очень удобно, хотя и на vip использование переменой для информации о прерывании тоже полезно.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: Не получается прервать выполнение отчета

Сообщение s2176 »

Пришлось превратить отчет в интерфейс, теперь прерывание отрабатывает нормально.
Спасибо!
Кто сказал, что бесполезно биться головой об стену?!
Ответить