Работа с регламентными и фоновыми заданиями в файловом варианте 1С 8.3 имеет свои особенности. В отличие от клиент-серверного варианта, где заданиями управляет сервер приложений, в файловой базе выполнение задач ложится «на плечи» одного из активных клиентских сеансов. Это часто создает проблемы при необходимости выполнения монопольных операций, таких как обновление конфигурации, удаление помеченных объектов или групповое перепроведение документов. Разберем подробно, как эффективно управлять этим механизмом и гарантированно блокировать фоновую активность.
Для начала проанализируем ситуацию: в файловой базе 8.3 платформа автоматически назначает один из запущенных сеансов ответственным за выполнение регламентных заданий. Если этот сеанс закрывается, полномочия «перетекают» к другому активному пользователю. Именно поэтому простое закрытие «тормозящего» окна 1С не всегда помогает — задание может просто перезапуститься в соседнем открытом сеансе. Чтобы этого избежать, нам необходимо использовать специальные методы блокировки.
Это самый надежный и оперативный метод. Мы можем указать платформе при запуске, должен ли данный конкретный сеанс брать на себя выполнение фоновых задач. Рассмотрим основной ключ:
/AllowExecuteScheduledJobs -Off
Разберем по шагам, как его применить:
Важный нюанс: Обратите внимание на символ перед Off. Часто при копировании из текстовых редакторов вместо обычного дефиса вставляется длинное тире. В этом случае ключ не сработает, и задания продолжат выполняться. Используйте только стандартный короткий дефис: -Off.
Если мы хотим полностью исключить выполнение заданий, необходимо запустить все активные сеансы с этим ключом. Если хотя бы один пользователь зайдет без него, платформа передаст выполнение регламентных задач именно ему.
Существует также альтернативный ключ, который управляет настройкой базы в целом:
/SchJobDn Y (где Y — Yes, запретить; N — No, разрешить).
Если нам нужно настроить блокировку для конкретной базы на постоянной основе, мы можем отредактировать файл настроек списка баз. Обычно он находится по пути %AppData%\1C\1CEStart\ibases.v8i. Найдем в нем блок настроек нашей информационной базы и добавим следующую строку:
ScheduledJobsDoNotPerform=1
После этого любой запуск данной базы через стандартный список будет игнорировать выполнение регламентных заданий. Это удобно для администраторов, которым нужно быстро зайти в базу для обслуживания, не опасаясь внезапного старта фоновых процессов.
В современных типовых конфигурациях (Бухгалтерия предприятия 3.0, Управление нашей фирмой, Документооборот и др.) предусмотрены встроенные средства управления. Выясним, где они находятся:
Если в вашем меню нет такого пункта, воспользуйтесь настройкой навигации (значок шестеренки в углу раздела) и добавьте команду Регламентные и фоновые задания в правую колонку. А если конфигурация не содержит БСП, для настройки и отключения фоновых процессов подойдёт обработка для управления регламентными заданиями.
Для разработчиков наиболее правильным способом является установка блокировки на уровне всей информационной базы программным путем. Это аналогично установке «галки» в консоли сервера 1С. Рассмотрим пример кода, который можно выполнить во внешней обработке:
// Устанавливаем блокировку регламентных заданий
Процедура ЗаблокироватьЗадания()
РегламентныеЗадания.УстановитьБлокировкуРегламентныхЗаданий(Истина);
Сообщить("Выполнение регламентных заданий заблокировано для всей базы.");
КонецПроцедуры
// Снимаем блокировку
Процедура РазблокироватьЗадания()
РегламентныеЗадания.УстановитьБлокировкуРегламентныхЗаданий(Ложь);
Сообщить("Выполнение регламентных заданий разрешено.");
КонецПроцедуры
Преимущество этого метода в том, что он записывает состояние блокировки в параметры самой базы данных. Даже если пользователи зайдут без специальных ключей запуска, задания не стартуют. Для переключения этого режима через пользовательский интерфейс подойдёт обработка для управления блокировками регламентных заданий.
Проанализируем ситуацию, когда необходимо запретить задания на уровне всего компьютера (например, на терминальном сервере). Для этого используется файл conf.cfg, расположенный в папке bin\conf установленной платформы. Добавим в него параметр:
DoNotPerformScheduledJobsOnClient=1
Это заставит все экземпляры 1cv8.exe, запущенные на данной машине, игнорировать любые регламентные задачи во всех файловых базах. Это радикальный, но эффективный метод для серверных сред.
Часто пользователи жалуются на «тормоза», вызванные фоновыми заданиями, даже если они пытались их отключить. Одной из самых ресурсоемких задач является Обновление индекса полнотекстового поиска. В файловом режиме при массовом изменении данных это задание может практически полностью блокировать работу.
Если вы столкнулись с критическим падением производительности, выполним следующие действия:
Это не только остановит текущее задание, но и высвободит значительные ресурсы оперативной памяти и дисковой подсистемы.
Чтобы гарантированно получить монопольный доступ к файловой базе, рекомендуется придерживаться следующего алгоритма:
1cv8.exe или 1cv8c.exe и завершите их./AllowExecuteScheduledJobs -Off.Помните, что фоновое задание, которое уже начало выполняться, не прервется мгновенно при установке блокировки. Платформа позволит ему завершить текущую транзакцию, поэтому после установки программной блокировки стоит подождать несколько минут перед началом ответственных работ.