|
"ОбработкаПрерыванияПользователя()" - как заставить работать?! | ☑ | ||
---|---|---|---|---|
0
mzelensky
21.02.13
✎
14:55
|
Доброго всем!
Бьюсь с этой проблемой и чет пока решения найти не могу. Имею примерно такой код: Процедура СформироватьНажатие(Элемент) //это обработчик нажатия на кнопку ... НужнаяМнеПроцедура() .. КонецПроцедуры Процедура НужнаяМнеПроцедура() //тут идут всяческие вычисления ... ОбработкаПрерыванияПользователя(); ... КонецПроцедуры Вот в таком случае "ОбработкаПрерыванияПользователя()" - не срабатывает! Читаем СП по сей феничке: Метод будет иметь действия только в тех случаях, когда допускается прерывание выполнения модулей. Прерывания выполнения допускается если оно инициировано определенным интерактивным действием пользователя. К таким действиям относятся: нажатие кнопки в форме; выбор пункта меню или кнопки командной панели в форме; выбор пункта меню или кнопки панели инструментов интерфейса; действия инициируемые обработчиками событий "Выбор" элементов управления. Выходит, что в произвольной процедуре/функции я не могу пользоваться обработкой прерывания. но как заставить ее работать??? На форуме уже нечто подобное постили и там народ пришел в выводу, что можно подключить обработчик ожидания и в нем через одно очень жирное и узкое место отлавливать "ОбработкаПрерыванияПользователя()". В моем случае этого сделать не получается (по крайней мере мои попытки к положительному результату не привели). Вопрос - как заставить систему обработать "ОбработкаПрерыванияПользователя()" и таки завершить работу алгоритма?! |
|||
1
EasyRider
21.02.13
✎
14:58
|
в цикл ее засунь и увидишь
|
|||
2
х86
21.02.13
✎
14:58
|
так наверное
|
|||
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) это в терминале если пользак
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |