Как заставить работать и отладить регламентные задания в файловой базе 1С?

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

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

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

Проанализируем ключевые технические отличия файловой архитектуры от клиент-серверной:

  1. Необходимость активного сеанса: в клиент-серверном варианте запуск регламентных заданий выполняет служба кластера серверов 1С независимо от того, вошел ли кто-то из пользователей в программу. В файловой базе собственного системного сервиса нет, поэтому планировщик работает только тогда, когда запущен хотя бы один клиентский сеанс (тонкий или толстый клиент).
  2. Тайминги инициализации: задания стартуют не в момент открытия базы. Внутренний планировщик фоновых заданий инициализируется платформой примерно через 60 секунд после запуска клиентского приложения, а сам механизм регламентных процедур активируется еще через 60 секунд. Соответственно, первое регламентное задание запустится не ранее чем через 1–2 минуты после старта сеанса.
  3. Периодичность опроса очереди: платформа в файловом режиме проверяет необходимость выполнения заданий строго раз в 60 секунд. Даже если в расписании установлен интервал в 10 секунд, в файловом варианте задача не сможет выполняться чаще одного раза в минуту.
  4. Однопоточность выполнения: фоновые задачи в файловой базе выполняются строго по очереди в один поток. Параллельный запуск нескольких заданий одновременно платформой не поддерживается.

Параметры запуска сеанса для управления заданиями

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

  1. Принудительный запуск заданий в текущем сеансе: укажем параметр /AllowExecuteScheduledJobs -Force. Этот ключ заставляет текущий сеанс принудительно взять на себя роль планировщика и исполнителя заданий, перехватив ее у других запущенных сеансов, если они уже открыты.
  2. Автоматическое определение: параметр /AllowExecuteScheduledJobs -Auto включает стандартный алгоритм, при котором фоновые задачи выполняет первый подключившийся пользователь.
  3. Полное отключение регламентных процедур: ключ /AllowExecuteScheduledJobs -Off запрещает выполнение регламентных заданий в запускаемом сеансе, что бывает полезно при обновлении конфигурации или выполнении тяжелых регламентных операций вручную.

Как выполнить отладку регламентных и фоновых заданий

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

Способ 1. Настройка автоматического подключения в Конфигураторе

Рассмотрим по шагам включение автоматического перехвата фоновых заданий:

  1. Откроем Конфигуратор и перейдем в главное меню: Отладка — Подключение...
  2. В открывшемся окне нажмем кнопку Настройка автоматического подключения.
  3. Установим флажок напротив пункта Фоновые задания и нажмем ОК.
  4. Установим точку останова в процедуре общего модуля, которая вызывается регламентным заданием. Как только фоновый поток будет инициализирован, конфигуратор автоматически подключится к нему и остановится на указанной строке.

Способ 2. Запуск в режиме отладки для конфигураций на базе БСП

Если конфигурация разработана с использованием Библиотеки стандартных подсистем, можно перевести выполнение фоновых задач в синхронный режим. Для этого перейдем в меню Сервис — Параметры, откроем закладку Запуск 1С:Предприятие, найдем поле Параметры запуска и добавим ключ:

/C РежимОтладки

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

Способ 3. Прямой программный вызов процедуры

Для быстрой проверки логики процедуры можно воспользоваться внешней обработкой. Посмотрим на пример программного вызова фонового задания из клиентского кода или модуля внешней обработки:


ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(Параметр1);

ФоновоеЗадание = ФоновыеЗадания.Выполнить("ИмяОбщегоМодуля.ИмяПроцедуры", ПараметрыЗадания, КлючЗадания, "Тестовый запуск");
ФоновоеЗадание.ОжидатьЗавершения();

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

Автономная работа регламентных заданий без запуска клиента

Если требуется обеспечить постоянную работу регламентных заданий в файловой базе без необходимости постоянно держать открытым сеанс пользователя на рабочем столе, можно опубликовать базу данных на веб-сервере (IIS или Apache). В этом случае обработку задач берет на себя пул веб-сервера. Для активации данного механизма в файле публикации default.vrd настраивается специальная секция:

<scheduledJobs execute="auto"/>

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

← На главную