При переходе с клиент-серверной версии «1С:Предприятие» на файловую (или при первоначальной настройке небольшой базы, например, «1С:Розница 2») многие администраторы и разработчики сталкиваются с неприятным сюрпризом: регламентные задания перестают выполняться сами по себе. В серверном варианте за запуск фоновых процессов отвечает непосредственно сервер приложений, работающий как служба. Но как обстоят дела в файловом режиме, где базы данных представляют собой лишь набор файлов на жестком диске?
В этой статье мы подробно проанализируем, почему возникает эта проблема, как устроена архитектура выполнения регламентных заданий в файловой версии платформы «1С:Предприятие 8.3», и рассмотрим по шагам практические способы настройки стабильной автоматической работы регламентных операций.
Для начала выясним причину, по которой регламентные задания засыпают в пустой файловой базе. Проанализируем физическую структуру файлового режима. База данных здесь — это просто файл с расширением .1CD на диске компьютера или сетевом ресурсе. Сам по себе этот файл не содержит никаких активных исполняемых процессов. Операционная система Windows или Linux ничего не знает о том, какой код написан внутри базы 1С.
Чтобы программный код регламентного задания выполнился, его должен кто-то прочесть и запустить на выполнение. А сделать это может только запущенное приложение «1С:Предприятие». Из этого следует фундаментальное правило:
Если в файловой базе нет ни одного активного сеанса пользователя, никакие регламентные и фоновые задания выполняться не будут.
Как только последний пользователь закрывает программу, база полностью «засыпает» и превращается в статичный набор данных на диске.
В старых версиях платформы (1С:Предприятие 8.2 и ранее) для запуска заданий требовалось вручную внедрять в конфигурацию вызов метода ВыполнитьОбработкуЗаданий() через обработчик ожидания. В современной платформе 1С 8.3 механизм значительно усовершенствован, и платформа пытается автоматизировать этот процесс.
Давайте рассмотрим, как работает стандартный механизм запуска в современных релизах платформы:
Хотя стандартный механизм «первого зашедшего» выглядит удобно, на практике он порождает серьезную проблему для производительности. Поскольку тяжелые фоновые задания (такие как расчет себестоимости, загрузка курсов валют, обмен данными с интернет-магазином или распределенными информационными базами) выполняются на компьютере случайного пользователя, его рабочая станция начинает испытывать колоссальную нагрузку.
В такие моменты пользователь сталкивается с тем, что программа 1С начинает жутко «тормозить» или вовсе зависает с надписью «Не отвечает». Чтобы избежать жалоб со стороны сотрудников, нам необходимо разделить сеансы обычных пользователей и сеанс выполнения регламентных задач.
Чтобы гарантировать стабильное выполнение задач (в том числе в ночное время, когда в офисе никого нет) и избавить пользователей от зависаний интерфейса, мы применим проверенную схему разделения сеансов с помощью параметров командной строки запуска 1С.
Мы полностью запретим выполнять регламентные задания на рабочих местах рядовых сотрудников, а для их обработки запустим один единственный служебный сеанс на постоянно включенном компьютере (например, на сервере или машине администратора).
Шаг 1. Настройка ярлыков для обычных пользователей
Для всех пользователей базы нам нужно принудительно отключить возможность выполнения регламентных задач в их сеансах. Для этого отредактируем параметры запуска в ярлыках или в окне запуска 1С, добавив специальный ключ:
/AllowExecuteScheduledJobs -Off
После добавления этого ключа сеанс данного пользователя больше никогда не будет привлекаться системой для выполнения фоновых задач, и его компьютер будет работать на полную мощность.
Шаг 2. Создание выделенного пользователя в базе
В конфигураторе «1С:Розница» создадим специального пользователя (например, с именем Робот или Scheduler) и установим для него надежный пароль. Давать ему полные права не обязательно, достаточно предоставить права, необходимые для выполнения конкретных фоновых задач, но для простоты администрирования часто используют учетную запись с административными правами.
Шаг 3. Создание бат-файла (.bat) для запуска планировщика
Для автоматического запуска служебного сеанса создадим текстовый файл с расширением .bat. В нем пропишем команду запуска 1С под нашей служебной учетной записью с принудительным разрешением выполнять регламентные задачи. Рассмотрим пример содержимого такого файла:
@echo off
rem Путь к исполняемому файлу платформы 1С
set 1C_PATH="C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe"
rem Путь к нашей файловой базе данных
set BASE_PATH="C:\1C_Bases\Retail2"
rem Запуск сеанса робота с принудительным включением регламентных заданий
%1C_PATH% ENTERPRISE /F %BASE_PATH% /N "Robot" /P "SuperPassword123" /AllowExecuteScheduledJobs -Force
Параметр /AllowExecuteScheduledJobs -Force указывает платформе, что этот сеанс берет на себя монопольное право на выполнение всех фоновых задач в этой базе данных.
Шаг 4. Настройка планировщика задач Windows (Task Scheduler)
Теперь настроим операционную систему так, чтобы наш бат-файл запускался автоматически, например, при старте компьютера или при входе в систему определенного пользователя:
taskschd.msc)..bat файлу.Поскольку современная «1С:Розница 2» разработана на базе Библиотеки стандартных подсистем (БСП), разработчики уже позаботились о дополнительных удобствах для управления фоновыми задачами непосредственно из пользовательского режима.
Давайте разберем по шагам, где найти эти инструменты:
Отладка фоновых заданий в файловом режиме — это традиционная головная боль для разработчиков 1С. Поскольку фоновые потоки запускаются обособленно, поймать точку останова внутри модуля регламентного задания бывает крайне сложно.
Для решения этой проблемы в БСП встроен отличный механизм. Если мы запустим нашу базу данных из Конфигуратора в режиме отладки (или передадим параметр запуска РежимОтладки), то в форме управления регламентными заданиями (в режиме «1С:Предприятие») появится скрытая в обычном режиме кнопка — «Выполнить не в фоне».
При нажатии этой кнопки код регламентного задания выполнится непосредственно в текущем активном сеансе (в главном потоке приложения). Это позволяет без труда отлаживать любые сложные алгоритмы по шагам, ставить точки останова и просматривать значения переменных, не прибегая к сложным схемам подключения к фоновым процессам.
Мы выяснили, что регламентные задания в файловой версии «1С:Розница 2» отлично работают, но требуют обязательного наличия хотя бы одного запущенного сеанса программы. Использование стандартного распределения задач по пользовательским ПК чревато потерей производительности и зависанием интерфейсов. Наиболее надежным профессиональным решением является выделение отдельного фонового сеанса («Робота»), запускаемого автоматически средствами операционной системы через планировщик Windows с использованием параметров командной строки.