При эксплуатации информационных баз 1С:Предприятие в файловом режиме многие разработчики и администраторы сталкиваются с неприятным поведением системы: регламентные задания не запускаются параллельно. Если одно из заданий выполняется длительное время (или работает в бесконечном цикле, опрашивая оборудование), все остальные запланированные регламентные процедуры встают в очередь и не могут стартовать. Выясним причину такого поведения платформы и разберем практические способы решения этой проблемы.
Проанализируем архитектуру платформы 1С:Предприятие 8.3 при работе с файловой информационной базой (формат .1CD). В отличие от клиент-серверного варианта, где диспетчеризацией и параллельным запуском фоновых потоков управляет кластер серверов 1С (агент и рабочие процессы), в файловой реализации серверной части как отдельной службы просто нет.
В файловом режиме действуют следующие жесткие правила:
Разберем по шагам, как развести непрерывный процесс и штатные регламентные задания по разным клиентским сеансам без изменения конфигурации. Платформа 1С позволяет явно указать, какой именно сеанс имеет право запускать регламентные задания, а какой должен быть от них изолирован.
1cv8c.exe ENTERPRISE /F "C:\Bases\Trade" /N "Кассир" /AllowExecuteScheduledJobs -Off
/AllowExecuteScheduledJobs -Off запретит данному сеансу брать на себя глобальные регламентные задания. Его фоновый поток будет занят исключительно локальным опросом оборудования.1cv8c.exe ENTERPRISE /F "C:\Bases\Trade" /N "Робот" /P "Пароль" /AllowExecuteScheduledJobs -Force
/AllowExecuteScheduledJobs -Force гарантирует, что данный сеанс сразу принудительно перехватит выполнение всех регламентных заданий по расписанию и не будет зависеть от рабочих мест пользователей.Рассмотрим еще один эффективный и полностью бесплатный способ организовать работу фоновых процессов. Файловую базу можно опубликовать на веб-сервере (IIS или Apache). В этом сценарии роль сервера приложений частично берет на себя веб-сервер, который работает в фоновом режиме даже тогда, когда все пользователи закрыли программу.
Для активации фоновых заданий в файле публикации default.vrd необходимо настроить специальную директиву:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
base="/Trade"
ib="File="C:\Bases\Trade";">
<scheduledJobs allowExecuteScheduledJobs="true"/>
</point>
Параметр allowExecuteScheduledJobs="true" (или со значением "force") переносит исполнение регламентных заданий в рабочий процесс веб-сервера. Это решает сразу две задачи: задания выполняются круглосуточно по расписанию и перестают зависеть от того, запущен ли клиент 1С у кого-либо из сотрудников.
Проанализируем ситуацию с опросом оборудования каждую секунду. Постоянная запись данных в регистры 1С из бесконечного цикла внутри файловой базы — крайне опасная архитектурная ошибка. Файловая СУБД .1CD использует блокировки на уровне целых таблиц. Ежесекундные транзакции записи неизбежно приведут к взаимоблокировкам пользователей, медленной работе программы и риску повреждения файла базы данных.
Для решения этой задачи применим следующий подход:
ПодключитьОбработчикОжидания(), который раз в несколько секунд или минут забирает уже накопленные пакеты данных из буфера за одну короткую транзакцию.Если требуется запускать тяжелые или редкие процедуры в точное время (например, рассылку расчетных листков в выходной день, когда 1С закрыта), лучшим решением будет использование встроенного планировщика задач Windows (Task Scheduler).
Разберем, как это реализовать:
.epf), в модуле формы или объекте которой размещаем вызов нужного алгоритма.
Процедура ВыполнитьРассылкуИЗакрыть()
// Выполняем алгоритм отправки расчетных листков
СформироватьИОтправитьРасчетныеЛистки();
// Завершаем работу сеанса без вывода диалоговых окон
ЗавершитьРаботуСистемы(Ложь);
КонецПроцедуры
"C:\Program Files\1cv8\current\bin\1cv8.exe" ENTERPRISE /F "C:\Bases\Trade" /N "Робот" /P "Пароль" /Execute "C:\Scripts\SendMails.epf"
Планировщик операционной системы запустит клиент 1С в назначенное время, обработка выполнит рассылку и штатно закроет сеанс, освободив базу данных.
Если информационная база активно растет, а число параллельных фоновых процессов увеличивается, возможности файлового режима будут исчерпаны. В качестве бюджетной альтернативы полноценному серверу 1С следует рассмотреть официальную лицензию «1С:Предприятие 8.3. Сервер МИНИ».
Данная лицензия имеет ограничение до 5 одновременных пользовательских подключений (сеансов), но при этом предоставляет все преимущества полноценного клиент-серверного режима: работу с бесплатной СУБД (PostgreSQL), полноценный кластер серверов, изолированное параллельное исполнение регламентных заданий в отдельных потоках и отсутствие табличных блокировок всей базы при фоновых расчетах.