Обновление без фоновых сюрпризов: останавливаем регламентные задания 1С

· 9 мин

Содержание

Чтобы отключить регламентные задания при обновлении 1С в клиент-серверной базе, откройте консоль Администрирование серверов 1С Предприятия, найдите базу в списке Информационные базы, откройте её свойства и включите флажок Блокировка регламентных заданий включена. То же самое делает команда rac infobase update ... --scheduled-jobs-deny=on. После обновления флажок снимают, иначе обмены, загрузка курсов и отложенные обработчики обновления так и не запустятся.

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

Зачем останавливать фоновые процессы перед обновлением

Регламентные задания — это процедуры, которые 1С запускает сама по расписанию: обмен с сайтом и другими базами, загрузка курсов валют и классификатора банков, получение документов ЭДО, отправка почты, пересчёт итогов, полнотекстовый индекс. Каждое такое задание работает в собственном сеансе с типом «Фоновое задание».

Для обновления это создаёт три проблемы:

  • 🔒 Монопольный режим не устанавливается. Обновление структуры базы данных требует монопольного доступа. Пока висит хотя бы один фоновый сеанс, Конфигуратор не сможет его получить и предложит динамическое обновление или откажет.
  • 🔄 Задание стартует посреди обновления. Расписание не знает про ваши планы. Обмен, запущенный через минуту после того, как все вышли, снова займёт базу.
  • 📤 Данные уходят наружу в промежуточном состоянии. Обмен или выгрузка на сайт, запущенные сразу после обновления структуры, но до завершения обработчиков обновления, могут отправить неполные данные.

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

Блокировка регламентных заданий в консоли кластера

Это основной и самый надёжный способ для серверной базы. Работает на уровне платформы и не зависит от конфигурации: одинаково для БП 3.0, ЗУП 3.1, УТ 11 и ERP.

Пошагово

  1. Запустите консоль администрирования кластера (оснастка Администрирование серверов 1С Предприятия). Если оснастка не открывается или пишет об ошибке регистрации, перерегистрируйте radmin.dll той версии платформы, что стоит на сервере: regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\radmin.dll" из командной строки от имени администратора.
  2. Раскройте Central 1C:Enterprise 8.3 servers → ваш сервер → Кластеры → кластер → Информационные базы.
  3. Щёлкните правой кнопкой по базе → Свойства. Введите логин и пароль администратора информационной базы (пользователь 1С с полными правами), если консоль их запросит.
  4. Отметьте Блокировка регламентных заданий включена и нажмите OK.

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

Если включаете блокировку начала сеансов, обязательно задайте код разрешения. Без него вы сами не войдёте в Конфигуратор. С кодом подключаются с параметром запуска /UC<код>.

Что делать после обновления

После того как обновление прошло и вы один раз вошли в базу в режиме 1С:Предприятие (чтобы отработали обработчики обновления), снимите оба флажка в тех же свойствах.

Не оставляйте блокировку регламентных заданий включённой после обновления. В типовых конфигурациях на БСП часть обработчиков обновления выполняется отложенно, фоновым регламентным заданием. С включённой блокировкой оно не стартует, и программа неделями будет показывать, что обновление не завершено.

Регламентные задания в настройках самой конфигурации

Второй уровень управления — внутри программы. Он нужен, когда надо выключить одно конкретное задание, а не все сразу, или когда доступа к консоли кластера нет.

В БП 3.0, ЗУП 3.1, УТ 11 и других конфигурациях на БСП список открывается так: Администрирование → Обслуживание → раздел регламентных операций → Регламентные и фоновые задания. В некоторых релизах раздел Обслуживание называется Поддержка и обслуживание.

На форме две вкладки: регламентные задания (с расписанием) и фоновые задания (что выполняется и выполнялось недавно). В карточке регламентного задания есть флажок Включено и настройка расписания.

СпособЧто выключаетКогда подходитМинусы
Флажок в консоли кластераВсе задания базы сразуПлановое обновление серверной базыНужен доступ к серверу
rac ... --scheduled-jobs-deny=onТо же самоеНочные обновления по скриптуНужен запущенный ras
Флажок Включено в карточке заданияОдно заданиеПроблемное задание мешает регулярноЛегко забыть включить обратно
Расписание заданияСдвигает время запускаЗадание пересекается с окном обслуживанияНе защищает от ручного запуска

Если вы выключаете задания поштучно, запишите, какие были включены. После обновления часть заданий могла получить новое расписание или новые параметры по умолчанию. Сверьте список, а не включайте всё подряд.

Для одного неудобного задания проще сдвинуть расписание, чем выключать его. Например, обмен с сайтом каждые 10 минут можно ограничить интервалом с 07:00 до 22:00 — тогда ночное окно обновления останется свободным.

Файловая и клиент-серверная база: в чём разница

В клиент-серверном варианте регламентные задания запускает менеджер кластера, независимо от того, сидит ли кто-то в базе. Отсюда и флажок в консоли: без него задание стартует даже в пустой базе.

В файловом варианте сервера нет. Задания выполняются в одном из клиентских сеансов (или на веб-сервере, если база опубликована). Если в базе никого нет, задания не выполняются.

Практические выводы для файловой базы:

  1. Попросите всех выйти из программы и закрыть её полностью. Сеанс с выполняемым заданием может работать в окне, которое пользователь свернул и забыл.
  2. Если база опубликована на веб-сервере, остановите на время обновления публикацию или сам веб-сервер: он тоже может выполнять задания.
  3. Для запуска 1С без выполнения регламентных заданий служит параметр командной строки /AllowExecuteScheduledJobs -Off. Его добавляют в ярлык или в строку запуска, если нужно зайти в файловую базу и поработать, не запуская обмены.
  4. Если программа сообщает, что база занята, а пользователей нет, проверьте процессы 1cv8.exe и 1cv8c.exe на компьютерах, где открыта база. На сетевой папке видны открытые файлы базы через Управление компьютером → Общие папки → Открытые файлы.

Закрывать открытые файлы базы на сетевой папке или снимать процессы 1cv8c.exe у пользователей можно, только когда все предупреждены. Несохранённые документы пропадут, а оборванная запись в файловую базу может её повредить. Перед такими действиями сделайте копию файла 1Cv8.1CD.

Как найти и остановить зависшее фоновое задание

Флажок включён, а Конфигуратор всё равно не получает монопольный доступ. Значит, в базе остался сеанс, который стартовал раньше блокировки.

Где смотреть

  • 🖥 Консоль кластера: база → Сеансы. В колонке приложения у фоновых сеансов указано «Фоновое задание». Рядом видно время начала и хост.
  • 📋 Внутри программы: Регламентные и фоновые задания → вкладка фоновых заданий. Состояния: «Активно», «Завершено», «Завершено аварийно», «Отменено». Активное задание можно отменить кнопкой на этой форме.
  • ⌨️ Командная строка: rac session list --cluster=<id кластера> --infobase=<id базы> выводит все сеансы базы с типом приложения.

Как остановить

Сначала попробуйте отменить задание из программы: это штатное завершение, задание само откатит транзакцию. Если через 2–3 минуты оно всё ещё «Активно», удалите сеанс в консоли кластера (правая кнопка по сеансу → Удалить) или командой rac session terminate --cluster=<id> --session=<id сеанса>.

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

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

Диагностика: выберите симптом

Скрипт: блокировка, обновление и разблокировка в одном файле

Ночные обновления удобно запускать по расписанию планировщика Windows. Скрипт использует утилиту rac, которой нужен запущенный сервер администрирования ras (по умолчанию порт 1545). Он ставится вместе с сервером 1С и запускается как служба или вручную: ras cluster --daemon.

Идентификаторы кластера и базы получите один раз:

rac localhost:1545 cluster list
rac localhost:1545 infobase summary list --cluster=<id кластера>

Сам сценарий обновления:

@echo off
set RAC="C:\Program Files\1cv8\8.3.xx.xxxx\bin\rac.exe"
set V8="C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe"
set CLUSTER=<id кластера>
set IB=<id базы>
set IBUSER=Администратор
set IBPWD=пароль
set CODE=12345

rem 1. Запрещаем регламентные задания и новые сеансы
%RAC% localhost:1545 infobase update --cluster=%CLUSTER% --infobase=%IB% ^
  --infobase-user=%IBUSER% --infobase-pwd=%IBPWD% ^
  --scheduled-jobs-deny=on --sessions-deny=on --permission-code=%CODE% ^
  --denied-message="Обновление базы, вход временно закрыт"

rem 2. Обновляем конфигурацию из файла .cfu и структуру базы
%V8% DESIGNER /S srv-1c\buh /N %IBUSER% /P %IBPWD% /UC%CODE% ^
  /UpdateCfg "D:\update\1Cv8.cfu" /UpdateDBCfg /Out "D:\update\log.txt"

rem 3. Снимаем обе блокировки
%RAC% localhost:1545 infobase update --cluster=%CLUSTER% --infobase=%IB% ^
  --infobase-user=%IBUSER% --infobase-pwd=%IBPWD% ^
  --scheduled-jobs-deny=off --sessions-deny=off

Что стоит знать про этот скрипт:

  • 🔑 Если у кластера задан администратор, добавьте в каждую команду rac параметры --cluster-user и --cluster-pwd.
  • 👥 Скрипт не выгоняет тех, кто уже работает. Перед шагом 2 добавьте завершение сеансов через rac session list и rac session terminate, но только если пользователи предупреждены заранее.
  • 📝 Лог Конфигуратора (/Out) проверяйте после каждого запуска. Ошибка шага 2 не остановит шаг 3, и база откроется с необновлённой конфигурацией.
  • 🔐 Пароли в bat-файле храните в папке с доступом только для администратора. Для уверенности в параметрах смотрите встроенную справку: rac help infobase.
  • ▶️ После скрипта зайдите в базу в режиме 1С:Предприятие под администратором, чтобы выполнились обработчики обновления, иначе пользователи утром первыми увидят окно обновления.

Перед ночным обновлением по скрипту сделайте резервную копию средствами СУБД (MS SQL или PostgreSQL). Это быстрее выгрузки в .dt и не требует монопольного доступа.

Частые ошибки

  • ❌ Включили блокировку и сразу запустили обновление. Активные задания при этом продолжают работать. Сначала проверьте сеансы базы.
  • ❌ Поставили блокировку начала сеансов без кода разрешения. Администратор сам не может войти. Снимите блокировку в консоли или командой rac с --sessions-deny=off.
  • ❌ Выключили задания внутри программы для файловой базы, а пользователь остался в базе. Для файловой базы главное — чтобы никто не был в программе, флажки внутри конфигурации второстепенны.
  • ❌ Забыли про другие базы на том же сервере. Блокировка ставится на конкретную базу. Если обновляете несколько, флажок нужен в каждой.

Частые вопросы

Влияет ли блокировка регламентных заданий на работу пользователей?
Пользователи продолжают работать, не выполняются только задания по расписанию. Курсы валют и обмены придётся запускать вручную, пока блокировка стоит.
Можно ли обновлять конфигурацию, не останавливая задания?
Можно, если обновление не меняет структуру базы и платформа применит его динамически. Но при первой же реструктуризации понадобится монопольный режим, а значит, и остановка заданий.
Нужно ли блокировать задания в тестовой копии базы?
Да, и лучше постоянно. Копия рабочей базы с включёнными заданиями будет отправлять почту, выгружать данные на сайт и в обмены от имени рабочей. В серверной копии флажок блокировки в консоли кластера решает это сразу.
Кто может включить блокировку в консоли?
Тот, кто знает пароль администратора кластера (если он задан) и логин с паролем администратора информационной базы. Прав только на сервер Windows недостаточно, если в кластере настроены администраторы.
Сохранится ли блокировка после перезагрузки сервера?
Да. Флажок хранится в настройках кластера и остаётся включённым, пока его не снимут вручную или командой.