Фоновые и регламентные задания на сервере 1С: остановка, блокировка, расписание

· 10 мин

Содержание

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

Если нужно выключить не всё, а одно задание (например, загрузку курсов или обмен с сайтом), делайте это внутри базы: снимите флажок «Включено» у конкретного регламентного задания.

Как устроены фоновые задания в серверной 1С

Фоновое задание — это вызов процедуры общего модуля, который сервер выполняет без интерфейса и без пользователя за экраном. У каждого задания свой сеанс в кластере, он виден в списке сеансов как приложение «Фоновое задание» (в rac — BackgroundJob).

Откуда они берутся:

  • ⏰ Регламентные задания — описаны в конфигурации, запускаются менеджером кластера по расписанию. Обмены, загрузка курсов валют, обновление индексов полнотекстового поиска, получение писем, обмен с ЭДО.
  • 🧩 Фоновые задания из кода — запускаются методом ФоновыеЗадания.Выполнить(): длительное формирование отчёта, закрытие месяца , групповое перепроведение, обработчики обновления.
  • 🔄 Служебные задания платформы и БСП — отложенные обработчики обновления, очистка устаревших данных, поиск дублей.

Отключать задания приходится в нескольких ситуациях:

СитуацияЧто отключать
Развернули тестовую копию рабочей базыВсе регламентные, сразу после загрузки
Обновление конфигурации или реструктуризацияВсе, на время работ
Задание грузит сервер днёмОдно, плюс перенос расписания
Задание зависло и держит блокировкиКонкретный сеанс
Ошибка в задании валит рабочий процессОдно, до исправления

Тестовая копия с включёнными регламентными заданиями опасна. Она может отправить документы в ЭДО, выгрузить заказы на сайт или загрузить выписку из банка от имени рабочей организации. Блокировку включайте до первого входа в копию.

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

Консоль администрирования серверов 1С:Предприятия — основной инструмент администратора. Флажок блокировки хранится в настройках кластера, а не в самой базе, поэтому действует на все сеансы сразу.

Отключение всех регламентных заданий базы

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

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

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

Остановка уже запущенного задания

Блокировка не прерывает то, что выполняется прямо сейчас. Для этого:

  1. В той же базе откройте ветку «Сеансы».
  2. Найдите строки, где в колонке «Приложение» указано «Фоновое задание».
  3. Посмотрите на «Время вызова (текущее)» и счётчики блокировок СУБД: именно эти колонки показывают, какое задание висит.
  4. Правой кнопкой по сеансу → «Удалить».

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

Управление заданиями через ras и rac из командной строки

Когда серверов несколько или консоль недоступна (Linux, удалённый доступ по SSH), удобнее rac. Утилита ходит не к агенту напрямую, а к серверу администрирования ras, поэтому сначала запустите его на сервере 1С:

# Windows: из каталога платформы, например C:\Program Files\1cv8\8.3.xx.xxxx\bin
ras cluster --daemon
# по умолчанию ras слушает порт 1545 и подключается к агенту на 1540

Дальше — получение идентификаторов и включение блокировки:

# 1. UUID кластера
rac cluster list

# 2. UUID нужной базы
rac infobase summary list --cluster=<cluster-uuid>

# 3. Включить блокировку регламентных заданий
rac infobase update --cluster=<cluster-uuid> \
  --infobase=<infobase-uuid> \
  --infobase-user="Администратор" --infobase-pwd="пароль" \
  --scheduled-jobs-deny=on

# Снять блокировку — то же самое с --scheduled-jobs-deny=off

Если на кластере заведён администратор, добавьте к каждой команде --cluster-user и --cluster-pwd.

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

# Сеансы базы: ищите app-id : BackgroundJob
rac session list --cluster=<cluster-uuid> --infobase=<infobase-uuid>

# Завершить сеанс задания
rac session terminate --cluster=<cluster-uuid> --session=<session-uuid>

Вывод session list длинный. На Linux отфильтруйте его через grep -B5 -A20 BackgroundJob, чтобы видеть только фоновые сеансы. Названия остальных параметров и подкоманд уточняйте в rac help session и rac help infobase: набор ключей зависит от версии платформы.

Команду блокировки удобно вставить в скрипт развёртывания тестовой копии. Сначала загрузка .dt или восстановление бэкапа, затем --scheduled-jobs-deny=on, и только потом база открывается пользователям.

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

Флажок кластера — это рубильник на всю базу. Чаще нужно точечно: выключить одно задание и оставить остальные.

Через интерфейс программы

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

На вкладке регламентных заданий:

  1. Выделите задание.
  2. Откройте его карточку и снимите флажок «Включено».
  3. Запишите изменения.

На вкладке фоновых заданий видно, что выполняется сейчас и чем закончились последние запуски. Активное задание здесь можно отменить — это тот же откат транзакции, что и при удалении сеанса в консоли.

Программно

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

// Выключить все регламентные задания базы
Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из Задания Цикл
    Если Задание.Использование Тогда
        Задание.Использование = Ложь;
        Задание.Записать();
    КонецЕсли;
КонецЦикла;

// Отменить все активные фоновые задания
Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
Активные = ФоновыеЗадания.ПолучитьФоновые(Отбор);
Для Каждого ФЗ Из Активные Цикл
    ФЗ.Отменить();
КонецЦикла;

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

Сравнение способов

СпособЧто отключаетКогда подходитРиски
Флажок в консоли кластераВсе регламентные задания базыТестовая копия, обновлениеЗабыть снять после работ
rac infobase updateТо же, из скриптаАвтоматизация, LinuxПароль в командной строке
Карточка задания в базеОдно заданиеМешает конкретный обменИзменение уйдёт в копии базы
Код Использование = ЛожьВыбранные или всеМассовое отключениеНет быстрого «вернуть как было»
Удаление сеансаТекущий запускЗависаниеОткат транзакции

Что можно и чего нельзя делать через SQL

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

Не выполняйте UPDATE и DELETE по служебным таблицам базы 1С. Для отключения заданий есть флажок кластера и rac — этого достаточно.

Зато SQL полезен для диагностики, когда фоновое задание держит блокировки и на него жалуются пользователи.

Microsoft SQL Server — кто кого блокирует:

SELECT r.session_id, r.blocking_session_id, r.wait_type,
       r.wait_time / 1000 AS wait_sec, s.program_name, s.host_name
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON s.session_id = r.session_id
WHERE r.blocking_session_id <> 0;

PostgreSQL — долгие запросы к базе:

SELECT pid, now() - query_start AS duration, state, wait_event_type
FROM pg_stat_activity
WHERE datname = 'имя_базы' AND state <> 'idle'
ORDER BY duration DESC;

По этим запросам видно, есть ли проблема на уровне СУБД. Само задание останавливайте через кластер 1С, а не командами KILL или pg_terminate_backend. Если оборвать соединение со стороны СУБД, рабочий процесс 1С получит ошибку, а сеанс в кластере может остаться висеть.

Расписание и ограничения: чтобы задания не мешали работе

Полное отключение — мера временная. В рабочей базе задачу обычно решает правильное расписание.

Перенос тяжёлых заданий на ночь

В карточке регламентного задания нажмите на ссылку расписания. Там задаётся:

  • 📅 дни недели и месяцы запуска;
  • 🕐 время начала и окончания;
  • 🔁 повтор через N секунд в течение дня и пауза между повторами.

Пример: обмен с сайтом каждые 60 секунд в рабочее время грузит сервер. Поставьте повтор раз в 10 минут с 8:00 до 20:00, а полную выгрузку — один раз в 2:00. Нагрузка падает в 10 раз, а данные отстают максимум на 10 минут.

Выделенный рабочий сервер для заданий

Если серверов в кластере несколько, задания можно отправить на отдельный сервер. В свойствах рабочего сервера, в разделе «Требования назначения функциональности», добавьте требование для типа объекта «Фоновое задание» и укажите сервер, который их выполняет. На других серверах для этого типа поставьте запрет. Пользователи перестанут делить процессор с тяжёлыми обменами.

Файловый вариант

На файловой базе менеджера кластера нет, и регламентные задания выполняются в сеансе клиента. Запретить их выполнение можно параметром запуска /AllowExecuteScheduledJobs -Off в строке запуска 1С. Отдельной консоли для этого нет.

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

Почему фоновое задание зависает и как найти причину

Висящее задание — симптом. Удалить сеанс можно, но при следующем запуске всё повторится.

Основные причины:

  • 🔒 Ожидание блокировки. Задание пытается записать данные, которые заблокировал пользователь или другое задание. В списке сеансов консоли растут счётчики блокировок.
  • 🌐 Внешний ресурс не отвечает. Сайт, банк, сервис ЭДО или почтовый сервер не дают ответа, а таймаут в коде не задан или большой.
  • 📦 Объём данных. Первый обмен после долгого перерыва или перепроведение за год выполняются часами. Это не зависание, а долгая работа.
  • ♻️ Задание запускается повторно, не закончив предыдущий запуск. Расписание с частым повтором накладывается на долгий обмен.
  • 🐞 Ошибка в коде доработки. Бесконечный цикл, чтение огромной выборки в память.

Где искать подтверждение:

  1. Журнал регистрации (Администрирование → Обслуживание → Журнал регистрации). Отберите события по фоновым заданиям и по сеансу из консоли: видно время старта, ошибку и место, где выполнение прервалось.
  2. Список фоновых заданий в разделе «Регламентные и фоновые задания». Статус «Завершено аварийно» с текстом ошибки сразу показывает причину.
  3. Технологический журнал. Включите события TLOCK, TTIMEOUT и TDEADLOCK в logcfg.xml — они покажут, кто держит управляемую блокировку и на каком пространстве. Логи растут быстро, поэтому ставьте ограничение по времени хранения и отключайте сбор после диагностики.
  4. Запросы к СУБД из раздела выше — если подозрение на блокировки уровня базы данных.
Диагностика: выберите симптом

Ошибки администраторов при отключении заданий

  • ❌ Забыли снять блокировку после обновления. Курсы не грузятся, обмены стоят, почта не приходит — а заметят через неделю. Снятие флажка внесите в регламент работ последним пунктом.
  • ❌ Перезапустили службу агента вместо одного сеанса. Перезапуск службы «Агент сервера 1С:Предприятия» обрывает сеансы всех пользователей всех баз кластера. Ради одного задания это не нужно; если без этого не обойтись — только вне рабочего времени и с предупреждением пользователей.
  • ❌ Отключили задание в рабочей базе вместо копии. Перед изменением посмотрите на заголовок окна и строку подключения: имя базы на сервере у копии и рабочей часто отличаются одним суффиксом.
  • ❌ Выключили служебные задания БСП. Если отключить обработку отложенного обновления сразу после обновления конфигурации, часть данных останется непреобразованной, и некоторые отчёты будут работать неверно.

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

Блокировка регламентных заданий влияет на фоновые задания, запущенные пользователем?
Нет. Флажок запрещает запуск по расписанию. Фоновое задание, которое пользователь запустил из формы (например, длительный отчёт), выполнится как обычно.
Нужна ли перезагрузка сервера после включения блокировки?
Нет. Флажок действует сразу после нажатия «ОК» в свойствах базы или выполнения команды rac infobase update.
Почему при копировании базы БСП спрашивает, перемещена ли база?
Это защита от работы копии с внешними ресурсами. Если ответить, что это копия, программа заблокирует обмены и подобные операции. Но флажок блокировки в кластере это не заменяет — включайте и его.
Можно ли отключить задания только для одной базы кластера?
Да. Флажок и параметр --scheduled-jobs-deny задаются для конкретной информационной базы. Остальные базы кластера продолжают работать по своему расписанию.
Кто может отключить задания, если нет пароля администратора базы?
Через свойства базы в консоли — никто: нужна учётная запись администратора информационной базы. Завершить висящий сеанс можно и без неё, для этого достаточно прав администратора кластера.