Перейти к содержимому

Как сделать таймер в 1с

  • автор:

1C 8.2 Управляемое приложение. Таймер в форме.

В документе «Событие» конфигурации «Управление небольшой фирмой»(v. 1.3.1.4) необходимо разместить таймер — время работы с документом (время контакта с клиентом).
Для этого в документе создал реквизит «ВремяКонтакта» и через обработчик ожидания считаю:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания(«ОбновитьВремя»,1);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьВремя()
Объект.ВремяСобытия = Объект.ВремяСобытия+1;
КонецПроцедуры

После этого редактировать текстовые поля — Содержание или Тема невозможно. Значения не успевают сохраниться.

Помогите решить такую задачу!
Спасибо.

Увеличил интервал и добавил процедуры «ОкончаниеВводаТекста» в нужные поля.
Но пользователей «не надрессируешь» вовремя сохранять т.к. у них в этот момент идет общение с клиентом по телефону.

Может кто знает как решить задачу!?

вот так тож нормально:

&НаКлиенте
Процедура ОбновитьВремя()

Заголовок = Формат( Дата(1,1,1) + (ТекущаяДата() — ВремяНачалаРаботы), «ДЛФ=T; ДП message_16″>

Stepa86

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

Код 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
:

1с как сделать простой таймер на форме?

При запуске «таймера» запускается обработчик ожидания (у топикстартера 1 секунда, но чтобы было без рывков рекомендую 0.1 секунду), который проверяет текущее и запланированное время, и обновляет форму; по достижению запланированного времени обработчик отключается.

У начинающих и тех, кто перешел на программирование управляемых форм с обычных или с 7.7, может возникнуть вопрос: зачем тут обработчик ожидания? Дело в том, что в режиме управляемого приложения все процессы в рамках управляемых форм запускаются последовательно. Если вы запускаете цикл с ожиданием конца времени, изменяете состояние формы и даете команду на обновление интерфейса, то пока ваш цикл не закончится, форма не будет обновляться. Со стороны пользователя это будет выглядеть как Старт, все зависло, сразу Финиш. При использовании обработчика ожидания платформа выполнит код процедуры обработчика, перерисует форму, а после указанного таймаута снова все повторит.

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

Пауза, задержка времени, при выполнении кода 1С

На встроенном языке 1С можно написать цикл с проверкой даты и времени. Данный метод является более универсальным.

Задержка времени на "WScript.Shell"

Данный объект позволяет выполнять различные сценарии в операционной системе Windows. Недостаток данного подхода — это при выполнении команд открывается консольное окно. Метод Timeout запускает цикл который автоматически будет остановлен через заданное количество секунд.

Комментарии (1)

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *