Отмена и удаление фоновых и регламентных заданий в 1С

· 10 мин

Содержание

Зависшее фоновое задание держит блокировку, тормозит обмен данными или не даёт закрыть месяц — и его надо убрать. В клиент-серверной базе это делается за минуту: откройте Администрирование → Обслуживание → Регламентные и фоновые задания, выберите активное задание и нажмите «Отменить». Если задание не реагирует на отмену — завершите сеанс, который его выполняет, через консоль администрирования сервера.

Сложность в том, что словом «задача» в 1С называют два разных объекта. Регламентное задание — это запись в метаданных конфигурации с расписанием (например, обмен с сайтом каждые 5 минут). Фоновое задание — конкретный запуск этого расписания или разовый вызов из кода. Удаляют их по-разному: фоновое можно отменить, регламентное — отключить или удалить расписание. Поэтому сначала определимся, что именно мешает.

Что мешает — и что с этим делать

Где увидеть задания и их состояние

В типовых конфигурациях на базе БСП (Бухгалтерия предприятия 3.0, ЗУП 3.1, Управление торговлей 11) список открывается так:

Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания

Форма состоит из двух вкладок. На вкладке «Регламентные задания» видно все задания конфигурации: включено расписание или нет, когда запускалось, чем закончилось. На вкладке «Фоновые задания» — конкретные запуски с состоянием:

  • 🟢 Активно — задание выполняется прямо сейчас;
  • ⚪ Завершено — отработало штатно;
  • 🔴 Завершено аварийно — упало с ошибкой (текст ошибки в колонке результата);
  • ⏹ Отменено администратором — кто-то уже прервал его вручную.

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

Полный список заданий и команды управления доступны только пользователю с правами администратора. У обычного сотрудника пункт «Регламентные и фоновые задания» в меню либо не отображается, либо открывается в режиме просмотра без кнопки отмены. Если команды нет — дело в правах, а не в версии конфигурации.

В файловой базе фоновые и регламентные задания выполняются только при открытом сеансе и обрабатываются той же сессией. Если никто не работает в базе — расписание не отрабатывает вовсе, и «зависнуть» на сервере ему негде. Управлять ими в файловом варианте можно только из описанной выше формы конфигурации; консоль сервера к файловой базе неприменима.

Отмена зависшего фонового задания из интерфейса

Самый безопасный способ — штатная форма.

  1. Откройте вкладку «Фоновые задания».
  2. Установите отбор по состоянию «Активно» (кнопка настройки списка), чтобы не искать среди сотен завершённых.
  3. Выделите нужную строку.
  4. Нажмите команду «Отменить» в командной панели списка.

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

Альтернатива — обработка «Консоль заданий». Это внешняя обработка (.epf), которую берут из поставки по сопровождению. Она показывает тот же список заданий, но с более гибкими фильтрами и возможностью запустить регламентное задание вручную. Для разовой отмены штатной формы достаточно, консоль нужна скорее для разбора полётов и тонкой настройки.

Отмена снимает и блокировки, которые задание успело поставить на объекты базы. Это важно, когда зависший обмен держит документ, и другой пользователь не может его провести с ошибкой «Конфликт блокировок при выполнении транзакции». После отмены задания блокировки освобождаются, и работа продолжается — отдельно ничего разблокировать не нужно.

Отключение и удаление регламентного задания

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

На вкладке «Регламентные задания» откройте карточку двойным щелчком. Дальше два варианта:

  • Отключить. Снимите флаг «Включено» (в некоторых конфигурациях он называется «Использование»). Расписание сохранится, но новые запуски прекратятся. Это обратимо — в любой момент включите обратно.
  • Удалить. Команда удаления доступна только для заданий, которые создал пользователь. Предопределённые регламентные задания, заложенные в конфигурацию, удалить из режима «1С:Предприятие» нельзя — их можно только отключить. Убрать предопределённое задание насовсем получится лишь правкой конфигурации в Конфигураторе, а это ломает обновляемость типовой — так делать не стоит.

Как отличить одно от другого: у предопределённого задания в карточке стоит признак «Предопределённое», и команда «Удалить» для него неактивна. Если вам кажется, что обмен или регламентная операция включились «сами» — скорее всего, сработало расписание предопределённого задания после обновления конфигурации. Достаточно отключить флаг.

Блокировка заданий и завершение сеанса

Бывает, что фоновое задание висит в состоянии «Активно», а кнопка «Отменить» не помогает — процесс застрял в длинном запросе или ждёт внешний сервис. Тогда остаётся завершить сеанс, в котором оно крутится.

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

Фоновое задание выполняется в отдельном сеансе. В клиент-серверном варианте такой сеанс виден в консоли администрирования сервера с типом приложения «Фоновое задание» (BackgroundJob). Именно его и завершают — об этом в разделе про консоль ниже.

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

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

Удаление и отмена задания программно

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

Отменить все активные фоновые задания:

// Выполнять с правами администратора, в серверном контексте
Отбор = Новый Структура;
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);

Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
    Задание.Отменить();
КонецЦикла;

Отменить одно конкретное задание по идентификатору (его видно в карточке задания в интерфейсе):

Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИД);
Если Задание <> Неопределено И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
    Задание.Отменить();
КонецЕсли;

Отключить или удалить регламентное задание по имени из метаданных:

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

Проверяйте признак Задание.Предопределённое перед удалением: для предопределённых заданий метод Удалить() вызовет ошибку, их только отключают через Использование = Ложь. Код Отменить() для фонового задания посылает тот же сигнал остановки, что и кнопка в интерфейсе, — мгновенного «убийства» процесса он не гарантирует.

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

Через консоль администрирования сервера

Если задание не гасится ни кнопкой, ни кодом, последний рубеж — консоль кластера. Это оснастка «Администрирование серверов 1С Предприятия» (графическая) или утилита командной строки rac.

В графической консоли:

  1. Разверните кластер → «Сеансы».
  2. Отсортируйте по колонке «Приложение» и найдите сеансы с типом «Фоновое задание».
  3. Сверьтесь с именем информационной базы, чтобы не задеть чужую базу на том же сервере.
  4. Правый клик по нужному сеансу → «Удалить». Сеанс и его фоновое задание прервутся.

Чтобы остановить запуск новых заданий, откройте свойства информационной базы (кластер → «Информационные базы» → свойства нужной базы) и включите флаг «Блокировка регламентных заданий включена». После разбора проблемы снимите его.

Через rac (имя сервера и порт агента по умолчанию — localhost:1540):

# список кластеров — берём идентификатор
rac cluster list

# список сеансов кластера
rac session list --cluster=<uuid-кластера>

# завершить конкретный сеанс по его идентификатору
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Блокировка регламентных заданий через rac задаётся командой rac infobase update с параметром --scheduled-jobs-deny=on (и off, чтобы снять). Точный набор параметров для вашей версии платформы смотрите в rac infobase help — придумывать флаги наугад не нужно.

Команда rac session terminate рвёт сеанс немедленно, без отката «по-хорошему». Для сеанса фонового задания это приемлемо, но убедитесь по идентификатору базы и типу приложения, что завершаете именно фоновое задание, а не рабочий сеанс бухгалтера.

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

Напоминание про клиент-серверную архитектуру: консоль и rac обращаются к агенту сервера (порт 1540), а не напрямую к рабочим процессам. Если консоль не видит сеансов — проверьте, что подключились к нужному центральному серверу кластера, а не к соседнему.

Как не копить зависшие задания

Разовая отмена лечит симптом. Чтобы задания не висели снова, стоит убрать причину.

  • ⏱ Задайте таймаут. В настройках регламентного задания ограничьте время выполнения, чтобы подвисшая операция не висела вечно, а завершалась аварийно и перезапускалась по расписанию.
  • 📉 Разведите расписания. Если несколько тяжёлых заданий стартуют в одну минуту, они конкурируют за ресурсы. Разнесите их по времени, особенно обмены и переиндексацию.
  • 🔍 Смотрите журнал регистрации. Отбор по событиям регламентных и фоновых заданий покажет, какое из них регулярно падает с ошибкой — лечить надо его, а не последствия.
  • 🙅 Не запускайте тяжёлое вручную в рабочее время. Массовое перепроведение или формирование больших отчётов фоном в разгар дня — частая причина «зависаний», которые на деле просто долгая честная работа.
  • 🔁 Перезапуск по расписанию. Для заданий, склонных подвисать на внешних сервисах, иногда проще настроить штатный повтор, чем ловить их вручную.
Безопасная остановка зависшего задания
Выполнено: 0 / 6

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

Чем отличается «отменить» фоновое задание от «удалить» регламентное?
Фоновое задание — это разовый запуск, его отменяют (прерывают выполнение). Регламентное задание — запись с расписанием, его отключают или удаляют, чтобы не создавались новые запуски. Отмена одного фонового запуска не мешает расписанию стартовать снова через пять минут.
Я отключил регламентное задание, а оно включилось после обновления. Почему?
Обновление конфигурации может вернуть предопределённым заданиям исходные настройки использования. После крупных обновлений проверяйте вкладку «Регламентные задания» и при необходимости снова снимайте флаг.
Отменил задание, а оно всё равно висит в статусе «Активно». Что делать?
Значит, код задания застрял в длинной операции и ещё не обработал сигнал остановки. Подождите несколько минут; если не отпускает — завершайте сеанс этого задания через консоль администрирования сервера.
Можно ли удалить предопределённое регламентное задание насовсем?
Из режима «1С:Предприятие» — нет, только отключить. Полное удаление требует изменения конфигурации в Конфигураторе и ломает обновляемость типового решения, поэтому так не делают.
Почему в файловой базе задания не выполняются сами?
В файловом варианте нет серверного процесса, который держал бы расписание. Регламентные задания отрабатывают только при активном сеансе пользователя. Нет открытых сеансов — расписание не выполняется.