Имя: Пароль:
1C
 
Обработка прерывания пользователя
0 BeaViS
 
11.01.08
14:30
Хочется организовать такую обработку прерывания пользователем выполнения кода, чтобы прервано было не все выполние кода, а только текущий цикл.

Сам не придумал, м.б. кто изобретал подобное?
1 ОператорПК
 
11.01.08
14:36
а что пользователь знает в каком цыкле сейчас находится исполнение?
2 ShoGUN
 
11.01.08
14:37
(0) Зачем?
(1) Ну, при желании ему можно об этом сообщать...
3 BeaViS
 
11.01.08
14:40
(1) ????

Я знаю
4 BeaViS
 
11.01.08
14:41
(2) Сообщать нельзя ... в моем случае
5 Кураж
 
11.01.08
14:44
(0) не получится.
6 ShoGUN
 
11.01.08
14:44
(4) Что-то бредом отдает. Как можно управлять тем, о чем нет информации?
7 BeaViS
 
11.01.08
14:48
(6) Это технический форум, а не философский )) Мыслим ясно, излагаем четко, абстрагируемся от трансцендентального, оперируем конкретикой :)
8 ОператорПК
 
11.01.08
14:50
(7) 10 раз перечитай (7) :)))
9 Aloex
 
11.01.08
14:51
ОбработкаПрерыванияПользователя();
10 ShoGUN
 
11.01.08
14:51
(7) Ты объясни, чего ты хочешь! Ибо я честно говоря думаю, что на вопрос в текущей формулировке ответ "нет", т.к. в общем случае не зная момента выполнения нельзя предсказать результат выполнения кода. Понятно излагаю?
11 Salvador Limones
 
11.01.08
14:51
Бугога!!!
Оперируем конкретикой, но сообщать нельзя!!!
12 RomaH
 
naïve
11.01.08
14:52
о придумал ...
в теле
Вопрос("Выйти из цикла?",1)

Если Ответ Да - то Прервать
ну или там Перейти
13 Aloex
 
11.01.08
14:53
пока цикл

Перейти ~конец;
Конеццикла
~конец:
14 BeaViS
 
11.01.08
14:53
(4) Есть цикл, который может стать бесконечным (например, попытка записи в цикле, а данные заблокированы). Цикл должен крутиться, пока его не прервут. Вопросы к пользователю с предложением прервать цикл исключены. После прерывания цикла должен выполниться остальной код.
15 ShoGUN
 
11.01.08
14:54
(12) Жесть! :)
16 Кураж
 
11.01.08
14:56
Я всё же повторюсь, что это невозможно. Зачем разводить дискуссию?
17 Кураж
 
11.01.08
14:57
(14) Можно лишь ограничить такой цикл количеством попыток записи...
18 Aloex
 
11.01.08
14:57
(16) Возможно, смотри на конструкцию инструкции в (13).
19 ОператорПК
 
11.01.08
14:57
(14) приплыли.... а счетчик слабо сделать на попытку заблокировать объект?
20 ShoGUN
 
11.01.08
14:57
(16),(17) +1, и смысла в этом нету. Пользователь может на обед уйти.
21 Кураж
 
11.01.08
14:58
(18) ты не в теме.
22 ShoGUN
 
11.01.08
14:59
(18) А условие выхода из цикла какое, умник?
23 BeaViS
 
11.01.08
15:05
(16) Если этого нет в синтакс-помошнике, это не значит - невозможно.

В таких случаях надо  подумать, часто помогает :)
24 BeaViS
 
11.01.08
15:07
(19) сейчас так и сделано. Но хочется сделать вариант, в котором число попыток  неограничено.
25 Кураж
 
11.01.08
15:07
(23) Ладно. Если тебя не устраивает правда, можешь долбить дальше...
26 ShoGUN
 
11.01.08
15:09
(23) Еще раз говорю - по идее должен быть выход из цикла по условию. Но ЧТО ты собираешься ставить в условие?
27 ОператорПК
 
11.01.08
15:09
(24) после N попыток предлагай юзеру выйти из цыкла или пиши это (в Состояние())пока не прервет ффф чем проблема?
28 RomaH
 
naïve
11.01.08
15:09
(23) - тогда проверка флага нужна
но флаг придется делать не в текущем сеансе 1С
например запустить приложение в фоне которое отслеживает нажатие "хитрой комбинации клавишь" и пишет файл флага - в цикле проверяешь наличие
29 ShoGUN
 
11.01.08
15:11
(28) Извращение :)
30 zbv
 
11.01.08
15:11
А если обрабочик ожидания прикрутить?

мож взлетит...
31 ShoGUN
 
11.01.08
15:12
(27) Ему надо еще и код исполнять. Загвоздка на самом деле в отсутствии работы с устройствами ввода.
32 RomaH
 
naïve
11.01.08
15:14
(29) почему? есть другие варианты при наличии отсутсвия встроеного механизма?
33 BeaViS
 
11.01.08
15:14
(28) о, может этот цикл ввиде фонового задания оформить?
тогда флаг выхода из цикла можно будет и в этом сеансе установить ... ИМХО
34 ОператорПК
 
11.01.08
15:14
(31) а что предлагать юзеру прервать через Предупреждение("Внимание! объект заблокирован",3) или писать в состояние("Внимание! объект заблокирован") - это прервет исполнение кода?
35 Aloex
 
11.01.08
15:15
на наличие файла в цикле проверяй, изврат но работать будет.
36 BeaViS
 
11.01.08
15:15
(28) С помощью кнопки или "хитрой комбинации клавиш"
37 Кураж
 
11.01.08
15:16
(30) не, не будет в цикле работать.
А идея с параллельно запускаемым процессом для отслеживания прерывания и установки флага неплохая, если сделать красиво. Хотя конечно извращение. )
38 ShoGUN
 
11.01.08
15:17
(34) Нет, я говорю как собственно само прерывание будет происходить? Штатная возможность - одна - Ctrl-Break - прерывает исполнение кода. И усё.
39 ShoGUN
 
11.01.08
15:18
(32) Нету, но извращение же...
40 ShoGUN
 
11.01.08
15:19
+(38) Это я про состояние()
41 ОператорПК
 
11.01.08
15:21
(38) само прерывание если писать через состояние("Внимание! объект заблокирован")  то штатно и будет Ctrl-Break , а не штатно можно через вопрос()

Ответ=Вопрос("",); //(не помню синтаксис)
Если Ответ=ДА Тогда//(не помню синтаксис)
Прервать;
КонецЕсли;
42 Immortal
 
11.01.08
15:22
(0) схожий вопрос обсуждали..давно.
в общем в 8.0 можно покдлючить обработчик ожидания и в нём уже мутить..
т.е .надо чтобы при выходе из цикла  выполнилось условие для обработчика. и делай всё что хочешь.
43 RomaH
 
naïve
11.01.08
15:24
усовершенствуем сразу
рисуем приложение

перед циклом - запускаем его с неким ключем

- вешаем в трей

оно создает флаг (вот файл, или реестр или еще что - надо смотреть по быстродействию опроса его из 1С) и закрывается

или закрываем его из 1С если не востребовано

ну и про попытку исключение не забывать
44 ОператорПК
 
11.01.08
15:24
+(41) надо через вопрос() мутить.......
45 ShoGUN
 
11.01.08
15:25
(41) Документацию почитай.
Синтаксис:
ОбработкаПрерыванияПользователя()
Описание:
Предназначен для прерывания работы встроенного языка при нажатии пользователем клавиши Ctrl+Break.
Метод проверяет, была ли нажата пользователем клавиша Ctrl+Break. Если клавиша была нажата, то выполнение встроенного языка прекращается и выдается соответствующее сообщение.

И где тут можно впендюрить код?
46 BeaViS
 
11.01.08
15:27
(42) :) нашел ...
47 ОператорПК
 
11.01.08
15:31
(45) забей на ОбработкаПрерыванияПользователя()
по некоторому критерию определяем что объет давно блокирован (попробывали N раз блокирнуть не вышло) выдаем вопрос и по итогам ответа либо продолжаем пытаться с ним работать или выходим из цикла по средствам Прервать
48 BeaViS
 
11.01.08
15:32
(43) Да, это наверное самый разумный выход в моем случае ... либо фича в трее, либо в другом процессе использовать какую-нить обработку, которой буду формировать флаг остановки ... спасиб )
49 ОператорПК
 
11.01.08
15:34
(48) а что мешает формировать флаг остановки посредствам подщета неудачных попыток блокировать объект?
50 BeaViS
 
11.01.08
15:34
(48) т.е. в другом сеансе 1С
51 BeaViS
 
11.01.08
15:36
(49) ну что ты зациклился на этом счетчике?
А если нужно будет прервать раньше, чем достигли счетчика?
52 ОператорПК
 
11.01.08
15:37
(51) ОбработкаПрерыванияПользователя()
53 BeaViS
 
11.01.08
15:52
(52) абзац ...
54 ShoGUN
 
11.01.08
15:55
(53) Ты, между прочим, зациклился на "управлении пользователем". Ни к чему оно тут именно в таком виде. Пользователь должен управлять входными параметрами ДО исполнения кода. А процессом исполнения должен управлять программист.