HelpF.pro

Периодическое выполнение кода с заданным интервалом времени - ОбработкаОжидания()

Код 1C v 8.2 УП
 ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)    

Параметры:
<ИмяПроцедуры> (обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания.
<Интервал> (обязательный) Тип: Число. Интервал времени в секундах с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число).Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
<Однократно> (необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания.
Истина - указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь
Описание: Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.

Доступность:
Тонкий клиент, веб-клиент, толстый клиент.

Примечание:
Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания.
Код 1C v 8.2 УП
 ОтключитьОбработчикОжидания(<ИмяПроцедуры>)    


Код 1C v 8.2 УП
  
&НаКлиенте
Процедура ОболочкаОбработчика ()
ОбработатьОжидание();
КонецПроцедуры


&НаСервере
Процедура ОбработатьОжидание()
// делаем всё, что требуется
КонецПроцедуры

//....
ПодключитьОбработчикОжидания("ОболочкаОбработчика", 3, Истина);



Код 1C v 8.х
 ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)   

Подключает вызов указанной процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля через определенный интервал времени. Вызов будет осуществляться только в "состоянии покоя", то есть в тот момент, когда программа не выполняет никаких действий. Вызов обработчика ожидания продолжается, пока система не завершит работу или пока не будет вызван метод глобального контекста ОтключитьОбработчикОжидания.
Код 1C v 8.х
 Процедура ОтчетОпродажахЗаДень()
// ...
КонецПроцедуры

//...
ПодключитьОбработчикОжидания("ОтчетОпродажахЗаДень", 60); // каждую минуту

Код 1C v 8.х
 // В типовых проверка дин. обновления конфигурации каждые 20 мин.
ПодключитьОбработчикОжидания("ОбработчикОжиданияПроверкиДинамическогоИзмененияИБ", 20 * 60);
// подключим обработчик обменов данными
ПодключитьОбработчикОжидания("ПроверкаОбменаДанными", глЗначениеПеременной("глКоличествоСекундОпросаОбмена"));
///
ПодключитьОбработчикОжидания("ПроверитьОтветыНаЗаявленияНаПодключение", 86400); // = 24(ч) * 60(мин) * 60(сек) = 1 сутки


Для Формы
Код 1C v 8.х
 ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)    

Параметры:
<ИмяПроцедуры> (обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания.
<Интервал> (обязательный) Тип: Число. Интервал времени в секундах с точностью до 1/10 секунды, через который будет осуществляться вызов процедуры (положительное число). Если указано значение меньше 1, то значение третьего параметра должно быть равно Истина.
<Однократно> (необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания. 0Истина - указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь

Описание:
Подключает указанную процедуру в качестве обработчика ожидания. Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени.

Доступность:
Толстый клиент.
Примечание:
Вызов обработчика ожидания продолжается пока форма не будет закрыта или пока не будет вызван метод формы ОтключитьОбработчикОжидания.
Пример:
Код 1C v 8.х
 ПодключитьОбработчикОжидания("ПриОжидании", 1);   

Код 1C v 8.х
 Форма.мИнтервалАвтосохранения = 300; // 5 минут
Если Форма.мИнтервалАвтосохранения <> 0 Тогда
Форма.ПодключитьОбработчикОжидания("ОбработчикСобытияПоТаймеру", Цел(Форма.мИнтервалАвтосохранения * 60));
КонецЕсли;




Обработка ожидания в системе 1С:Предприятие, как следует из документации, предназначена для периодического выполнения процедуры глобального модуля с заданным интервалом времени. Код для запуска будет выглядеть следующим образом:
Код 1C v 7.x
 ОбработкаОжидания("ОбновитьСчетчик_",1);  

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

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

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

Код для запуска будет выглядеть следующим образом:
Код 1C v 7.x
 Форма.ОбработкаОжидания("ОбновитьСчетчик_",1); 

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

В формах можно использовать
Код 1C v 8.х
 Форма.ОбработкаОжидания("ИмяПроцедуры",ВремяЗапуска)   
,
где ИмяПроцедуры - имя процедуры, которая запускается через ВремяЗапуска секунд
В самой процедуре нужно вставить
Код 1C v 8.х
 Форма.ОбработкаОжидания("ИмяПроцедуры",0)   
для прекращения обработки ожидания (естественно, после выполнения нужных условий).
Источник lessons1c
:
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq7/view/1302.html