Почему регламентное задание в 1С игнорирует расписание из конфигуратора и как это исправить?

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

При разработке и администрировании систем на платформе «1С:Предприятие 8» специалисты часто сталкиваются с ситуацией, когда регламентное задание упорно отказывается работать по новому расписанию. Например, вы задали в конфигураторе интервал выполнения «каждые 600 секунд» (10 минут), но в реальности фоновые задания продолжают запускаться непрерывно — каждые 10–20 секунд, перегружая сервер и забивая технологический журнал.

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

Причина проблемы: Метаданные против Данных

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

Давайте детально разберем этот механизм:

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

Решение 1: Изменение расписания в пользовательском режиме (Консоль заданий)

Если вам нужно изменить расписание для конкретной работающей базы данных, самым простым и надежным способом является использование специального инструмента — Консоли регламентных заданий.

Выполним это исправление по шагам:

  1. Откроем информационную базу в пользовательском режиме («1С:Предприятие») с правами администратора.
  2. Если конфигурация построена на Библиотеке стандартных подсистем (БСП), перейдем в раздел Администрирование — Обслуживание — Регламентные операции — Регламентные и фоновые задания. Если используется самописная конфигурация или старая версия платформы, воспользуемся внешней обработкой «Консоль регламентных заданий».
  3. Найдем в списке наше регламентное задание (ориентируясь по его наименованию).
  4. Откроем карточку регламентного задания и обратим внимание на его расписание. Как правило, там будет отображаться старый интервал (в нашем случае — те самые 10–20 секунд, которые использовались при отладке).
  5. Нажмем кнопку Настроить расписание, установим требуемые параметры (например, выполнять каждый день, каждые 600 секунд) и сохраним изменения, нажав «ОК» и «Записать и закрыть».

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

Решение 2: Программное изменение расписания (для разработчиков)

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

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


// Поиск предопределенного задания по метаданным
ЗаданиеБД = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ИмяВашегоЗадания);

Если ЗаданиеБД <> Неопределено Тогда
    // Создаем новый объект расписания
    НовоеРасписание = Новый РасписаниеРегламентногоЗадания;
    НовоеРасписание.ПериодПовтораДней = 1;
    НовоеРасписание.ПериодПовтораВТечениеДня = 600; // Интервал в секундах (10 минут)
    
    // Записываем измененное расписание в базу данных
    ЗаданиеБД.Расписание = НовоеРасписание;
    ЗаданиеБД.Записать();
КонецЕсли;

Если же ваша конфигурация использует механизмы БСП (что справедливо для большинства современных решений, таких как ERP, КА, УТ, БП, ЗУП), настоятельно рекомендуется использовать стандартные программные интерфейсы библиотеки. Они не только изменят расписание, но и корректно зарегистрируют эти изменения в специализированных регистрах сведений БСП.

Для обновления расписания через БСП применим следующий метод:


// Создаем структуру нового расписания
НовоеРасписание = Новый РасписаниеРегламентногоЗадания;
НовоеРасписание.ПериодПовтораДней = 1;
НовоеРасписание.ПериодПовтораВТечениеДня = 600;

// Установка расписания через программный интерфейс БСП
РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания(
    Метаданные.РегламентныеЗадания.ИмяВашегоЗадания, 
    НовоеРасписание
);

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

Важные требования к производительности системы

Анализируя частоту выполнения регламентных заданий, крайне важно помнить о стандартах разработки фирмы «1С» и требованиях к производительности серверной инфраструктуры:

Поэтому, если вам требуется частый обмен данными, проанализируйте возможность оптимизации алгоритма (например, осуществлять запуск реже, но передавать данные более крупными пакетами) или используйте современные интеграционные механизмы (HTTP-сервисы, Web-сервисы, брокеры сообщений типа RabbitMQ) вместо постоянного опроса базы данных регламентным заданием.

← На главную