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

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

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

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

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

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

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

Как найти зависшее фоновое задание

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

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

Состояние «Выполняется» несколько часовВероятное зависание

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

Рост нагрузки на rphost или СУБДЗадание активно потребляет ресурсы

Проверьте диспетчер задач / монитор производительности сервера

Блокировки у пользователейЗадание держит транзакцию

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

Состояние «Ошибка»Задание уже завершилось аварийно

Смотрите описание ошибки в консоли заданий, принудительное завершение не требуется

Завершение через консоль заданий

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

Если типовой консоли нет или она недоступна, используйте внешнюю обработку «Консоль заданий» с диска ИТС — она показывает все фоновые задания информационной базы и позволяет отменять их. Учтите: команда отмены срабатывает, только если код задания периодически возвращает управление платформе; «мёртво» зависший код на отмену не отреагирует.

Завершение через консоль кластера серверов 1С

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

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

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

Программное завершение фонового задания

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

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

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

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

Если Задание.ИмяМетода = "МойДолгийМетод" Тогда

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

КонецЕсли;

КонецЦикла;

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

Аварийное завершение: когда и как

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

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

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

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

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

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

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

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

Задание отсутствует или в состоянии «Завершено»/«Ошибка»

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

Задание по-прежнему «Выполняется»

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

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

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

Сеанс висит и держит блокировки

Нагрузка на сервер
Норма

Потребление ресурсов вернулось к норме

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

rphost или СУБД продолжают нагружаться

Работа пользователей
Норма

Блокировки сняты, операции проходят

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

Ошибки превышения ожидания блокировки сохраняются

Типичные ошибки при завершении заданий

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

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

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

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

Регламентное задание — это настройка в конфигурации с расписанием и именем метода. Фоновое задание — конкретный экземпляр выполнения. Регламентное задание порождает фоновые по расписанию; фоновое также можно запустить программно вручную. Завершать приходится именно фоновые экземпляры.

Почему команда «Отменить» не завершает задание?

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

Как завершить фоновое задание в файловой базе?

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

Что произойдёт с данными при принудительном завершении?

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

Как запретить запуск фоновых заданий на время обслуживания?

В консоли кластера в свойствах информационной базы установите параметр «Блокировка регламентных заданий». Это предотвратит запуск новых заданий на сервере, пока блокировка включена. В файловой базе аналогичный параметр задаётся при публикации или через код.

Итог

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

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