Имя: Пароль:
1C
1С v8
"ОбработкаПрерыванияПользователя()" - как заставить работать?!
0 mzelensky
 
21.02.13
14:55
Доброго всем!
Бьюсь с этой проблемой и чет пока решения найти не могу.

Имею примерно такой код:

Процедура СформироватьНажатие(Элемент) //это обработчик нажатия на кнопку

...

НужнаяМнеПроцедура()

..

КонецПроцедуры

Процедура НужнаяМнеПроцедура()

//тут идут всяческие вычисления

...

ОбработкаПрерыванияПользователя();

...

КонецПроцедуры

Вот в таком случае "ОбработкаПрерыванияПользователя()" - не срабатывает! Читаем СП по сей феничке:

Метод будет иметь действия только в тех случаях, когда допускается прерывание выполнения модулей.
Прерывания выполнения допускается если оно инициировано определенным интерактивным действием пользователя. К таким действиям относятся:
нажатие кнопки в форме;
выбор пункта меню или кнопки командной панели в форме;
выбор пункта меню или кнопки панели инструментов интерфейса;
действия инициируемые обработчиками событий "Выбор" элементов управления.


Выходит, что в произвольной процедуре/функции я не могу пользоваться обработкой прерывания. но как заставить ее работать??? На форуме уже нечто подобное постили и там народ пришел в выводу, что можно подключить обработчик ожидания и в нем через одно очень жирное и узкое место отлавливать "ОбработкаПрерыванияПользователя()". В моем случае этого сделать не получается (по крайней мере мои попытки к положительному результату не привели).

Вопрос - как заставить систему обработать "ОбработкаПрерыванияПользователя()" и таки завершить работу алгоритма?!
1 EasyRider
 
21.02.13
14:58
в цикл ее засунь и увидишь
2 х86
 
21.02.13
14:58
так наверное
Для каждого KKK из НаборЛЛЛ Цикл

ОбработкаПрерыванияПользователя();

.... вычисления ...
3 mzelensky
 
21.02.13
14:59
(1) (2) она у меня и так в циклах - не работает!
4 mzelensky
 
21.02.13
15:00
Хорошо, вот так:

Процедура НужнаяМнеПроцедура()

//тут идут всяческие вычисления


...
Для каждого к1 из кк цикл

ОбработкаПрерыванияПользователя();

КонецЦикла;

...

КонецПроцедуры


на самом деле там вложенностей больше, но я "ОбработкаПрерыванияПользователя()" натыкал на каждом уровне цикличности - не срабатывает!
5 EasyRider
 
21.02.13
15:01
прерываешь надеюсь нажатием ctrl+break?
6 mzelensky
 
21.02.13
15:03
(5) :) из разетки выдергиваю - все-равно не прекращается :)

конечно ctrl+break
7 Fedot200
 
21.02.13
15:04
(6) можно еще Ctrl+C ИМХО
8 mzelensky
 
21.02.13
15:07
(7) что-то первый раз слышу про "Ctrl+C"...
9 EasyRider
 
21.02.13
15:15
(6)ноутбук?
10 Fedot200
 
21.02.13
15:21
(8) да, вроде не работает
11 Defender aka LINN
 
21.02.13
15:21
(6) Окно 1С-то активно?
12 Fedot200
 
21.02.13
15:22
по теме, может поможет http://infostart.ru/public/16159/
13 МастерВопросов
 
21.02.13
15:23
(0) Процедура НужнаяМнеПроцедура()
выполняется на сервере небось?
14 mzelensky
 
21.02.13
15:50
(11) ДА!
15 mzelensky
 
21.02.13
15:50
(13) У меня локальная база в обычном режиме! Процедура находится в форме.
16 mzelensky
 
21.02.13
15:51
еще варианты глупых вопросов?!
17 mzelensky
 
21.02.13
15:54
(12)

"Проблему можно решить несколькими способами: обновление драйвера, использование экранной клавиатуры и т.п. Также можно воспользоваться программой VKey, которая позволяет синтезировать нажатие клавиши с указанным виртуальным кодом при нажатии определенной пользователем "горячей клавиши"."

- уже думал над чм-то подобным. Вот так можно посадить горячую "необычную" горячую клавишу:

Элементыформы.Кнопка1.СочетаниеКлавиш = ЗначениеИзСтрокиВнутр("{""#"",69cf4251-8759-11d5-bf7e-0050bae2bc79,1," + Символы.ПС + "{0," + 33 + "," + 8 + "}" + Символы.ПС + "}");

НО, что меня смутило - приложение то висит (ну т.е. выполняется). Будет ли вообще поймано подобное нажатие клавишь программой?!
18 ОчкарикСлава
 
21.02.13
15:55
... (5) :) из разетки выдергиваю - все-равно не прекращается :)


у тебя ноутбук штоле ?
:)
19 mzelensky
 
21.02.13
15:56
(18) Да пошутил я это :)
20 mzelensky
 
21.02.13
15:56
(19) + "Эти 1С-ки такие 1С-ки" (С)
21 ОчкарикСлава
 
21.02.13
15:57
(19) так и я пошутил, невидно разве?
22 Fedot200
 
21.02.13
15:58
Для л = 1 По 1000 Цикл
       ОбработкаПрерыванияПользователя();
       Сообщить("Пытаюсь прерваться, беать!!!!!!!!!!!!!!1");
   КонецЕсли;    
Не смог прерваться. Когда поставил значение 100 000 смог прерваться, по ощущениям где-то в середине и то не каждый раз.
Правда делал в это на серваке в терминальной сессии.
23 mzelensky
 
21.02.13
15:59
народ, давайте по теме плиз! Реально проблема - как реализовать "завершение алгоритма" (естественно без срубания процесса через диспетчер)?!
24 Fedot200
 
21.02.13
15:59
(23) а зачем тебе его надо рубить?
25 mzelensky
 
21.02.13
16:00
(22) а код в какой процедуре выполняется? В процедуре события (ну там по кнопочке) или в какой-то произвольной?!
26 mzelensky
 
21.02.13
16:01
(24) потому что у меня очень длительный процесс возможен и порой нужно его прекратить не дожидаясь его логического завершения. При этом срубать процесс через диспетчер не хочется.
27 Fragster
 
гуру
21.02.13
16:02
у меня так вообще почти никогда не срабатывает
28 mzelensky
 
21.02.13
16:03
(21) ааааа, ну тогда НЕТ, не НОУТ - на "siemens a35" тестю
29 Goggy
 
21.02.13
16:03
(19) "То неудобное чувство, когда ты настолько тонко пошутил, что тебя приняли за идиота..." ®Демотиваторы
хД
30 mzelensky
 
21.02.13
16:04
(27) как победить?!
31 ОчкарикСлава
 
21.02.13
16:07
(28) как ты туда 1С поставил?
программаторм флэш шил?
32 Fedot200
 
21.02.13
16:09
(26) если для отладки, то можно рубить по счетчику.
(25) В модуле отчета в процедуре которая вызывается из другой процедуры по кнопке, вообщем вот

Процедура Сформировать(Кнопка) Экспорт //это в форме отчета
   
СформироватьОтчет(ЭлементыФормы.ТабличныйДокумент);
   
КонецПроцедуры

и уже в процедуре СформироватьОтчет в модуле отчета код (22)
33 mzelensky
 
21.02.13
16:12
(32) "если для отладки, то можно рубить по счетчику" - не для отладки. Чтобы пользователь мог сбивать работу а не сидеть тупо в монитор глядя и ждать по несколько часов.

Ну, у меня вообще не срабатывает :(
34 Fedot200
 
21.02.13
16:43
(33) Ctrl+Alt+End --> Завершение сеанса.
35 Fedot200
 
21.02.13
16:43
+(34) это в терминале если пользак
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший