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

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

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

Почему регламентные задания не работают без пользователей?

Для начала проанализируем архитектуру файлового режима работы «1С:Предприятие». В отличие от клиент-серверного варианта, где за выполнение расписания отвечает служба кластера серверов 1С (которая запущена непрерывно как служба Windows или демон Linux), в файловом режиме выделенного сервера приложений нет. База данных представляет собой физический файл 1Cv8.1CD на диске.

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

Эволюция планировщика в файловом режиме

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

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

Причины нестабильной работы («через раз») при активных пользователях

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

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

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

---

Решение 1. Разделение ролей пользователей с помощью параметров запуска

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

Для этого используются параметры запуска командной строки 1С:

Алгоритм настройки:

  1. Выберите один наиболее мощный компьютер в локальной сети (или сервер, на котором физически лежит база), который работает постоянно и не выключается в течение дня.
  2. В настройках запуска информационной базы у всех рядовых пользователей добавьте параметр запрета. Для этого откройте окно запуска 1С, выберите нужную базу, нажмите кнопку «Изменить», перейдите на последнюю вкладку и в поле «Дополнительные параметры запуска» введите: /DenyExecuteScheduledJobs
  3. На выделенном компьютере («сервере») запустите сеанс 1С с параметром: /AllowExecuteScheduledJobs

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

---

Решение 2. Использование планировщика задач Windows (Рекомендуемый способ)

Что делать, если ночью в базе никого нет, а регламентные задания (например, резервное копирование или обмен с сайтом) должны отработать? Наиболее надежный способ — настроить регулярный автоматический запуск специального «технического» сеанса 1С через планировщик операционной системы Windows.

Разберем по шагам, как настроить этот процесс:

Шаг 1. Создание служебного пользователя в 1С

В конфигураторе создайте нового пользователя, например, с именем Робот. Назначьте ему полные права (роль Администратор), чтобы у платформы не возникало проблем с доступом к объектам метаданных при выполнении кода под служебной учетной записью DefUser.

Шаг 2. Написание кода для автоматического завершения работы

Чтобы сеанс «Робота» не висел в системе вечно, занимая лицензию и оперативную память, настроим его автоматическое закрытие сразу после того, как он выполнит все необходимые фоновые задачи. Для этого в Конфигураторе откройте Модуль управляемого приложения и найдите предопределенную процедуру ПриНачалеРаботыСистемы(). Добавим в нее код анализа параметров запуска:


Процедура ПриНачалеРаботыСистемы()
    
    // Получаем параметры, переданные через ключ /C командной строки
    ПараметрыЗапускаСкрипта = ПараметрыЗапуска;
    
    Если Найти(ВРег(ПараметрыЗапускаСкрипта), "START_ROBOT") > 0 Тогда
        // Записываем событие старта в Журнал регистрации
        ЗаписатьВЖурналРегистрации("РегламентныеЗадания.Робот", 
            УровеньЖурналаРегистрации.Информация, , , 
            "Запущен регламентный сеанс обслуживания базы.");
            
        Попытка
            // Платформа автоматически запустит фоновый поток выполнения регламентных заданий.
            // Даем ей время на выполнение задач (например, приостанавливаем поток на 2 минуты)
            Предупреждение("Выполнение регламентных задач...", 120);
        Исключение
            ЗаписатьВЖурналРегистрации("РегламентныеЗадания.Робот", 
                УровеньЖурналаРегистрации.Ошибка, , , 
                ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        КонецПопытки;
        
        // Завершаем работу сеанса без вывода диалоговых окон
        ЗавершитьРаботуСистемы(Ложь);
    КонецЕсли;

КонецПроцедуры

Шаг 3. Настройка Планировщика Windows

  1. Откройте «Планировщик заданий» Windows (Task Scheduler).
  2. Создайте «Простую задачу» со временем запуска (например, каждый день в 02:00 ночи или каждые 2 часа).
  3. В качестве действия выберите «Запуск программы».
  4. В поле «Программа или сценарий» укажите путь к исполняемому файлу платформы 1С, например: "C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe"
  5. В поле «Аргументы» пропишите параметры подключения к вашей файловой базе, имя служебного пользователя, пароль и ключ запуска: ENTERPRISE /F "C:\1C_Bases\MyBase" /N "Робот" /P "ПарольРобота" /C "START_ROBOT" /AllowExecuteScheduledJobs

Теперь планировщик Windows будет самостоятельно запускать сеанс 1С в фоновом режиме по расписанию. Сеанс отработает регламентные задания в течение двух минут и корректно закроется, освободив ресурсы компьютера.

---

Решение 3. Публикация на веб-сервере + внешний HTTP-запрос

Если ваша файловая база данных опубликована на веб-сервере (под управлением Microsoft IIS или Apache), веб-сервер способен самостоятельно управлять фоновыми заданиями. Однако для этого также требуется хотя бы одно активное соединение.

Для реализации этого метода можно использовать любой внешний скрипт (например, на языке PowerShell, Python или с помощью утилиты cURL), который будет отправлять пустые HTTP/GET-запросы по расписанию к вашей базе (например, обращаясь к простейшему опубликованному HTTP-сервису 1С).

При получении запроса веб-сервер инициализирует сеанс связи с файловой БД. Платформа тут же проверяет очередь регламентных заданий, запускает накопившиеся фоновые процессы в отдельном потоке, обрабатывает их и закрывает соединение. Это элегантное и незаметное решение, которое отлично подходит для баз данных, работающих в режиме 24/7.

← На главную