Меню Рубрики

Как в 1с написать команду подключитьобработчикожидания

Обучение программированию на 1С

Обработчик ожидания – выполнение кода через заданное время

В этой статье покажем как в 1С выполнять код с заданной периодичностью с использованием функций обработчика ожидания:

Обработчик ожидания – это механизм, который используется на стороне клиентского приложения (т.е. в пользовательских формах и т.п.). Его задача запустить процесс, который выполнит определённые действия однократно или через заданный интервал времени. Обработчик ожидания выполняет свои действия параллельно (в выделенном потоке) основной работе пользователя.

Рассмотрим синтаксис вышеуказанных функций:

ПодключитьОбработчикОжидания( , , ) – Подключает вызов указанной процедуры 1С через определённый интервал времени.

  • ИмяПроцедуры — – Путь к экспортируемой процедуре. Процедура должна располагаться на клиенте и не содержать параметров.
  • Интервал — – Интервал (точность до 0,1 секунды) в секундах через который будет осуществляться вызов процедуры.
  • Однократно — – Однократно или многократно будет исполнен код подключаемой процедуры.

ОтключитьОбработчикОжидания( ) – Отключает вызов процедуры, которая была подключена ранее с помощью ПодключитьОбработчикОжидания.

  • ИмяПроцедуры — — Путь к процедуре, которая должна быть отключена.

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

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

Пример вызова обработчика ожидания

Приведём пример работы с обработчиком ожидания:

В этом примере обработчик вызывается с клиента и выполняет клиентскую процедуру, которая, в свою очередь, передаёт управление серверной процедуре.

К примеру, вы хотите сделать с помощью данного механизма таймер. И хотите, чтобы имелась возможность вызывать несколько таймеров за раз. Вышеприведённый код не позволит вам вызывать обработчик несколько раз. Для этого можно сделать одну из следующих вещей:

  • Каждый раз создавать новую форму таймера, к которой привязана соответственно выполняющаяся процедура.
  • Каждый раз вызывать новый обработчик ожидания (с другим именем). К примеру: ОбработатьОжидание1, ОбработатьОжидание2, ОбработатьОжидание3

По ссылке ниже можно скачать пример внешней обработки ожидания.

Если у вас остались вопросы, задавайте их ниже в комментариях.

Источник статьи: http://life1c.ru/post/2115

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

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

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

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

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

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

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

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

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

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

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

Код для запуска будет выглядеть следующим образом:
Код 1C v 7.x
Где «ОбновитьСчетчик_» — имя процедуры локального модуля формы обработки, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)
Таким образом, в каждой обработке можно запустить свою обработку ожидания, которая будет работать до тех пор, пока открыта форма.

В формах можно использовать Код 1C v 8.х ,
где ИмяПроцедуры — имя процедуры, которая запускается через ВремяЗапуска секунд
В самой процедуре нужно вставить Код 1C v 8.х для прекращения обработки ожидания (естественно, после выполнения нужных условий).
Источник lessons1c
:

Источник статьи: http://helpf.pro/faq83/view/1302.html

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

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

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

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

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

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

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

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

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

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

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

Код для запуска будет выглядеть следующим образом:
Код 1C v 7.x
Где «ОбновитьСчетчик_» — имя процедуры локального модуля формы обработки, которая будет запускаться с периодичностью в 1 сек. (второй параметр, равный 1)
Таким образом, в каждой обработке можно запустить свою обработку ожидания, которая будет работать до тех пор, пока открыта форма.

В формах можно использовать Код 1C v 8.х ,
где ИмяПроцедуры — имя процедуры, которая запускается через ВремяЗапуска секунд
В самой процедуре нужно вставить Код 1C v 8.х для прекращения обработки ожидания (естественно, после выполнения нужных условий).
Источник lessons1c
:

Источник статьи: http://helpf.pro/faq/view/1302.html

v8: процедура ПодключитьОбработчикОжидания, в модуле обработки.

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

Если БылоПрерывание И ФормаХодаВыполненияОбмена.Открыта() Тогда

БылоПрерывание = Истина;
ПодключитьОбработчикОжидания(«ПриОжиданииПрерывания»,0.1,Истина);
ОбработкаПрерыванияПользователя();
БылоПрерывание = Ложь;

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

Тип: Строка. Имя экспортируемой процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля.
Функция в общем глобальном модуле должна предваряться директивой компиляции НаКлиенте. При этом модуль должен быть доступен на тонком клиенте.

Т.е. получается подключаемая процедура должна расположена в глобальном модуле?

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

(20) это, конечно, экзотика, но даже в типовых встречается.
Например в модуле обработки БлокировкаСоединенийСИнформационнойБазой:

Источник статьи: http://forum.mista.ru/topic.php?id=525601

Обработчик ожидания

Обработчик ожидания (формы клиентского приложения) – это процедура модуля формы с директивой компиляции &НаКлиенте, вызываемая с указанным интервалом механизмом платформы 1С, который включается с помощью метода формы клиентского приложения ПодключитьОбработчикОжидания.

Вызов метода доступен в тонком клиенте, веб-клиенте, толстом клиенте.

(обязательный) Тип: Строка. Имя процедуры, подключаемой в качестве обработчика ожидания.

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

(необязательный) Тип: Булево. Признак однократного выполнения обработчика ожидания.

Истина – указанный обработчик ожидания будет выполнен один раз. Значение по умолчанию: Ложь.

1. Варианты подключения Обработчика ожидания

Вариант 1. Требуется однократный вызов выполнения какой-либо процедуры с директивой компиляции &НаКлиенте, отложенный на определенное время.

Вариант 2. Требуется регулярный вызов выполнения какой-либо процедуры с директивой компиляции &НаКлиенте с указанной периодичностью.

2. Ограничение механизма обработчика ожидания

Ограничение механизма обработчика ожидания. Сразу оговоримся, что вызов и выполнение процедуры, подключенной через метод ПодключитьОбработчикОжидания, как однократный, так и регулярный, механизмом платформы 1С происходит только в период ожидания системы. Поэтому использовать данный механизм платформы 1С как таймер, либо другой аналогичный инструмент, выполняющий функцию точного отсчета времени при выполнении кода, не следует.

Как было сказано выше, в качестве обработчика ожидания (формы клиентского приложения) можно подключить процедуру модуля формы с директивой компиляции &НаКлиенте.

Но если требуется выполнение с помощью данного механизма платформы 1С какой-либо процедуры с директивой компиляции, отличной от директивы &НаКлиенте (например, процедуры модуля данной формы или любой доступной экспортной процедуры конфигурации), то можно просто осуществлять вызов такой процедуры из процедуры-обработчика ожидания. Это справедливо и для случая, когда требуется осуществлять через данный механизм платформы 1С вызов какой-либо функции модуля данной формы или любой доступной экспортной функции конфигурации.

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

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

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

Источник статьи: http://www.koderline.ru/expert/instruktsii/article-obrabotchik-ozhidaniya/


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии