Администрирование · 9 мин
Как снять фоновое задание в 1С
Как найти и снять зависшее фоновое задание в 1С: через консоль заданий, конфигуратор и код. Причины зависания, риски принудительного снятия и типичные ошибки.
Фоновое задание в 1С — это процесс, который выполняется на сервере без участия пользователя: обмен данными, расчёт итогов, загрузка курсов валют, обработчики обновления. Когда такое задание зависает или выполняется бесконечно долго, оно блокирует регламентные операции, грузит сервер и мешает работе пользователей. В такой ситуации задание нужно найти и снять принудительно.
Снять фоновое задание можно несколькими способами: через стандартную обработку «Консоль заданий» в режиме предприятия, через консоль кластера серверов 1С, через внешние обработки-консоли или программно — методами встроенного языка. Выбор зависит от того, файловая у вас база или клиент-серверная, есть ли доступ к серверу и насколько срочно нужно остановить процесс.
Важно понимать: снятие задания — это аварийная мера. Если задание выполняет длительную, но корректную операцию (например, пересчёт итогов за большой период), принудительная остановка может оставить данные в промежуточном состоянии. Поэтому перед снятием стоит убедиться, что задание действительно зависло, а не просто долго работает.
Как понять, что фоновое задание нужно снимать
Не всякое долгое задание — зависшее. Перед снятием проверьте признаки реальной проблемы: задание выполняется значительно дольше обычного (например, обмен, который занимал 10 минут, висит уже несколько часов), состояние не меняется, в журнале регистрации нет новых записей от этого задания, при этом растёт нагрузка на сервер СУБД или задание держит блокировки, мешающие пользователям.
Обратный признак — задание живо: в журнале регистрации периодически появляются записи, меняются данные, блокировки снимаются и ставятся снова. В этом случае снимать задание опасно: например, прерванный на середине обработчик обновления может оставить базу в состоянии, потребующем восстановления.
Сравните длительность с типичной для этого задания
Отфильтруйте журнал по имени метода задания
Проверьте список блокировок в консоли кластера
Посмотрите активные запросы средствами СУБД
Снятие задания через консоль заданий в режиме предприятия
Самый простой способ — стандартная обработка «Консоль заданий». В типовых конфигурациях на БСП она находится по пути: Администрирование → Поддержка и обслуживание → Регламентные операции → Регламентные и фоновые задания. Для доступа нужны права администратора.
В открывшемся списке перейдите на вкладку «Фоновые задания», установите отбор по состоянию «Активно», найдите нужное задание по наименованию или имени метода. Выделите строку и нажмите кнопку «Отменить». Статус задания должен измениться на «Отменено» или задание исчезнет из списка активных.
Учтите ограничение: отмена через консоль срабатывает не мгновенно. Платформа посылает заданию сигнал отмены, но если код задания надолго «уехал» в запрос к СУБД, фактическое завершение произойдёт только после окончания текущего запроса. Иногда это занимает минуты.
- 1Откройте Администрирование → Поддержка и обслуживание → Регламентные операции
- 2Перейдите на вкладку «Фоновые задания» и отфильтруйте по состоянию «Активно»
- 3Найдите задание по наименованию или имени метода
- 4Нажмите «Отменить» и подождите смены состояния
- 5Проверьте в журнале регистрации, что задание завершилось без новых ошибок
Снятие задания через консоль кластера серверов
Если база работает в клиент-серверном режиме, а режим предприятия недоступен или отмена через консоль заданий не помогает, используйте консоль кластера серверов 1С. Откройте её на сервере (или удалённо, если установлена оснастка), раскройте нужный кластер, найдите базу и перейдите к списку сеансов.
Фоновые задания отображаются как отдельные сеансы с типом «Фоновое задание». В колонках видно имя задания, время начала и активность. Выделите нужный сеанс и удалите его через контекстное меню — «Удалить». Это принудительно завершит процесс задания на рабочем процессе сервера.
Этот способ жёстче: сеанс обрывается без штатной отмены, поэтому незавершённая транзакция будет откачена СУБД. Для большинства заданий это безопасно, но если задание писало данные порциями с фиксацией, часть изменений останется в базе.
Программное снятие задания кодом
Когда интерактивные средства недоступны (например, база заблокирована тяжёлым заданием и вход невозможен), задание можно отменить программно — через внешнее соединение, консоль кода или конфигуратор с запуском обработки. Используется менеджер фоновых заданий.
Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
Если СтрНайти(Задание.ИмяМетода, "ОбменДанными") > 0 Тогда
Задание.Отменить();
КонецЕсли;
КонецЦикла;
Метод Отменить() работает так же, как кнопка в консоли заданий: шлёт сигнал отмены, но не гарантирует мгновенную остановку. Полезно отбирать задания не только по состоянию, но и по уникальному идентификатору или имени метода, чтобы не снять чужое рабочее задание.
Для файловых баз отдельный нюанс: фоновые задания там выполняются в сеансе, запущенном планировщиком или пользователем. Если задание запущено из вашего сеанса, достаточно завершить соответствующий сеанс или саму базу.
Что делать, если задание не снимается
Бывает, что после «Отменить» задание продолжает висеть в активных. Обычно причина в том, что код задания выполняет длинный запрос к СУБД и не получает управление, чтобы обработать отмену. В этом случае помогает завершение запроса на стороне СУБД: в MS SQL Server — через Activity Monitor или команду KILL по идентификатору сессии, в PostgreSQL — через pg_terminate_backend.
Ещё одна ситуация — задание «воскресает» после снятия. Это значит, что его перезапускает регламентное задание по расписанию. Тогда сначала отключите или заблокируйте соответствующее регламентное задание в консоли заданий (снимите флаг «Использование»), и только потом снимайте фоновое.
Проверка результата и профилактика зависаний
После снятия убедитесь, что задание действительно завершено: в консоли заданий оно исчезло из активных или имеет состояние «Отменено», в журнале регистрации есть запись о завершении, блокировки сняты, нагрузка на сервер вернулась к обычному уровню. Если задание было частью обмена данными — проверьте, не осталось ли незавершённых транзакций обмена.
Чтобы зависания не повторялись, разберитесь в причине: чаще всего это взаимоблокировки между заданиями, отсутствие индексов под запросы задания, сетевые таймауты при обменах или ошибки в коде (бесконечный цикл). Для регулярно зависающих заданий настройте в консоли заданий ограничение повторных запусков и контролируйте длительность через журнал регистрации.
Как проверить результат
Задание отсутствует или в состоянии «Отменено»
Задание снова активно — ищите перезапускающее его регламентное задание
Есть запись об отмене или завершении задания
Записей нет, задание продолжает писать в журнал
Сеанс фонового задания отсутствует
Сеанс висит — удалите его принудительно
Блокировки сняты, нагрузка на СУБД обычная
Запрос на СУБД продолжает выполняться — завершайте его средствами СУБД
Что важно запомнить
Снимайте фоновое задание через консоль заданий кнопкой «Отменить», при недоступности — удалением сеанса в консоли кластера или кодом через ФоновыеЗадания.Отменить(). Сначала убедитесь, что задание зависло, а не просто долго работает, отключите перезапускающее его регламентное задание и проверьте результат в журнале регистрации.
Частые вопросы
Чем отличается фоновое задание от регламентного?
Регламентное задание — это настройка расписания: что и когда запускать. Фоновое задание — конкретный экземпляр выполнения, порождённый регламентным заданием или запущенный программно. Снимается именно фоновое задание, а чтобы оно не запустилось снова, отключают регламентное.
Что делать, если кнопка «Отменить» не помогает?
Подождите несколько минут — отмена не срабатывает, пока выполняется запрос к СУБД. Если задание всё ещё активно, удалите его сеанс в консоли кластера серверов. В крайнем случае завершите зависший запрос средствами СУБД (KILL в MS SQL, pg_terminate_backend в PostgreSQL).
Можно ли снять фоновое задание в файловой базе?
Да, через ту же консоль заданий в режиме предприятия. В файловом режиме задания выполняются в отдельном сеансе на том же компьютере, поэтому также помогает завершение сеанса, в котором запущено задание, через список активных пользователей.
Опасно ли снимать задание обмена данными?
Обычно обмены спроектированы с учётом прерываний: при следующем запуске обмен продолжится с места остановки или повторит незавершённую порцию. Но если обмен прерван на этапе записи данных, возможны частично загруженные объекты — после снятия проверьте регистрацию изменений и при необходимости выполните обмен повторно.
Почему задание появляется снова после снятия?
Его перезапускает регламентное задание по расписанию. Откройте консоль заданий, найдите соответствующее регламентное задание и снимите флаг «Использование» или заблокируйте его. После этого снимите активное фоновое задание — оно больше не перезапустится.
Как узнать, какой код выполняет зависшее задание?
В консоли заданий в свойствах фонового задания видно имя метода — например, «ОбменДаннымиССайтом.ВыполнитьОбмен». По имени метода можно найти процедуру в конфигураторе через глобальный поиск и проанализировать, где она может зависать. Дополнительно журнал регистрации покажет последние действия задания до зависания.