При разработке и администрировании систем на платформе «1С:Предприятие 8» специалисты часто сталкиваются с ситуацией, когда регламентное задание упорно отказывается работать по новому расписанию. Например, вы задали в конфигураторе интервал выполнения «каждые 600 секунд» (10 минут), но в реальности фоновые задания продолжают запускаться непрерывно — каждые 10–20 секунд, перегружая сервер и забивая технологический журнал.
В этой статье мы подробно разберем, почему возникает такое поведение системы, проанализируем внутреннее устройство планировщика задач «1С», а также рассмотрим практические способы решения этой проблемы — как вручную, так и программными методами.
Для того чтобы понять, почему платформа игнорирует новые настройки из конфигуратора, нам необходимо обратиться к архитектуре «1С:Предприятие». В платформе реализовано четкое разделение между объектом метаданных (шаблоном в конфигураторе) и реальным объектом данных (экземпляром задания в информационной базе).
Давайте детально разберем этот механизм:
Такое поведение платформы заложено разработчиками «1С» намеренно. Представим ситуацию: администратор большой корпоративной базы настроил расписание обмена данными вручную под нужды конкретного сервера (например, запускает обмен ночью, а не каждые 15 минут, как было заложено разработчиками). Если бы конфигуратор при каждом обновлении базы данных перезаписывал расписание, все уникальные настройки администратора постоянно сбрасывались бы. Чтобы этого избежать, приоритет всегда отдается настройкам, хранящимся непосредственно в базе данных.
Если вам нужно изменить расписание для конкретной работающей базы данных, самым простым и надежным способом является использование специального инструмента — Консоли регламентных заданий.
Выполним это исправление по шагам:
После выполнения этих действий планировщик мгновенно примет новые настройки из базы данных, и задание начнет выполняться строго по установленному графику.
Если вы разрабатываете тиражное решение или администрируете большое количество распределенных информационных баз (РИБ), менять расписание вручную в каждой базе через консоль нецелесообразно. В этом случае необходимо обновить настройки программно при обновлении конфигурации.
Рассмотрим, как это сделать на чистой платформе «1С:Предприятие 8». Для этого мы напишем код, который находит предопределенное регламентное задание в базе данных и принудительно перезаписывает его расписание:
// Поиск предопределенного задания по метаданным
ЗаданиеБД = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ИмяВашегоЗадания);
Если ЗаданиеБД <> Неопределено Тогда
// Создаем новый объект расписания
НовоеРасписание = Новый РасписаниеРегламентногоЗадания;
НовоеРасписание.ПериодПовтораДней = 1;
НовоеРасписание.ПериодПовтораВТечениеДня = 600; // Интервал в секундах (10 минут)
// Записываем измененное расписание в базу данных
ЗаданиеБД.Расписание = НовоеРасписание;
ЗаданиеБД.Записать();
КонецЕсли;
Если же ваша конфигурация использует механизмы БСП (что справедливо для большинства современных решений, таких как ERP, КА, УТ, БП, ЗУП), настоятельно рекомендуется использовать стандартные программные интерфейсы библиотеки. Они не только изменят расписание, но и корректно зарегистрируют эти изменения в специализированных регистрах сведений БСП.
Для обновления расписания через БСП применим следующий метод:
// Создаем структуру нового расписания
НовоеРасписание = Новый РасписаниеРегламентногоЗадания;
НовоеРасписание.ПериодПовтораДней = 1;
НовоеРасписание.ПериодПовтораВТечениеДня = 600;
// Установка расписания через программный интерфейс БСП
РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания(
Метаданные.РегламентныеЗадания.ИмяВашегоЗадания,
НовоеРасписание
);
Этот код лучше всего поместить в специализированный обработчик обновления информационной базы (процедура ПриДобавленииОбработчиковОбновления в общем модуле обновлений вашей конфигурации), чтобы он выполнился автоматически у всех пользователей при установке новой версии программы.
Анализируя частоту выполнения регламентных заданий, крайне важно помнить о стандартах разработки фирмы «1С» и требованиях к производительности серверной инфраструктуры:
rphost, времени процессора на компиляцию модулей, инициализацию параметров сеанса и установку соединения с СУБД.Поэтому, если вам требуется частый обмен данными, проанализируйте возможность оптимизации алгоритма (например, осуществлять запуск реже, но передавать данные более крупными пакетами) или используйте современные интеграционные механизмы (HTTP-сервисы, Web-сервисы, брокеры сообщений типа RabbitMQ) вместо постоянного опроса базы данных регламентным заданием.