Имя: Пароль:
1C
 
прерывание обработки Esc, как отследить?
0 Бешенная Нога
 
25.01.06
12:17
сабж
1 Парижская фанера
 
25.01.06
12:20
Вроде Adhook+ умеет отрубать Esc.
2 Бешенная Нога
 
25.01.06
12:22
да мне не надо отрубать,
мне надо отсделить прерывание обработки,
и после этого "кое-что сделать".
3 Волшебник
 
модератор
25.01.06
12:23
(2) Так юзер прервал или не прервал обработку, если после прерывания выполняется какой-то программный код?
4 GrayT
 
25.01.06
12:26
А выставить флажок при нормальном обновлении + реквизит на форму с проверкой флажка + обновление формы при начале работы?
5 Вадим1С
 
25.01.06
12:26
(3) после прерывания выполняется код платформы 1С v77
6 Бешенная Нога
 
25.01.06
12:26
юзер прерывает обработку и после этого должен
сработать код
7 smaharbA
 
25.01.06
12:27
Без обработки ожидания ежесекундной и какогонибудь метода нахождения ласткея невыйдет, не считая методов типа задержки в цикле...ну еще можно
Перем Выполнение;

...
Обработка
Выболнение=1;
...
Если ПустоеЗначение(Выполнение)=1 Тогда
Ну чтото в этом роде...
8 Вадим1С
 
25.01.06
12:28
С отработкой событий в 1С все очень плохо
9 Парижская фанера
 
25.01.06
12:29
(2) А не проще запретить и не парится?

(8) Ага. Особенно открыв обработку из другой, причем первая открыта модально.
10 smaharbA
 
25.01.06
12:30
Не, конечно можно сделать, но тока не 1С-совместимо, зато железно...
Думаю что можно без ВК(Ну или с Псевдо-ВК ;))...
11 Бешенная Нога
 
25.01.06
12:31
ну так как?
12 Парижская фанера
 
25.01.06
12:32
(10) Ну дак ВК будет генерить ВнешнееСобытие, а оно в случае (9.2) не перехватывается...
13 NS
 
25.01.06
12:34
Ищем у MSZSUZ-а....
Запрет, и отслеживание нажатия ESC
14 NS
 
25.01.06
12:34
(+13) Есно штатно.
15 GrayT
 
25.01.06
12:34
Чем вариант 4 не подходит? Нормально отлавливается...
Перем Флаг;
//_____________________________________________________________________________
Функция Проверить()
     Предупреждение(Флаг);
КонецФункции //Проверить
//*******************************************
Процедура Сформировать()
   //Форма.Обновить();  //Даже это не к чему
   Флаг = 0;        
   Для сч = 1 по 100 Цикл
       Сообщить(сч);
   КонецЦикла;
   Флаг =1
КонецПроцедуры

Проверить вызывается из текстового реквизита на форме.
16 smaharbA
 
25.01.06
12:35
(11) В обработке ожидания на форме определять ласткей через офис(может АПИ применю, а мож и так обойдусь) и все...
17 GrayT
 
25.01.06
12:36

Перем Флаг;

//_____________________________________________________________________________
Функция Проверить()
     Предупреждение(Флаг);
КонецФункции //Проверить
 
//*******************************************
Процедура Сформировать()
   //Форма.Обновить();
   
   Флаг = 0;        
   Для сч = 1 по 100 Цикл
       Сообщить(сч);
   КонецЦикла;
   Флаг =1
КонецПроцедуры


Дурацкая форматилка :(
18 NS
 
25.01.06
12:36
19 NS
 
25.01.06
12:37
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=116&lid=1339
Ссылка прямо на разработку.
20 smaharbA
 
25.01.06
12:37
(13)-(15) да и (7) хорошо, но когда циклы вложенные, фих прервешь/отследишь, жмакать придется до апупения...
21 GrayT
 
25.01.06
12:39
(20)Я так понял с прерыванием у него проблем нет. Проблемы с тем как это отследить
22 Бешенная Нога
 
25.01.06
12:44
(19)  а мне теперь на Т1С в попрошайку?
или кто-то из местных подсобит?
23 NS
 
25.01.06
12:46
(22) Похоже там архив битый - у меня не распаковывается...
Отпишись автору, или в аську - у него  33993114
24 GrayT
 
25.01.06
12:54
(23)Архив прекрастно лечится. Но увы - ни чего нового я придумать не смог....
(22)Могу скинуть. Не считая прогресс бара там 17
25 Бешенная Нога
 
25.01.06
12:55
fanils@mail.ru
26 NS
 
25.01.06
12:56
(24) Как?
27 Бешенная Нога
 
25.01.06
12:59
(24) ну так поделишься?
28 GrayT
 
25.01.06
13:00
(25)Ушло
(26)Как вылечил? WinRar'ом. Внутри "Проверка прерывания на ESC.ert"
29 NS
 
25.01.06
13:02
(27) Ушло.
30 NS
 
25.01.06
13:02
(28) Спасибо, разобрался ;-)) Заодно 3.51 скачал.
31 Бешенная Нога
 
25.01.06
13:02
(29) спасибо
32 Прохожий
 
25.01.06
13:03
(5) Следовательно этот код, который "выполняется после прерывания выпонения" должен содержаться где угодно, но только не в самой обработке, поскольку после прерывания выполнение прекращается.
Конфу править надо. ИМХО, это не есть гуд.
А изменить алгоритм обработки совсем нельзя? Чего она такого делает? Что нужно "довернуть" если прервано по ESC? Похоже на кривизну самого алгоритма обработки...
33 GrayT
 
25.01.06
13:04
(30)Ну у меня и 3.0 справился :)
34 NS
 
25.01.06
13:06
(32) Ничего подобного. Форма.ОбработкаОжидания()
Либо текст на форме, с процедурой проверки в дополнительно.
35 NS
 
25.01.06
13:06
(33) Да я перед тем как справлятся посмотрел версию - оказалось 3.40 - решил сначала обновится.
36 Токс
 
25.01.06
13:11
Запускаю 2 обработки...
Как сделать, чтоб одна на Еск не реагировала?
37 NS
 
25.01.06
13:15
(36) Одновременно?
38 Токс
 
25.01.06
13:22
(36) да
39 NS
 
25.01.06
13:23
(38) В одном сеансе?
40 Токс
 
25.01.06
13:32
(39) Да. Та старая фишка... первым при работе запускаем обработку и она крутится никому не мешая, но нажатый Еск первым делом обламывает её...
Открыта форма Документа - выйти по Еск не даёт, или запущена другая обработка...
41 NS
 
25.01.06
13:40
(40) А по какому признаку ты определяешь, какая форма должна закрыться/ прекратить расчеты по ESC?
У тебя цикл через текст на форме, Форма.ОбработкаОжидания, либо форма.Закрыть()?
42 Токс
 
25.01.06
13:44
(41) Цикл в ПриОткрытии() первой обработки, её формы вообще не видно.
43 NS
 
25.01.06
13:44
(42) Так если цикл в приОткрытии - как ты другую форму открываешь?
44 GrayT
 
25.01.06
13:50
(43)Ты попробуй. Она фоном висит, прада работет только мышь и ESC
45 NS
 
25.01.06
13:52
(44) Ничего не понял.
Создаю обработку.
В ней приоткрытии()
Пока 1=1 цикл
КонецЦикла
И пока она работает я смогу другие формы открывать?
46 GrayT
 
25.01.06
13:54
(45)Вставь для наглядности Сообщить и наслаждайся :)
Я сам прибалдел, когда мне Рупор это показал.
47 Токс
 
25.01.06
13:55
(43) Я не знаю, кто автор сего чудного открытия, но можешь сам попробовать...
Процедура ПриОткрытии() //какого-нето внешнего отчета
   к=1;
   Пока к<>0 Цикл
       Сообщить(к);
       к=к+1;
   КонецЦикла;    
КонецПроцедуры      

Запустил 1С и первым делом Файл->Открыть - эту обработку
Дальше работай... и она работать будет... но нажатый Еск всё портит...
48 GrayT
 
25.01.06
13:55
+46 Если не ошибаюсь это прокатывает только со внешним.
49 romix
 
модератор
25.01.06
13:57
В 8.0 можно обработать Ctrl-Break нормально, а в 7.7 - не знаю.
Может, клавиши как-то перехватывать...

А вообще что именно нужно сделать в момент прерывания по ESC?
Если закрыть файл или деинициализировать объект, то это можно сделать при начале работы отчета и при закрытии.
50 GrayT
 
25.01.06
13:59
(49)Ром, анекдот знаешь про лося, который каждый раз после того говорил "С добрым утром"
51 NS
 
25.01.06
14:00
(47) Попробую. А несколько внешних отчетов можно так запустить?
52 GrayT
 
25.01.06
14:05
(51)Только первый
53 Токс
 
25.01.06
14:07
(51) Один за другим - много, но работать в данный момент будет последний открытый... по мере закрытия - продолжает работать предыдущий...
54 NS
 
25.01.06
14:08
(47,52) Только что попробовал. Обработка работает - больше ничего не работает, меню недоступны. Может надо делать немного не так?
55 Токс
 
25.01.06
14:11
(54) Закрой 1С и запусти снова... Это надо делать первым делом после запуска... не должно быть открыто перед этим ни одного окна...
56 GrayT
 
25.01.06
14:12
(55)Угу
57 NS
 
25.01.06
14:15
(56) Вот это прикол!!!
При  запуске второй - работа первой ПРИОСТАНАВЛИВАЕТСЯ, начинает работать вторая, но после прерывания второй - первая продолжает свою работу!
58 NS
 
25.01.06
14:16
(+57) И таким образом их можно запустить очень много ;-))
59 GrayT
 
25.01.06
14:16
(57)См 53 :)
60 Прохожий
 
29.01.06
14:24
(34) ИМХО, Форма.ОбработкаОжидания() может не проканать, так как по Esc временами не только прекращается выполнение обработке, но и сразу закрывается сама форма обработки.
61 NS
 
29.01.06
15:34
(60)
Процедура ПриЗакрытии()
   Если Флаг=1 тогда
       Предупреждение("Нажата клавиша ESC, либо предпринята попытка закрытия формы при незавершенной обработке");
        СтатусВозврата(0);
        // Если надо - Флаг=0;    
   КонецЕсли;
КонецПроцедуры