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

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

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

Проанализируем ситуацию: почему возникает «зацикливание»?

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

Решение 1: Синхронизация времени между сервером 1С и SQL

Это самая распространенная причина. Если системное время на сервере приложений 1С опережает время на сервере баз данных (SQL) хотя бы на несколько секунд, возникает конфликт логики. Рассмотрим механику: сервер 1С запускает задание, оно отрабатывает, и сервер записывает время завершения. Однако SQL-сервер, имея «отстающее» время, может проинтерпретировать запись так, будто задание еще не запускалось в текущем цикле планировщика. В результате планировщик инициирует немедленный повторный запуск.

Что необходимо сделать:

  1. Проверим настройки NTP-клиента на обоих серверах.
  2. Убедимся, что часовые пояса на сервере приложений и сервере СУБД идентичны.
  3. Выполним принудительную синхронизацию времени.

Решение 2: Очистка серверного кэша и реестра кластера

Иногда флаг завершения задания не фиксируется из-за сбоев в кэше самого кластера (папка snccntxt). Обычная перезагрузка службы rphost может не помочь. Разберем по шагам процедуру «глубокой» очистки:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent.
  2. Перейдем в каталог служебных файлов сервера (обычно это C:\Program Files\1cv8\srvinfo).
  3. Найдем папку нужного кластера (например, reg_1541).
  4. Внутри папок информационных баз удалим содержимое каталога snccntxt. Это очистит сеансовые данные и контекст заданий.
  5. Важно: Если это не помогло, попробуем временно переместить файлы конфигурации кластера, кроме 1CV8Reg.lst, чтобы принудительно заставить систему пересоздать служебные таблицы.

Решение 3: Устранение «фантомных» заданий в таблицах SQL

Бывают случаи, когда в метаданных конфигурации существует одно задание, а в системных таблицах базы данных (внутренние таблицы планировщика 1С) образуются дублирующиеся записи. Рассмотрим, как это исправить программно.

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


Выборка = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.МоеЗадание));
Для Каждого Задание Из Выборка Цикл
    Задание.Удалить();
КонецЦикла;

После удаления задания следует зайти в пользовательский режим и создать его заново через «Консоль регламентных заданий» или программно, задав новое расписание. Это заставит систему создать чистую запись в таблице ScheduledJobs на уровне СУБД.

Решение 4: Проверка логики внутри кода задания

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

Проанализируем также использование фоновых заданий. Если основное задание просто порождает ФоновоеЗадание и завершается слишком быстро (менее чем за 1 секунду), планировщик может решить, что запуск был ошибочным или несостоявшимся, и попробует запустить его снова.

Решение 5: Настройка времени через «минуту до полуночи»

Существует эмпирический способ решения, помогающий при странных сбоях планировщика, связанных с границами суток. Попробуем установить время начала задания в режиме приложения на 11:59:59 или 23:59:59. Это иногда помогает «протолкнуть» зависшую очередь заданий. Перед этим действием обязательно очистите кэш на компьютере, с которого вносите изменения в расписание, так как настройки могут кэшироваться локально в AppData.

Дополнительные рекомендации

Если вышеуказанные методы не помогают, стоит обратить внимание на следующие аспекты:

  1. Режим совместимости: Попробуйте кратковременно изменить режим совместимости конфигурации на более старый, применить изменения, а затем вернуть актуальный. Это спровоцирует реструктуризацию некоторых системных таблиц.
  2. Версия платформы: Несмотря на идентичность версий, на «проблемном» сервере может быть повреждена установка платформы. Рассмотрим вариант полной переустановки платформы 1С:Предприятие.
  3. Журнал регистрации: Внимательно изучите события _Session.Start и _Session.Finish. Если время начала нового сеанса меньше или равно времени окончания предыдущего, это подтверждает теорию о рассинхронизации времени.

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

← На главную