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

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

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

Как остановить фоновое задание в 1С: отмена через консоль заданий, конфигуратор, код и кластер серверов. Что делать, если задание зависло и не снимается.

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

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

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

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

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

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

Сеанс активен, СУБД не нагруженаЗадание, скорее всего, зависло в ожидании или цикле

Посмотрите длительность сеанса и активность процесса rphost на сервере

Ошибки блокировок у пользователейЗадание держит блокировку таблиц

Найдите сеанс-блокировщик через консоль кластера или журнал регистрации

Задание стартует снова и сноваПредыдущий экземпляр не завершился

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

Остановка через консоль заданий

Самый безопасный и штатный способ — отмена через список фоновых заданий. В типовых конфигурациях на БСП откройте раздел «Администрирование» → «Обслуживание» → «Регламентные операции» (или «Регламентные и фоновые задания»). В списке видны активные и завершённые задания, их состояние и время запуска.

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

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

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

Программная отмена методом Отменить()

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

Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);

Если Задание <> Неопределено И Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда

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

КонецЕсли;

Отбор активных заданий без идентификатора делается так: ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно)). Полученный массив можно перебрать и отменить каждое задание — например, все экземпляры конкретного регламентного задания по ключу или имени метода.

Завершение сеанса через конфигуратор

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

Выделите нужный сеанс и нажмите «Завершить сеанс» (в новых версиях доступны режимы завершения: обычный и принудительный, в том числе с разрывом соединения с СУБД). После завершения сеанса платформа помечает фоновое задание как завершённое аварийно, а в журнале регистрации фиксируется событие отмены.

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

Остановка через консоль кластера серверов

В клиент-серверном варианте самый надёжный инструмент — консоль администрирования серверов 1С. Откройте ветку кластера: «Сеансы». Найдите сеанс с типом «Фоновое задание» — в колонках видны имя базы, время начала, длительность и вызванный метод. Через контекстное меню выберите «Удалить» — сеанс будет принудительно завершён.

Если зависший сеанс держит блокировки, полезно сначала посмотреть ветку «Соединения» и список блокировок: вы увидите, какие таблицы захвачены и кем. После удаления сеанса рабочий процесс rphost освобождает соединение с СУБД, и блокировки снимаются. При крайней необходимости можно завершить соединение напрямую, но обычно достаточно удаления сеанса.

Особенности файлового варианта и зависших заданий

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

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

Задание не отменяется

Если после «Отменить» состояние не меняется, причины обычно такие: код задания выполняет длительный запрос к СУБД и не доходит до точки обработки отмены; сеанс «залип» в рабочем процессе кластера; либо задание уже завершилось аварийно, а список просто не обновлён. Порядок действий: обновите список, затем завершите сеанс через конфигуратор, затем — через консоль кластера. Крайняя мера — перезапуск рабочего процесса rphost, но это затронет всех пользователей этого процесса.

Типичные ошибки
01
Отмена задания обмена на середине выгрузки — получаем рассинхронизацию узлов и необходимость повторной регистрации данных
02
Завершение «не того» сеанса в списке активных пользователей — прерывается работа сотрудника с потерей несохранённых данных
03
Перезапуск службы сервера 1С вместо точечного удаления сеанса — отключаются все пользователи базы
04
Отмена задания без анализа причины зависания — после перезапуска регламентное задание зависает снова

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

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

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

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

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

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

«Отменено» или «Завершено аварийно»

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

По-прежнему «Активно» спустя несколько минут

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

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

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

Сеанс висит, растёт длительность

Блокировки и работа пользователей
Норма

Ошибки блокировок прекратились

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

Конфликты блокировок продолжаются — ищите другой сеанс-виновник

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

Чем отличается «Отменить» от завершения сеанса?

Отмена — штатный сигнал заданию прервать выполнение с корректным откатом текущей транзакции. Завершение сеанса — принудительное снятие процесса на уровне сервера. Сначала всегда пробуйте отмену; завершение сеанса — запасной вариант, когда отмена не срабатывает.

Отменённое задание запустится снова автоматически?

Фоновое задание, запущенное вручную или из кода, — нет. Если оно порождено регламентным заданием, то при наступлении времени по расписанию регламентное задание создаст новый экземпляр фонового. Чтобы этого не происходило, отключите регламентное задание или измените его расписание.

Можно ли остановить фоновое задание без прав администратора?

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

Что происходит с данными при отмене задания?

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

Задание зависает регулярно — что делать?

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

Как остановить все фоновые задания сразу?

Штатной кнопки «остановить всё» нет. Варианты: программно перебрать ФоновыеЗадания.ПолучитьФоновыеЗадания() с отбором по состоянию «Активно» и вызвать Отменить() для каждого, либо в консоли кластера удалить все сеансы с типом «Фоновое задание». На время обслуживания можно также установить блокировку регламентных заданий для базы в консоли кластера.

Итог

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

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