При переносе базы данных из клиент-серверного варианта в файловый разработчики нередко сталкиваются с ситуацией, когда настроенные по расписанию регламентные задания перестают выполняться или не попадают в точки останова конфигуратора при попытке отладки. Разберем детально, как устроена работа механизма заданий в файловом режиме, какие параметры запуска необходимо использовать и как правильно настроить отладчик для перехвата фоновых потоков.
Проанализируем ключевые технические отличия файловой архитектуры от клиент-серверной:
По умолчанию в файловой базе платформа назначает исполнителем регламентных заданий первый открытый сеанс. Однако это поведение можно переопределить с помощью специального параметра командной строки. Обратим внимание на синтаксис ключа запуска:
/AllowExecuteScheduledJobs -Force. Этот ключ заставляет текущий сеанс принудительно взять на себя роль планировщика и исполнителя заданий, перехватив ее у других запущенных сеансов, если они уже открыты./AllowExecuteScheduledJobs -Auto включает стандартный алгоритм, при котором фоновые задачи выполняет первый подключившийся пользователь./AllowExecuteScheduledJobs -Off запрещает выполнение регламентных заданий в запускаемом сеансе, что бывает полезно при обновлении конфигурации или выполнении тяжелых регламентных операций вручную.Выясним причину, почему точка останова в коде регламентного задания не срабатывает при обычной отладке. Платформа запускает фоновое задание в изолированном контексте. Чтобы конфигуратор смог перехватить выполнение фонового потока, необходимо настроить отладчик одним из следующих способов.
Способ 1. Настройка автоматического подключения в Конфигураторе
Рассмотрим по шагам включение автоматического перехвата фоновых заданий:
Способ 2. Запуск в режиме отладки для конфигураций на базе БСП
Если конфигурация разработана с использованием Библиотеки стандартных подсистем, можно перевести выполнение фоновых задач в синхронный режим. Для этого перейдем в меню Сервис — Параметры, откроем закладку Запуск 1С:Предприятие, найдем поле Параметры запуска и добавим ключ:
/C РежимОтладки
В этом режиме фоновые задачи выполняются синхронно в основном клиентском потоке, а стандартная обработка управления регламентными заданиями позволяет запускать процедуры вручную без отправки в фоновый процесс, что делает отладку максимально простой и прозрачной.
Способ 3. Прямой программный вызов процедуры
Для быстрой проверки логики процедуры можно воспользоваться внешней обработкой. Посмотрим на пример программного вызова фонового задания из клиентского кода или модуля внешней обработки:
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(Параметр1);
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ИмяОбщегоМодуля.ИмяПроцедуры", ПараметрыЗадания, КлючЗадания, "Тестовый запуск");
ФоновоеЗадание.ОжидатьЗавершения();
Либо можно вызвать целевую процедуру общего модуля напрямую, передав требуемые параметры, если модуль скомпилирован с признаком выполнения на сервере и доступен для прямого вызова.
Если требуется обеспечить постоянную работу регламентных заданий в файловой базе без необходимости постоянно держать открытым сеанс пользователя на рабочем столе, можно опубликовать базу данных на веб-сервере (IIS или Apache). В этом случае обработку задач берет на себя пул веб-сервера. Для активации данного механизма в файле публикации default.vrd настраивается специальная секция:
<scheduledJobs execute="auto"/>
При такой настройке регламентные задания будут выполняться процессами веб-сервера автономно в фоновом режиме даже при отсутствии подключенных пользователей.