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

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

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

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

Главный принцип работы файловой базы: почему «тишина», когда все вышли?

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

Чтобы программный код регламентного задания выполнился, его должен кто-то прочесть и запустить на выполнение. А сделать это может только запущенное приложение «1С:Предприятие». Из этого следует фундаментальное правило:

Если в файловой базе нет ни одного активного сеанса пользователя, никакие регламентные и фоновые задания выполняться не будут.

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

Как платформа 1С 8.3 пытается решить эту проблему по умолчанию

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

Давайте рассмотрим, как работает стандартный механизм запуска в современных релизах платформы:

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

В чем опасность стандартного механизма? Борьба с «зависаниями» пользователей

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

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

Решение проблемы: Настройка выделенного сеанса через планировщик Windows

Чтобы гарантировать стабильное выполнение задач (в том числе в ночное время, когда в офисе никого нет) и избавить пользователей от зависаний интерфейса, мы применим проверенную схему разделения сеансов с помощью параметров командной строки запуска 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)

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

  1. Откроем «Планировщик задач» Windows (taskschd.msc).
  2. Создадим простую задачу с триггером «При запуске компьютера» или «При входе в систему».
  3. В качестве действия выберем «Запуск программы» и укажем путь к нашему созданному .bat файлу.
  4. В настройках задачи обязательно укажем учетную запись, под которой она должна выполняться (желательно использовать специально созданную сервисную учетную запись Windows, у которой есть права доступа к каталогу с базой 1С).

Возможности БСП в конфигурации «1С:Розница 2»

Поскольку современная «1С:Розница 2» разработана на базе Библиотеки стандартных подсистем (БСП), разработчики уже позаботились о дополнительных удобствах для управления фоновыми задачами непосредственно из пользовательского режима.

Давайте разберем по шагам, где найти эти инструменты:

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

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

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

Для решения этой проблемы в БСП встроен отличный механизм. Если мы запустим нашу базу данных из Конфигуратора в режиме отладки (или передадим параметр запуска РежимОтладки), то в форме управления регламентными заданиями (в режиме «1С:Предприятие») появится скрытая в обычном режиме кнопка — «Выполнить не в фоне».

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

Резюме

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

← На главную