Имя: Пароль:
1C
 
Как прервать выполнение процедуры?
0 anna_pas
 
23.05.08
11:32
Подскажите, как прервать выполнение процедуры, если время выполнения превысило заданный интервал? При этом процедура запускается при помощи ОткрытьФормуОтчета()?
1 Irbis
 
23.05.08
11:33
Читать текущее время сравнивать с временем запуска
2 anna_pas
 
23.05.08
11:34
Вопрос не в том как посчитать время! А как прервать выполнение процедуры?
3 Irbis
 
23.05.08
11:36
Возврат
4 Guk
 
23.05.08
11:35
Возврат. Пипец...
5 FreeFin
 
23.05.08
11:45
Много лет назад задавал вопрос о прерывании "тяжелого" Запроса, во время его выполнения в обработке/отчете (не на группировках после, а именно в момент "Выполняется...". А есть ли способ?
6 Guk
 
23.05.08
11:46
(5) эскейп...
7 FreeFin
 
23.05.08
11:56
(6) Нет, по эскапу Запрос не прерывается.
8 Guk
 
23.05.08
12:00
(7) гонишь...
9 levlvov
 
23.05.08
12:02
кнопка POWER
10 FreeFin
 
23.05.08
12:03
(8) А попробуй. Пока "Выполняется обработка...", только клавишу в стол не забей )))
11 levlvov
 
23.05.08
12:06
(10) я и говорю не эскайп, а кнопка POWER
12 FreeFin
 
23.05.08
12:09
(11) глубину шутки все уже поняли, повторяться не надо.
13 anna_pas
 
23.05.08
12:13
Так я понимаю ответ на мой вопрос - никак?
14 FreeFin
 
23.05.08
12:30
(13) Почему никак?
Можно попробовать, запустив в обработке некую "сканирующую" конструкцию (с Формат, лень искать)

Процедура Сформировать()
Секунд=_GetPerformanceCounter()/1000;
Часов=Цел(Секунд/3600);
СекОстМин= Секунд%3600;    
Минут=Цел(СекОстМин/60);
Сек=СекОстМин%60;
Пол=Сек+Минут*60+Часов*3600;
Если Часов<10 Тогда
Часов="0"+СокрЛП(Часов);
Иначе
Часов=СокрЛП(Часов);    
КонецЕсли;
Если Минут<10 Тогда
Минут="0"+СокрЛП(Минут);
Иначе
Минут=СокрЛП(Минут);    
КонецЕсли;
Если Сек<10 Тогда
Сек="0"+СокрЛП(Сек);
Иначе
Сек=СокрЛП(Сек);    
КонецЕсли;
Время=Часов+":"+Минут+":"+Сек;
Сообщить(Время);
КонецПроцедуры
//***********
Процедура ПриОткрытии()
Форма.ОбработкаОжидания("Сформировать",10);
КонецПроцедуры


Задать интервал опроса, и по разнице от заданного вываливаться в

Возврат
СтатусВозврата(0
или Форма.Закрыть(0)
в зависимости от состояния выполнения процедур в форме
15 FreeFin
 
23.05.08
12:36
+14 хотя сильно чото сомневаюсь, что оно прервет выполняемую процедуру, тут чот как-то иначе мутить надо )))
Прочем, как время посчитать=пойдет.
16 dk
 
23.05.08
12:48
(13) Надо различать
1) прервать процедуру
2) прервать выполняемую команду
---
1) Прервать можно, просто навтыкать условия на время в разных местах процедуры
2) программно нельзя, только интерактивно (это если без извратов)
17 FreeFin
 
23.05.08
13:02
(16) Да ладно, неужели

WshShell=CreateObject("WScript.Shell");
WshShell.SendKeys("{ESC}");

все еще изврат?
18 dk
 
23.05.08
13:25
(17) В контексте (16) - да, изврат
Можно узнать из какого места эту команду собрался запускать? :)
19 FreeFin
 
23.05.08
15:48
(18) Извините, уезжал )
Я понимаю, что псевдо-интерактивно вовсе и не надо (не зачем), но вот пример (извратный, с прерыванием выполнения процедуры по эскейп, через 10 секунд, не совсем корректно разницу времени считает. но это не принципиально):

Перем Ждем,Часов,Минут,Сек;
//********
Процедура Рвать()
WshShell=CreateObject("WScript.Shell");
WshShell.SendKeys("{ESC}");
WshShell.SendKeys("{Enter}");
WshShell.SendKeys("{ESC}");
КонецПроцедуры    
//*******************************************
Процедура Время(Секунд)
Секунд=_GetPerformanceCounter()/1000;
Часов=Цел(Секунд/3600);
СекОстМин= Секунд%3600;    
Минут=Цел(СекОстМин/60);
Сек=СекОстМин%60;
Пол=Сек+Минут*60+Часов*3600;
Если Часов<10 Тогда
Часов="0"+СокрЛП(Часов);
Иначе
Часов=СокрЛП(Часов);    
КонецЕсли;
Если Минут<10 Тогда
Минут="0"+СокрЛП(Минут);
Иначе
Минут=СокрЛП(Минут);    
КонецЕсли;
Если Сек<10 Тогда
Сек="0"+СокрЛП(Сек);
Иначе
Сек=СокрЛП(Сек);    
КонецЕсли;
Время=Часов+":"+Минут+":"+Сек;
Сообщить(Время);
КонецПроцедуры    
//*********
Процедура Сформировать()
Секунд=_GetPerformanceCounter()/1000;
Время(Секунд);
НачСек=Число(Сек);
Блин=2;    
Для Ном=1 По 1000000000000 Цикл
Блин=Блин*2;
Секунд=_GetPerformanceCounter()/1000;

Время(Секунд);
Если (Число(Сек)-НачСек)>Ждем Тогда
Рвать();    
КонецЕсли;    
КонецЦикла;    
КонецПроцедуры
Ждем=10;


Разница между
Прервать;
СтатусВозврата(0);
Возврат;

Есть или нет?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс