К статье
Практический материал

Администрирование · 9 мин

Как снять фоновое задание в 1С

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

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

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

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

Как понять, что фоновое задание нужно снимать

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

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

Состояние заданияАктивно долгое время

Сравните длительность с типичной для этого задания

Журнал регистрацииНет новых записей от задания

Отфильтруйте журнал по имени метода задания

БлокировкиПользователи жалуются на ошибки блокировок

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

Нагрузка на СУБДЗапрос выполняется часами

Посмотрите активные запросы средствами СУБД

Снятие задания через консоль заданий в режиме предприятия

Самый простой способ — стандартная обработка «Консоль заданий». В типовых конфигурациях на БСП она находится по пути: Администрирование → Поддержка и обслуживание → Регламентные операции → Регламентные и фоновые задания. Для доступа нужны права администратора.

В открывшемся списке перейдите на вкладку «Фоновые задания», установите отбор по состоянию «Активно», найдите нужное задание по наименованию или имени метода. Выделите строку и нажмите кнопку «Отменить». Статус задания должен измениться на «Отменено» или задание исчезнет из списка активных.

Учтите ограничение: отмена через консоль срабатывает не мгновенно. Платформа посылает заданию сигнал отмены, но если код задания надолго «уехал» в запрос к СУБД, фактическое завершение произойдёт только после окончания текущего запроса. Иногда это занимает минуты.

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

Снятие задания через консоль кластера серверов

Если база работает в клиент-серверном режиме, а режим предприятия недоступен или отмена через консоль заданий не помогает, используйте консоль кластера серверов 1С. Откройте её на сервере (или удалённо, если установлена оснастка), раскройте нужный кластер, найдите базу и перейдите к списку сеансов.

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

Этот способ жёстче: сеанс обрывается без штатной отмены, поэтому незавершённая транзакция будет откачена СУБД. Для большинства заданий это безопасно, но если задание писало данные порциями с фиксацией, часть изменений останется в базе.

Программное снятие задания кодом

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

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

Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);

Для Каждого Задание Из Задания Цикл

Если СтрНайти(Задание.ИмяМетода, "ОбменДанными") > 0 Тогда

Задание.Отменить();

КонецЕсли;

КонецЦикла;

Метод Отменить() работает так же, как кнопка в консоли заданий: шлёт сигнал отмены, но не гарантирует мгновенную остановку. Полезно отбирать задания не только по состоянию, но и по уникальному идентификатору или имени метода, чтобы не снять чужое рабочее задание.

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

Что делать, если задание не снимается

Бывает, что после «Отменить» задание продолжает висеть в активных. Обычно причина в том, что код задания выполняет длинный запрос к СУБД и не получает управление, чтобы обработать отмену. В этом случае помогает завершение запроса на стороне СУБД: в MS SQL Server — через Activity Monitor или команду KILL по идентификатору сессии, в PostgreSQL — через pg_terminate_backend.

Ещё одна ситуация — задание «воскресает» после снятия. Это значит, что его перезапускает регламентное задание по расписанию. Тогда сначала отключите или заблокируйте соответствующее регламентное задание в консоли заданий (снимите флаг «Использование»), и только потом снимайте фоновое.

Типичные ошибки
01
Снятие фонового задания без отключения регламентного — задание перезапускается по расписанию через минуту
02
Принудительное завершение обработчиков обновления — база остаётся в состоянии незавершённого обновления
03
Отмена задания без проверки в журнале регистрации — снимается живое длительное задание вместо зависшего
04
Ожидание мгновенного эффекта — отмена не срабатывает, пока выполняется запрос к СУБД, и администратор повторяет действия, создавая путаницу

Проверка результата и профилактика зависаний

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

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

Контрольные точки

Как проверить результат

Список активных фоновых заданий
Норма

Задание отсутствует или в состоянии «Отменено»

Тревожный признак

Задание снова активно — ищите перезапускающее его регламентное задание

Журнал регистрации
Норма

Есть запись об отмене или завершении задания

Тревожный признак

Записей нет, задание продолжает писать в журнал

Сеансы в консоли кластера
Норма

Сеанс фонового задания отсутствует

Тревожный признак

Сеанс висит — удалите его принудительно

Блокировки и нагрузка
Норма

Блокировки сняты, нагрузка на СУБД обычная

Тревожный признак

Запрос на СУБД продолжает выполняться — завершайте его средствами СУБД

Итог

Что важно запомнить

Снимайте фоновое задание через консоль заданий кнопкой «Отменить», при недоступности — удалением сеанса в консоли кластера или кодом через ФоновыеЗадания.Отменить(). Сначала убедитесь, что задание зависло, а не просто долго работает, отключите перезапускающее его регламентное задание и проверьте результат в журнале регистрации.

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

Чем отличается фоновое задание от регламентного?

Регламентное задание — это настройка расписания: что и когда запускать. Фоновое задание — конкретный экземпляр выполнения, порождённый регламентным заданием или запущенный программно. Снимается именно фоновое задание, а чтобы оно не запустилось снова, отключают регламентное.

Что делать, если кнопка «Отменить» не помогает?

Подождите несколько минут — отмена не срабатывает, пока выполняется запрос к СУБД. Если задание всё ещё активно, удалите его сеанс в консоли кластера серверов. В крайнем случае завершите зависший запрос средствами СУБД (KILL в MS SQL, pg_terminate_backend в PostgreSQL).

Можно ли снять фоновое задание в файловой базе?

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

Опасно ли снимать задание обмена данными?

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

Почему задание появляется снова после снятия?

Его перезапускает регламентное задание по расписанию. Откройте консоль заданий, найдите соответствующее регламентное задание и снимите флаг «Использование» или заблокируйте его. После этого снимите активное фоновое задание — оно больше не перезапустится.

Как узнать, какой код выполняет зависшее задание?

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