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

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

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

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

---

1. Особенности работы планировщика регламентных заданий в файловом режиме

Для начала разберем главный вопрос: почему регламентное задание автора не отрабатывало, когда в расписании был задан жесткий интервал активности (например, с 14:00 до 14:02), но стабильно запустилось после настройки повторения «каждые 100 секунд»?

В клиент-серверном варианте за планирование и запуск фоновых задач отвечает специальный менеджер кластера. Он работает непрерывно и с точностью до миллисекунд инициирует выполнение потоков. В файловом режиме полноценный сервер отсутствует. Роль планировщика выполняет активный сеанс пользователя, запущенный в режиме «Предприятие».

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

---

2. Исправление ошибки «Недостаточно фактических параметров для метода фонового задания»

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


Процедура ПроизвестиФоновоеВычисление(Параметр) Экспорт
    ВыполнитьОбработкуЗаданий;
    ВремНач = ТекущаяДата; // Обратите внимание: правильно писать ТекущаяДата() со скобками
    Пока ТекущаяДата() - ВремНач <= 2 Цикл
        // Имитация задержки
    КонецЦикла;
КонецПроцедуры

В чем заключается ошибка? Метод общего модуля, который напрямую привязывается к регламентному заданию в конфигураторе через свойство «Имя метода», вызывается планировщиком без передачи аргументов. Если в объявлении процедуры указан обязательный параметр Параметр, платформа не сможет сопоставить вызов и выбросит исключение.

Разберем два способа решения этой проблемы.

Способ А. Использование необязательных параметров (значений по умолчанию)

Самый простой вариант — сделать все параметры процедуры общего модуля необязательными. Для этого достаточно присвоить им значение по умолчанию (например, Неопределено) непосредственно в сигнатуре метода:


Процедура ПроизвестиФоновоеВычисление(Параметр = Неопределено) Экспорт
    // Теперь процедуру можно вызывать как с параметром, так и без него
    Если Параметр <> Неопределено Тогда
        // Логика обработки переданного параметра
    КонецЕсли;
КонецПроцедуры

Способ Б. Программная передача параметров в регламентное задание

Если параметры передавать необходимо и они определяются динамически, стандартного интерактивного расписания будет недостаточно. В этом случае нам потребуется создать и запустить задание программно, передав параметры в виде массива:


// Создаем массив параметров для передачи в фоновое задание
МассивПараметров = Новый Массив;
МассивПараметров.Добавить("ВажноеЗначениеПараметра");

// Получаем регламентное задание по метаданным или ищем существующее
РеглЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.МоеРегламентноеЗадание);
РеглЗадание.Параметры = МассивПараметров;
РеглЗадание.Использование = Истина;
РеглЗадание.Записать();

---

3. Миф о флаге «Вызов сервера» для общих модулей регламентных заданий

В процессе обсуждения на форуме автору посоветовали включить флаг «Вызов сервера» (Server call) для общего модуля, в котором расположена процедура регламентного задания. Рассмотрим подробнее, почему этот совет является технически неверным и вредным.

---

4. Очередь выполнения и задержки отладки в файловом режиме

Автор темы столкнулся с тем, что при ручном запуске фонового задания через обработку отладчик сработал на точке останова только спустя 7–8 минут. Почему возникла такая гигантская задержка?

Это связано со спецификой однопоточности файлового режима выполнения задач:

  1. В клиент-серверной версии кластер серверов может параллельно выполнять десятки фоновых процессов на разных рабочих процессах (rphost).
  2. В файловом режиме все фоновые и регламентные задания выполняются строго последовательно (в один поток) внутри выделенного сеанса. Если в базе параллельно запущено тяжелое задание (например, автоматическое обновление индекса полнотекстового поиска, как в сообщении 18), планировщик блокирует выполнение всех последующих задач.
  3. Вновь созданное фоновое задание ставится в системную очередь. Платформа начнет его обработку только тогда, когда завершится текущее активное задание. Ожидание в 7–8 минут в кейсе автора — это время, которое потребовалось платформе 1С для завершения индексации полнотекстового поиска перед тем, как передать управление задаче разработчика.

---

5. Пошаговый чек-лист настройки регламентного задания в файловом режиме

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

  1. Проверьте выделенный сеанс: Убедитесь, что в базе запущен активный сеанс пользователя. Перейдите в настройки программы и проверьте, указан ли данный пользователь в поле «Пользователь для регламентных заданий в файловом режиме». Именно под его учетной записью платформа будет инициализировать фоновые процессы.
  2. Инициируйте принудительный запуск планировщика: Если база простаивает, вызовите метод принудительного выполнения задач. Для этого можно использовать простую обработку с кодом:
    
    Процедура ПриНажатииКнопки()
        ВыполнитьОбработкуЗаданий();
    КонецПроцедуры
    
  3. Настройте параметры отладки: Чтобы отладчик перехватывал фоновые задания, в конфигураторе выберите меню Отладка -> Подключение -> Автоматическое подключение и установите флажок «Фоновые задания». Точку останова ставьте непосредственно в процедуре общего модуля.
  4. Проверьте свойство «Использование»: Убедитесь, что у созданного предопределенного или программного регламентного задания флаг Использование установлен в значение Истина. Сделать это надежнее всего через универсальную обработку «Консоль регламентных заданий».
← На главную