Имя: Пароль:
1C
1C 7.7
v7: Таймер или отсчет времени
,
0 ЛюбопытнаяЯ
 
03.06.15
16:48
Есть документ. Из него открывается обработка (модально для ввода значения и др.). Нужно, чтобы через некоторое время t - эта обработка закрывалась. Можно ли на форму документа или обработки вешать какой-нибудь таймер или счетчик времени, чтобы при наступлении времени Т, позакрывать ненужные окна?
1 Heckfy
 
03.06.15
16:51
ОбработкаОжидания
Не?
2 luter-89
 
03.06.15
16:51
Если в 7-ке есть что-то похожее на ПодключитьОбработчикОжидания(), то можно
3 ДенисЧ
 
03.06.15
16:52
ВвестиЧисло(<Число>,<Подсказка>,<Длина>,<Точность>,<Таймаут>)
4 ЛюбопытнаяЯ
 
03.06.15
16:54
(3) ВвестиЧисло - таймаута нет
5 ЛюбопытнаяЯ
 
03.06.15
16:56
(1) С ОбработкойОжидания что-то не получается. Она вроде из глобальника работает. А Форма.ОбработкаОжидания(Имя,Время)- в отладчике не переходит к Процедуре Имя().
6 ЛюбопытнаяЯ
 
03.06.15
16:58
(3) Прошу прощения, есть таймаут. Но это окно мне не подходит. Мне нужно открывать свою обработку. И уже там нужен таймер
7 ДенисЧ
 
03.06.15
17:03
(6) ОбработкаОжидания(<?>,)
Синтаксис:
ОбработкаОжидания(<ИмяПроцедуры>,<ИнтервалВызова>)
Назначение:
Инициирует периодический вызов процедуры глобального модуля с заданным интервалом времени.
8 Зеленый пень
 
03.06.15
17:05
Форма.ОбработкаОжидания() всю жизнь работало в 7.7
9 ЛюбопытнаяЯ
 
03.06.15
17:06
(6),(7) В обработке ПриОткрытии() пишу Форма.ОбработкаОжидания("Имя",5).
В глобальном:
Процедура Имя()
  Сообщить(ТекущееВремя());
КонецПроцедуры
И ничего не происходит. Что делаю не так?
10 ЛюбопытнаяЯ
 
03.06.15
17:10
Процедура Имя() пробовала вставлять и в модуле обработки
11 ДенисЧ
 
03.06.15
17:11
Экспорт
12 ЛюбопытнаяЯ
 
03.06.15
17:11
И экспорт тоже пробовала
13 ДенисЧ
 
03.06.15
17:12
И тут во мне плавно просыпается Станиславский
14 Масянька
 
03.06.15
17:12
(12) Попробуйте Имя без кавычек.
15 Масянька
 
03.06.15
17:12
(13) Рано...
16 luter-89
 
03.06.15
17:13
(9) Отладчиком пользуетесь?
17 ДенисЧ
 
03.06.15
17:14
(14) Шта?
18 ЛюбопытнаяЯ
 
03.06.15
17:15
Еще раз описываю ситауцию.
Из документа открывается обработка путем:            ОткрытьФормуМодально("Обработка.МояОбработка",Зн);
Далее в Обработке:
Процедура Имя()
  Сообщить(ТекущееВремя());
КонецПроцедуры

Процедура ПриОткрытии()
Форма.ОбработкаОжидания("Имя",5);
КонецПроцедуры
19 Масянька
 
03.06.15
17:16
(17) Предложение.
(18) 5 минут прошло?
20 ЛюбопытнаяЯ
 
03.06.15
17:16
Процедура Имя()-  пробовала и в глобальник писать и с Экспорт. В отладчике не дохожу до моей процедуры Имя()
21 ДенисЧ
 
03.06.15
17:17
Атшорт...
Обработка ожидания не работает в модальных формах
22 Масянька
 
03.06.15
17:17
(17) Просто я обработкой ожидания не пользуюсь. У меня есть таймер :)
23 Масянька
 
03.06.15
17:17
(21) Шта?!
24 ЛюбопытнаяЯ
 
03.06.15
17:18
(19) ИнтервалВызова> - необязательный параметр. Числовое выражение - интервал времени в секундах
25 ДенисЧ
 
03.06.15
17:18
(23) Поверь.
26 ЛюбопытнаяЯ
 
03.06.15
17:19
(22) Вот и я хочу таймер! Не подскажешь как сделать?
27 Масянька
 
03.06.15
17:19
(25) А я знаю :) Теперь и ты знаешь :)
28 Масянька
 
03.06.15
17:19
(26) Мыло в личке - реальное?
29 luter-89
 
03.06.15
17:19
30 ДенисЧ
 
03.06.15
17:19
(26) google://formex
31 luter-89
 
03.06.15
17:20
Обработка ожидания в системе 1С:Предприятие, как следует из документации, предназначена для периодического выполнения процедуры глобального модуля с заданным интервалом времени. Код для запуска будет выглядеть следующим образом:




ОбработкаОжидания("ОбновитьСчетчик_",1);  

Где "ОбновитьСчетчик_" - имя процедуры глобального модуля, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)

Но! Проблема в том, что запустить обработку ожидания можно только 1 раз. Повторный запуск приведет к отмене предыдущего. Другими словами, если Вы хотите сделать, к примеру, обработку-таймер для отсчета затраченного времени, то запустить можно только один таймер, т.к. запуск второго таймера приведет к остановке первого. А что делать если Вам надо запустить 2, 3 или больше таких таймеров одновременно? Или Вам надо еще при этом периодически сканировать состояние документов?

Выход есть! Обработку ожидания надо запустить в контексте формы, чтобы отделить этот поток от глобального контекста. И тогда станет возможным периодический запуск процедуры локального модуля, т.е. процедуры, расположенной в модуле формы Вашей обработки.

Код для запуска будет выглядеть следующим образом:


Форма.ОбработкаОжидания("ОбновитьСчетчик_",1);  

Где "ОбновитьСчетчик_" - имя процедуры локального модуля формы обработки, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)

Таким образом, в каждой обработке можно запустить свою обработку ожидания, которая будет работать до тех пор, пока открыта форма.

В прилагаемом к статье архиве находятся две одинаковых обработки-таймера в формате 1С 7.7. Запустите их поочереди и Вы увидите, что каждый таймер отсчитывает свое время и управляется независимо от своего двойника....
32 luter-89
 
03.06.15
17:21
Сносите 7-ку ставьте 8-ку)
33 ЛюбопытнаяЯ
 
03.06.15
17:21
(28) да, адрес действующий
34 trdm
 
03.06.15
17:22
(4) Релиз обновите. Или формекс подключите, у него есть функция закрытия окна по таймеру.
35 trdm
 
03.06.15
17:22
(4) Еть таймаут.
36 trdm
 
03.06.15
17:23
вЧисло = 10;
    Если ВвестиЧисло(вЧисло,"вЧисло",10,2,5) = 1 Тогда
        
    КонецЕсли;

Закрывается у мну в теч. 6 секунд.
37 ДенисЧ
 
03.06.15
17:24
(35) (36) не тормози, с этим уже разобрались
38 Масянька
 
03.06.15
17:25
(33) Лови. Там лишнее нужно убрать, разбирайся.
39 luter-89
 
03.06.15
17:27
У кого еще 7-ка то стоит?
40 Масянька
 
03.06.15
17:27
+ (38) Получишь - маякни. А то у меня сегодня с почтой - беда...
41 trdm
 
03.06.15
17:48
(39) У зубров индустрии.
42 ЛюбопытнаяЯ
 
03.06.15
17:52
(38,40) Спасибо! Получила. Сижу разбараюсь!