Остановка регламентных и фоновых заданий перед обновлением базы 1С 8.3

· 9 мин

Содержание

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

Схема одинакова для всех конфигураций на платформе 8.3: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, ERP. Блокировка ставится на уровне платформы и кластера, а не внутри конкретной программы. Отличаются только пути к форме блокировки пользователей в самой конфигурации.

Зачем останавливать фоновые задания до обновления

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

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

Что бывает, если задания не остановить:

  • ⛔ Конфигуратор не может установить монопольный режим и сообщает, что в базе есть активные сеансы;
  • 🔁 сеанс завершили вручную, а через минуту задание по расписанию запустилось снова;
  • 🧩 обмен успел выгрузить часть данных до обновления, а остальное — уже после, с новой структурой;
  • 🐢 полнотекстовый индекс или пересчёт итогов держит блокировки в СУБД, и реструктуризация идёт в разы дольше.

Время работ выбирайте с оглядкой на расписание заданий. Откройте список регламентных заданий в конфигурации и посмотрите, что стартует ночью: резервное копирование средствами самой 1С, пересчёт итогов, большие обмены. Если обмен с филиалом идёт в 02:00 и длится 40 минут, начинайте обновление не раньше 03:00 или включите блокировку заданий заранее, ещё вечером. Так вы не прервёте пакет на середине.

Отдельный риск — внешние скрипты. Пакетный файл, который каждые 15 минут запускает 1cv8.exe для обмена, переживёт любую блокировку внутри 1С, если не задан код разрешения. О нём ниже.

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

Это основной способ для серверной базы. Нужны права администратора кластера и учётная запись администратора информационной базы.

  1. Запустите «Администрирование серверов 1С Предприятия» (оснастка MMC на сервере или на машине с установленными средствами администрирования).
  2. Раскройте Центральные серверы 1С:Предприятия → имя сервера → Кластеры → кластер → Информационные базы.
  3. Нажмите правой кнопкой на нужную базу и выберите «Свойства». Введите логин и пароль администратора базы.
  4. Включите флажок «Блокировка регламентных заданий включена».
  5. Там же, если нужно не пускать пользователей, включите «Блокировка начала сеансов включена». Заполните время начала и окончания, текст сообщения и «Код разрешения».
  6. Нажмите «ОК».

Код разрешения — любое слово вроде obnov77. С ним администратор войдёт в заблокированную базу, добавив параметр /UC в строку запуска: /UCobnov77. Обычные пользователи увидят текст сообщения и не войдут.

Блокировка начала сеансов и блокировка регламентных заданий — два независимых флажка. Можно включить только второй, если пользователи ещё работают, а задания надо придержать заранее.

То же самое через rac

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

rac cluster list
rac infobase summary list --cluster=<id_кластера>

Затем включите блокировку для базы:

rac infobase update --cluster=<id_кластера> --infobase=<id_базы> ^
  --infobase-user=Администратор --infobase-pwd=*** ^
  --scheduled-jobs-deny=on --sessions-deny=on ^
  --denied-message="Идёт обновление, вход закрыт" --permission-code=obnov77

Для снятия блокировки та же команда с --scheduled-jobs-deny=off --sessions-deny=off. Полный список параметров для вашей версии платформы покажет rac help infobase.

Отключение отдельных заданий внутри конфигурации

Иногда базу блокировать целиком не нужно, достаточно выключить одно-два задания. В типовых конфигурациях на БСП есть форма управления ими: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. В свежих релизах раздел может называться «Поддержка и обслуживание».

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

Активные сеансы фоновых заданий: как найти и завершить

Флажок блокировки не останавливает задание, которое уже идёт. Его нужно увидеть в списке сеансов.

  1. В консоли кластера раскройте базу и откройте ветку «Сеансы».
  2. Смотрите колонку «Приложение». Сеансы регламентных и фоновых заданий отмечены как «Фоновое задание». У COM-соединений и внешних обработок будет «COM-соединение», у пользователей — «Тонкий клиент» или «Веб-клиент».
  3. Колонка со временем начала работы подскажет, давно ли задание висит.

В командной строке список сеансов выводит:

rac session list --cluster=<id_кластера> --infobase=<id_базы>

Что делать с найденными сеансами:

СитуацияДействие
Короткое задание, запущено минуту назадПодождать 3–5 минут и проверить снова
Обмен данными в середине выгрузкиДождаться окончания, иначе часть пакета повиснет
Задание висит часами без видимого прогрессаЗавершить сеанс
Сеанс снова появляется после завершенияИскать внешний источник запуска (см. планировщик)

Завершение сеанса через «Удалить» обрывает транзакцию. Незаписанные данные этого задания откатятся. Если завершаете пользовательский сеанс, человек потеряет несохранённый документ — сначала предупредите его.

Не завершайте рабочий процесс rphost целиком ради одного зависшего задания — он обслуживает сеансы и других баз кластера.

Внешние запуски: планировщик заданий Windows

Многие обмены и выгрузки запускают не изнутри 1С, а из планировщика Windows: пакетный файл вызывает 1cv8.exe ENTERPRISE с обработкой или командой /C. Такой запуск — отдельный клиентский сеанс. Блокировка регламентных заданий его не трогает, а блокировка сеансов остановит, только если в скрипт не прописан код /UC.

Найдите такие задачи на сервере 1С и на машинах, откуда идут обмены. В PowerShell:

Get-ScheduledTask | Where-Object { $_.Actions.Execute -like '*1cv8*' -or $_.Actions.Arguments -like '*1cv8*' } |
  Select-Object TaskName, TaskPath, State

Скрипты, которые зовут 1cv8.exe через .bat или .cmd, этот фильтр не поймает. Их ищите по содержимому файлов в папке со скриптами обменов.

Отключение и включение задачи:

schtasks /Change /TN "\Обмены1С\Выгрузка на сайт" /DISABLE
schtasks /Change /TN "\Обмены1С\Выгрузка на сайт" /ENABLE

Или в PowerShell — Disable-ScheduledTask и Enable-ScheduledTask с параметром -TaskName.

💡 Запишите список отключённых задач в текстовый файл прямо в момент отключения. После обновления вы включите ровно их, а не все подряд, включая давно выключенные специально.

Проверьте и другие источники внешних подключений:

  • 🌐 веб-сервисы и HTTP-сервисы, опубликованные на IIS или Apache — интернет-магазин может стучаться в базу каждые несколько секунд;
  • 🔌 COM-соединения из Excel-макросов и сторонних программ;
  • 🔄 агенты интеграций (шины данных, сервисы ЭДО), работающие как службы Windows.

Для публикаций на веб-сервере на время работ проще остановить пул приложений в IIS или убрать публикацию. Внешние системы получат ошибку, а не полуобновлённые данные.

Блокировки в СУБД: проверка перед реструктуризацией

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

Microsoft SQL Server

Кто держит блокировки и кто ждёт:

SELECT r.session_id, r.blocking_session_id, r.wait_type, r.wait_time,
       s.program_name, s.host_name, r.command
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
WHERE r.database_id = DB_ID('имя_базы');

Сессии рабочих процессов 1С обычно видны с program_name, содержащим «1CV8». Строки с ненулевым blocking_session_id показывают цепочку ожиданий. Быстрый общий обзор даёт EXEC sp_who2;.

PostgreSQL

SELECT pid, usename, application_name, state, query_start,
       pg_blocking_pids(pid) AS blocked_by
FROM pg_stat_activity
WHERE datname = 'имя_базы';

Сессии в состоянии idle in transaction с давним query_start — первые кандидаты на разбор.

Принудительное завершение (KILL <spid> в SQL Server, SELECT pg_terminate_backend(pid); в PostgreSQL) откатывает транзакцию и рвёт соединение рабочего процесса. Делайте это только когда в консоли кластера сеансов этой базы уже нет и пользователи предупреждены. Завершать сессии чужих баз на том же сервере СУБД нельзя.

Обновление в монопольном режиме

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

Перед запуском обновления
Выполнено: 0 / 6

Входите в Конфигуратор с кодом разрешения. Пример строки запуска:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER /S srv1c\buh /N Администратор /P *** /UCobnov77

Номер версии в пути подставьте свой. Дальше обычный порядок: загрузка или сравнение-объединение конфигурации, затем «Обновить конфигурацию базы данных». Монопольный доступ платформа требует именно на этапе обновления конфигурации базы данных, когда меняется структура таблиц.

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

Файловая база

Для файлового варианта консоли кластера нет. Регламентные задания там выполняет один из клиентских сеансов, открытых в режиме Предприятия. Порядок такой:

  1. В самой программе включите блокировку: Администрирование → Обслуживание → Регламентные операции → Блокировка работы пользователей. Укажите сообщение и код разрешения.
  2. Запуск клиента для служебных действий делайте с параметром /AllowExecuteScheduledJobs -Off, чтобы этот сеанс не подхватил регламентные задания.
  3. Убедитесь, что никто не держит базу открытой: при попытке монопольного доступа Конфигуратор покажет ошибку, а список подключений есть в форме «Активные пользователи».

Если база опубликована на веб-сервере, остановите и публикацию — через неё тоже могут выполняться задания.

Пакетное обновление скриптом

Для ночных регламентов обновление собирают в один сценарий: rac infobase update ... --scheduled-jobs-deny=on --sessions-deny=on, затем 1cv8.exe DESIGNER ... /UC<код> /UpdateCfg <файл.cf> /UpdateDBCfg, затем снятие блокировки. Записывайте вывод Конфигуратора в журнал параметром /Out <файл.log> — без него причину ночного сбоя не найти.

Возврат базы к работе после обновления

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

Порядок возврата:

  1. Первым войдите в режим Предприятия сами, с кодом /UC. Типовая конфигурация выполнит обработчики обновления и покажет сообщение о результате.
  2. Снимите флажок «Блокировка начала сеансов включена» и, отдельно, «Блокировка регламентных заданий включена» в консоли кластера (или --scheduled-jobs-deny=off). В файловой базе снимите блокировку работы пользователей.
  3. Включите обратно задачи планировщика Windows по сохранённому списку и запустите веб-публикации.
  4. Через 15–30 минут откройте форму регламентных и фоновых заданий и посмотрите, что задания отработали без ошибок.

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

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

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

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