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

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

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

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

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

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

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

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

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

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

Задание висит часамиВозможно зависание

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

Ошибки блокировок в журналеКонфликт с другими процессами

Проверьте, не запущено ли несколько копий задания

Растёт память rphostУтечка или тяжёлая операция

Посмотрите нагрузку в консоли кластера

Задание в состоянии «Выполняется»Активный процесс

Не путать с «Завершено аварийно» — его отменять не нужно

Отмена через консоль регламентных и фоновых заданий

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

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

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

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

Программная отмена через встроенный язык

Если типовой консоли нет или нужно отменять задания автоматически, используйте менеджер фоновых заданий. Метод ФоновыеЗадания.НайтиПоУникальномуИдентификатору() возвращает объект задания, у которого есть метод Отменить().

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

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

Программная отмена доступна только в привилегированном режиме или пользователю с правами администрирования. Из пользовательского сеанса без нужных прав вызов Отменить() завершится исключением.

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

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

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

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

Особенности файлового режима

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

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

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

Что делать после отмены

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

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

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

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

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

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

«Отменено пользователем» или задание отсутствует в активных

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

Всё ещё «Выполняется» спустя несколько минут

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

Запись об отмене без критических ошибок данных

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

Ошибки записи, обрывы транзакций до отмены

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

Память и процессор рабочего процесса вернулись к норме

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

rphost продолжает потреблять ресурсы

Повторный запуск
Норма

Задание отключено до выяснения причин

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

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

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

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

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

Итог

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

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

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

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

Через типовую консоль заданий — нет, она доступна только администраторам. Пользователь может отменить только задание, запущенное из его собственного сеанса, если прикладной интерфейс это предусматривает (например, кнопка «Отменить» в форме длительной операции БСП).

Задание не отменяется ни одним способом. Что делать?

В клиент-серверном режиме завершите сеанс фонового задания через консоль кластера. Если и это не помогает — завершите рабочий процесс rphost, предварительно убедившись, что через него не работают другие пользователи. В файловом режиме завершите процесс 1cv8.exe, обслуживающий задания.

Отменится ли задание само при закрытии сеанса пользователя?

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

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

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

Потеряются ли данные при отмене фонового задания?

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

Как найти задание, которое грузит сервер, если их много?

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