Имя: Пароль:
1C
 
ОбработкаПрерыванияПользователя()
0 Ткачев
 
13.11.10
08:57
Не могу понять почему не работает, помогите.

Процедура ПриОткрытии()

  ПодключитьОбработчикОжидания("ПриОжидании",1);
  Пока Истина Цикл
     ...
     ОбработкаПрерыванияПользователя();
  КонецЦикла;

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


Процедура ПриОжидании()
  Закрыть();
КонецПроцедуры
1 Эмбеддер
 
13.11.10
09:09
ПриОткрытии() точно срабатывает?
2 stangen
 
13.11.10
09:10
Прерывания выполнения допускается если оно инициировано определенным интерактивным действием пользователя. К таким действиям относятся:
нажатие кнопки в форме;
выбор пункта меню или кнопки командной панели в форме;
выбор пункта меню или кнопки панели инструментов интерфейса;
действия инициируемые обработчиками событий "Выбор" элементов управления.
3 Ткачев
 
13.11.10
09:24
(2)т.е. нельзя сделать до открытия формы ?
А можно как то опрашивать клавиатуру ?

Если НажатаКлавиша="Space" Тогда
  Закрыть();
КонецЕсли;
4 hhhh
 
13.11.10
09:46
ну если не открыл еще форму, как же ты ее закроешь?
5 Ткачев
 
13.11.10
10:09
Так ведь все работает:

Процедура ПриОткрытии()

  ПодключитьОбработчикОжидания("ПриОжидании",1);
  Пока Истина Цикл
     ...
     ОбработкаПрерыванияПользователя();
  КонецЦикла;
  Закрыть();

КонецПроцедуры
6 Ткачев
 
13.11.10
10:10
Просто если надо прервать цикл, надо сделать "горячую" клавишу
7 Эмбеддер
 
13.11.10
14:19
(5) Т.е. в данном случае ОбработкаПрерыванияПользователя() срабатывает? Судя по (1) не должна
А вообще зачем такой странный код
8 Wobland
 
13.11.10
14:31
(7) если б (1) было в ПередОткрытием(), тогда б не сработало. могу ошибаться
9 Ткачев
 
15.11.10
07:52
(7)Ни че она не работает, это ответ на вопрос что б форму закрыть (4)
Так есть в 1с команда что б опросить клавиатуру ?

IF Inkey$=Chr$(13) Then Return
10 Ткачев
 
15.11.10
09:40
(7)Надо запустить кнопкой интерфейса обработку, которая перебирает и обрабатывает справочник, как сделать что бы в цикле можно было ее прервать ?
Никаких форм или меню у обработки не должно быть.
11 hhhh
 
15.11.10
09:42
ОбработкаПрерыванияПользователя();
12 Ткачев
 
15.11.10
09:43
(11)Так не работает оно
13 Ткачев
 
15.11.10
09:43
(5)
14 Ткачев
 
15.11.10
09:45
До конца цикла доходит и закрывает, как сделать что б внутри цикла при нажатии чего угодно, прервать цикл и закрыть обработку...
15 Ткачев
 
15.11.10
09:53
Я хоть правильно делаю ?
Создаю новую обработку, добавляю новую форму, создаю процедуру ПередОткрытием или ПриОткрытии(), делаю все что мне надо, для 1 Отказ=Истина, для 2 Закрыть()
16 hhhh
 
15.11.10
09:55
(11) может они чего-то не того у тебя нажимают? Пусть попробуют Ctrl-Break.
17 Ткачев
 
15.11.10
10:08
(16)Нажимаю я, всю клавиатуру перенажимал, не хочет скидывать в процедуру ПриОжидании()
18 hhhh
 
15.11.10
10:41
(17) процедура ПриОжидании -это же вообще из другой оперы. Какое отношение имеет ожидание к обработке прерывания пользователя?
19 Ткачев
 
15.11.10
11:34
(18)Тут как бы указана процедура для перехода

ПодключитьОбработчикОжидания("ПриОжидании",1);
20 johnny17
 
15.11.10
11:38
ОбработкаПрерывания - прерывает работу обработки полностью, т.е. сразу выходит из всего стека вызовов, и никак ее не отловить...
21 Stepa86
 
15.11.10
11:47
Попробуй код из приОткрытии перенести на кнопку. Если с кнопкой будет работать как надо, то видимо обработчик ожидания не может подрубаться в еще не открытой форме...
22 rs_trade
 
15.11.10
11:57
(15) Я хоть правильно делаю ?

Нет не правильно. Задача вообще какая?
23 johnny17
 
15.11.10
12:00
ИМХО, ОбработкаОжидания никак не связана с какими-либо формами, просто проверка на нажатие Ctrl-Break и выкид из процедуры
24 Ткачев
 
15.11.10
12:01
(22)Запустить обработку кнопкой из интерфейса.
25 Ткачев
 
15.11.10
12:01
(23)Вот мне это и надо, но не работает:(
26 hhhh
 
15.11.10
12:11
(23) ты видать синтакс-помощник вообще не читал. Вот же написано:

Прерывания выполнения допускается если оно инициировано определенным интерактивным действием пользователя. К таким действиям относятся:
нажатие кнопки в форме;
выбор пункта меню или кнопки командной панели в форме;
выбор пункта меню или кнопки панели инструментов интерфейса;
действия инициируемые обработчиками событий "Выбор" элементов управления.
27 johnny17
 
15.11.10
12:16
(26) Смысл в том, что надо это прерывание отловить, а оно не ловится...

И не поймается, это полное прерывание...
28 Stepa86
 
15.11.10
12:20
(27) у меня почему то такой код работает, ЧЯДНТ?


Перем фФормаПрогресса;

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   фФормаПрогресса = ПолучитьФорму( "ФормаПрогресса" );
   
   фФормаПрогресса.Инициализация( ВсегоЭлементов , , "Пример работы формы прогресса..." );
   
   ПодключитьОбработчикОжидания( "ОбработатьПрерываниеПользователя" , 0.1 , Истина );
   
   Для ц = 0 По ВсегоЭлементов Цикл
       
       ОбработкаПрерыванияПользователя();
       
       фФормаПрогресса.УвеличитьИндикатор( "Чтобы прервать нажмите Ctrl+Break." , );
       
   КонецЦикла;
   
   ОтключитьОбработчикОжидания( "ОбработатьПрерываниеПользователя" );
   
   фФормаПрогресса.Закрыть();
   
КонецПроцедуры

Процедура ОбработатьПрерываниеПользователя()
   
   Если Не фФормаПрогресса = Неопределено
       И фФормаПрогресса.Открыта() Тогда
       
       фФормаПрогресса.Закрыть();
       
   КонецЕсли;
   
КонецПроцедуры
29 johnny17
 
15.11.10
12:26
(28) Упс, будем знать... :) В закладки :)
30 johnny17
 
15.11.10
12:28
(28) Хотя... это вродь через одно место, у тебя процедура отработает просто по таймеру, когда остальное прервется, а не в момент срабатывания прерывания, хотя тоже выход...
31 Stepa86
 
15.11.10
12:33
(30) из стека функций мы выпадаем полностью, но обработка ожидания остается подключенной... это наверно единственный более-менее приличный способ сделать постобработку данных
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.