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