-

Пауза в 1С

3
12404
23.02.2022 Ольга Волкова

Содержание:

1.       Вариант 1 – управляемые блокировки 1С

2.       Вариант 2 – цикл с проверкой даты и времени

3.       Вариант 3 – диалог Предупреждение в 1С

4.       Вариант 4 – запуск пинга


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

 

1.       Вариант 1 – управляемые блокировки 1С

 

Вариант, который мы рассмотрим, основан на использовании механизма управляемых блокировок 1С, вместе с механизмом фоновых заданий, а точнее выполнения фонового задания "ОжидатьЗавершенияВыполнения".


Использовать будем объект "Общий модуль" и регистр сведений. Регистр сведений нужен для реализации управляемой блокировки по определенному условию, а именно: по номеру сеанса. В одну единицу времени у базы не может быть два сеанса с одинаковыми номерами, то есть одна пауза не помешает другому сеансу создать свою паузу.

 

Мы напишем несколько процедур, которые должны находиться в общем модуле регистра сведений:

 

Регистр сведений назовем "НашаПауза".

Измерения –  НомерСеанса;

Ресурсы –      ДатаНачалаПаузы;

                        ДатаОкончанияПаузы;

                        Причина;

                        ИмяИнициатора;

 

Первая процедура Выполнить паузу в секундах.

 

Параметры процедуры

·         Время паузы сек – количество секунд, на которое необходимо установить паузу; 

·         Причина и произвольный текст, будут записаны наш регистр сведений.

 

Находим сеанс пользователя и устанавливаем управляемую блокировку на его сеанс, затем запускаем фоновое задание и устанавливаем метод "ОжиданиеЗавершенияВыполнения" с временем ожидания равным нашей паузе. По завершению ожидания блокировка сеанса снимается.

 


Рис. 1 Управляемая блокировка сеанса


Процедура Пауза

"Собственно_Пауза (НомерСеанса,ВремяОкончанияПаузы)"

Параметры

·         Номер Сеанса сеанс, который ставится на паузу;

·         Время окончания паузы – значение, когда должна закончится пауза.


При попытки прочитать значение заблокированной записи регистра сведений в 1С и возникает наша пауза.



Рис. 2 Заблокированная запись регистра сведений в 1С и появление паузы


Процедура "ЗависшиеПаузы"

Процедура выполняется регламентным заданием и удаляет неактуальные записи, которые  могли остаться в регистре сведений.



Рис. 3 ЗависшиеПаузы для паузы в 1С


Теперь в любом месте конфигурации можно написать

НашаПауза.ВыполнитьПаузу_ВСекундах(5);  


2.       Вариант 2 – цикл с проверкой даты и времени


Можно на встроенном языке написать цикл с проверкой даты и времени. Вариан часто используется, но имеет недостаток –это загрузка процессора.



Рис. 4 Цикл с проверкой даты и времени  


3.       Вариант 3 – диалог Предупреждение в 1С


Также можно использовать диалог "Предупреждение" в коде, в качестве параметра задаем необходимый таймаут:



Рис. 5 Диалог Предупреждение в 1С  


4.       Вариант 4 – запуск пинга


Вариант с использование ping и запуска  внешнего приложения  из скрипта VBScript с применением объекта WshShell и его  метода Run(). Запуск пинга нужно производить с определенным временем задержки.



Рис. 6 Запуск пинга


Специалист компании  «Кодерлайн»

Ольга Волкова

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

0
Дмитрий Кондратьев
Можно сделать паузу с одним только механизмом фоновых заданий без механизма управляемых блокировок.

В общий модуль ОбщегоНазначения добавить процедуры:
Код
Процедура Пауза(Секунд) Экспорт
   Параметры = Новый Массив(1);
   Параметры[0] = Секунд;
   ФоновыеЗадания.Выполнить("ОбщегоНазначения.ПаузаФон", Параметры).ОжидатьЗавершения()
КонецПроцедуры

Процедура ПаузаФон(Секунд) Экспорт
   Попытка
      ПолучитьТекущийСеансИнформационнойБазы().ПолучитьФоновоеЗадание().ОжидатьЗавершения(Секунд)
   Исключение
   КонецПопытки
КонецПроцедуры

Фоновое задание ждёт завершения самого себя, не дожидается и прерывается по таймауту.
Имя Цитировать 0
0
Дмитрий Кондратьев
Ещё вариант паузы:
Код
Процедура Пауза(Секунд)
   СоединениеHTTP = Новый HTTPСоединение("127.0.0.0",,,,, Секунды);
   Попытка
      СоединениеHTTP.Получить(Новый HTTPЗапрос)
   Исключение
   КонецПопытки
КонецПроцедуры
Имя Цитировать 0
0
Guest
СоединениеHTTP = Новый HTTPСоединение("127.0.0.0",,,,, Секунды);

      'этот вариант с миллисекундами работает?
Имя Цитировать 0
Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.