Как настроить регламентное задание в 1С, чтобы оно запускалось строго в определенные минуты каждого часа?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему задание запускается сразу после включения?

Рассмотрим ситуацию: вы создаете новое регламентное задание, указываете время начала 00:05:00 и ставите интервал повторения 3600 секунд (1 час). Как только вы устанавливаете флаг Использование и сохраняете настройки, система инициирует выполнение немедленно. Проанализируем причину такого поведения.

В платформу «1С:Предприятие» заложен механизм «наверстывания» пропущенных заданий. Если дата начала в расписании указана в прошлом (например, стоит текущее число, но время 00:05 уже прошло), планировщик считает, что сеанс был пропущен по техническим причинам, и пытается выполнить его как можно скорее. Чтобы избежать этого эффекта, выполним следующие шаги:

  1. Установим дату начала задания на будущее время. Если сейчас 14:00, укажите время старта 15:05 текущего дня.
  2. Если необходимо настроить задание на длительный период, убедитесь, что дата начала не относится к 2018 или любому другому прошедшему году. Система всегда анализирует актуальность текущего момента относительно заданного интервала.

Проблема «дрейфа» времени и интервальное расписание

Многие разработчики используют настройку «Повторять через...». Однако при использовании простого интервала (например, каждые 60 минут) возникает эффект накопленного смещения. Выясним причину: планировщик 1С в стандартном режиме отсчитывает интервал до следующего запуска не от планового времени старта, а от момента завершения предыдущего фонового задания.

Пример ситуации:
Задание должно стартовать в 12:05. Если оно выполнялось 3 минуты и завершилось в 12:08, то при интервале в 3600 секунд следующий запуск произойдет в 13:08. Через сутки время запуска сместится на целый час. Это критично для обменов данными и регламентных операций, привязанных к бизнес-циклам.

Решение №1: Детальное дневное расписание

Самый надежный способ заставить 1С работать по строгому графику без использования сторонних утилит — это настройка детального дневного расписания. Разберем по шагам, как это сделать:

  1. Откроем форму настройки расписания регламентного задания.
  2. Перейдем на закладку «Дневное».
  3. Вместо указания общего интервала в нижней части формы, воспользуемся списком детального расписания.
  4. Нажмем кнопку добавить и создадим отдельную запись для каждого часа:
    • Время начала: 00:05:00
    • Время начала: 01:05:00
    • Время начала: 02:05:00
    • ... и так далее до 23:05:00.

В этом случае платформа будет использовать жесткие временные метки. Даже если предыдущее задание завершилось позже или произошел сбой, следующий запуск будет инициирован ровно в указанное время начала новой строки расписания. Это полностью исключает «дрейф» времени.

Решение №2: Программный контроль внутри задания

Если вы не хотите прописывать 24 строки в расписании вручную, можно применить «хитрость» на уровне кода. Настроим расписание на запуск раз в минуту, а внутри самой процедуры добавим проверку времени. Проанализируем пример кода:


Процедура ВыполнитьРегламентноеЗадание() Экспорт
     ТекущееВремя = ТекущаяДата();
     МинутаЗапуска = Минута(ТекущееВремя);
    
     // Нам нужно, чтобы полезная работа выполнялась только в 5 минут
     Если МинутаЗапуска <> 5 Тогда
         Возврат; 
     КонецЕсли;
    
     // Далее идет основной код задания
     ВыполнитьОбменДанными();
КонецПроцедуры

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

Решение №3: Обход немедленного старта через временные окна

Рассмотрим еще один лайфхак, который упоминали опытные пользователи на форуме. Чтобы избежать запуска задания в момент нажатия кнопки «ОК» (когда вы редактируете расписание в середине дня), можно временно ограничить время завершения в расписании так, чтобы текущий момент не попадал в рабочий диапазон.

Например, если сейчас 12:00, а вы хотите, чтобы задание начало работать с 00:05 следующего дня:

  1. Установите в расписании «Время начала» 00:05.
  2. Установите «Время окончания» 00:10.
  3. Сохраните задание.

Система увидит, что текущее время (12:00) не входит в интервал между 00:05 и 00:10, и не станет запускать задание немедленно.

Особенности клиент-серверного и файлового режимов

Важно помнить, что точность работы планировщика зависит от режима работы базы данных:

Использование РегламентныеЗадания — это мощный инструмент, но он требует понимания внутренней логики платформы. Применяя детальное дневное расписание и контролируя дату старта, вы сможете избежать «дичи» с расписанием и обеспечить стабильную работу ваших автоматизированных процессов.

← На главную