Добрый день!
Проблема такая:
Есть достаточно сложный ard-отчет. Нужна возможность его прервать.
.form errpo_xls
.ard
...
 startNewVisual(vtRotateVisual,vfBreak+vfConfirm+vfTimer+vfThread,'Выгружаю отпуска.....',100);
...
.{ table t1
..
 if NextVisual()=false { stopVisual('',0); errpo_xls.fbreak; }
..
.}
.endforn
При нажатии кнопки "Прервать" визуализация прерывается, но на экране остается окно "Формирование Х отчета", которое я никаким образом не могу снять.
			
			
									
						
							Не получается прервать выполнение отчета
Модераторы: m0p3e, edward_K, Модераторы
Не получается прервать выполнение отчета
Кто сказал, что бесполезно биться головой об стену?!
			
						Re: Не получается прервать выполнение отчета
Может быть, fexit лучше вместо fbreak? Либо вот так попробовать:
			
			
									
						
										
						Код: Выделить всё
errpo_xls.fexit;
exit;
- 
				edward_K
 - Заслуженный деятель интернет-сообщества
 - Сообщения: 5189
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: SPB galaxy spb
 
Re: Не получается прервать выполнение отчета
И уж лучше restartvisual чем start - stop. У вас визуализация, что осталось на экране просто не знает, что ее прервали.
Если же делаете так, то уж сделайте цикл while и выйдите из него по какой нибудь переменной - чтобы отчет нормально заверщил свою работу.
Возможно в месте вызова ард отчета имеет сделать
if visualisationactive then stopvisual('',0).
А лучше делать на vip или FastReport.
			
			
									
						
										
						Если же делаете так, то уж сделайте цикл while и выйдите из него по какой нибудь переменной - чтобы отчет нормально заверщил свою работу.
Возможно в месте вызова ард отчета имеет сделать
if visualisationactive then stopvisual('',0).
А лучше делать на vip или FastReport.
Re: Не получается прервать выполнение отчета
errpo_xls.fexit; exit; - не помогает.
Проблема, похоже, в том, что внутри цикла по таблице t1 есть еще дюжина вложенных циклов по другим таблицам.
Когда я nextvisual вставила во все циклы, тогда визуализация прервалась, хотя Гал-ка еще какое-то время продолжала что-то делать, т.е. была недоступна для пользователя.
Если я все это переложу в vip, не возникнет ли там такая же проблема?
			
			
									
						
							Проблема, похоже, в том, что внутри цикла по таблице t1 есть еще дюжина вложенных циклов по другим таблицам.
Когда я nextvisual вставила во все циклы, тогда визуализация прервалась, хотя Гал-ка еще какое-то время продолжала что-то делать, т.е. была недоступна для пользователя.
Если я все это переложу в vip, не возникнет ли там такая же проблема?
Кто сказал, что бесполезно биться головой об стену?!
			
						- 
				edward_K
 - Заслуженный деятель интернет-сообщества
 - Сообщения: 5189
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: SPB galaxy spb
 
Re: Не получается прервать выполнение отчета
Код: Выделить всё
.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 wklFcom же заточен под управлениями событиями на vip. В нем самом обрабатывать прерывание не очень удобно, хотя и на vip использование переменой для информации о прерывании тоже полезно.
Re: Не получается прервать выполнение отчета
Пришлось превратить отчет в интерфейс, теперь прерывание отрабатывает нормально.
Спасибо!
			
			
									
						
							Спасибо!
Кто сказал, что бесполезно биться головой об стену?!