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

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

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

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

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

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

Материал рассчитан на администратора или продвинутого пользователя с правами на администрирование информационной базы. Описаны безопасные способы снятия задания штатными средствами, без прямого вмешательства в СУБД.

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

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

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

Дополнительно посмотрите журнал регистрации (Администрирование → Журнал регистрации) с отбором по событию ошибок. Часто там видно, что задание упёрлось в конфликт блокировок или завершилось с ошибкой, но его запись в очереди «застряла» в активном состоянии.

Задание активно дольше нормы в 3–5 разВероятное зависание

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

Нет нагрузки на сервереПроцесс простаивает

Проверьте загрузку CPU и дисков рабочего процесса

Ошибки блокировок в журналеКонфликт на СУБД

Отфильтруйте журнал по ошибкам за период работы задания

Задание активно, но сеанса нет в кластереМёртвая запись в очереди

Такое задание можно безопасно отменить

Подготовка: что проверить перед снятием задания

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

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

Снятие задания в клиент-серверной базе через консоль кластера

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

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

Если сеансов много и найти нужный сложно, отсортируйте список по колонке «Приложение» или по времени начала. Альтернатива — вкладка «Соединения» и «Рабочие процессы», где видно, какой rphost обслуживает зависший сеанс; при массовых проблемах иногда проще перезапустить рабочий процесс целиком, но это затронет других пользователей этого процесса.

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

Сброс задания в файловой базе

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

Самый простой вариант: завершить сеанс через список активных пользователей (Администрирование → Активные пользователи) — выберите сеанс фонового задания и нажмите «Завершить сеанс». Если это не помогло или сеанс не отвечает, завершите процесс 1cv8.exe через диспетчер задач на соответствующем компьютере. В крайнем случае — попросите всех пользователей выйти и перезапустите базу.

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

Программный способ: отмена задания кодом

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

bsl
Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
    Если Задание.ИмяМетода = "МойМетодОбмена" Тогда
        Задание.Отменить();
    КонецЕсли;
КонецЦикла;

Метод Отменить() работает только в клиент-серверном варианте и сигнализирует заданию о необходимости завершиться. Если код задания не проверяет отмену или находится внутри долгого запроса к СУБД, отмена может занять время или не сработать — тогда остаётся завершение сеанса в кластере. Также через РегламентныеЗадания можно временно отключить проблемное регламентное задание, чтобы оно не перезапускалось, пока вы разбираетесь с причиной.

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

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

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

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

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

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

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

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

Задание снова активно и не завершается

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

Есть запись о завершении сеанса, новых ошибок нет

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

Повторяющиеся ошибки блокировок или падения

Данные в базе
Норма

Обмен/обработка завершились, данные актуальны

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

Данные частично обновлены, есть рассинхронизация

Почему задание зависает снова и что с этим делать

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

Вторая причина — ошибки в коде: бесконечный цикл, ожидание ответа внешнего сервиса без таймаута, обращение к недоступному ресурсу. Здесь помогает технологический журнал с настройкой на события EXCP и DBMSSQL/DBPOSTGRS, который покажет, на каком запросе или вызове «застрял» процесс. Третья группа причин — ресурсная: нехватка памяти рабочего процесса, переполнение tempdb на СУБД, медленные диски. Это диагностируется мониторингом сервера в момент зависания.

Типичные ошибки
01
Снятие задания без бэкапа во время закрытия периода — риск неполных данных
02
Перезапуск рабочего процесса вместо точечного завершения сеанса — страдают другие пользователи
03
Отмена задания без анализа журнала — зависание повторяется на следующем запуске
04
Прямые изменения в таблицах СУБД для «сброса» задания — риск повреждения базы и потери поддержки
Маршрут решения

Как выбрать действие

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

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

Что будет с данными, если снять фоновое задание на середине выполнения?

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

Почему задание «висит» в активных, хотя сеанса в кластере нет?

Это «мёртвая» запись: сеанс завершился аварийно, а состояние задания не обновилось. Такое задание безопасно отменить программно методом Отменить() или оно само уйдёт после перезапуска регламентного задания-владельца. Данные при этом не пострадают.

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

Нет. Завершение чужих сеансов и отмена фоновых заданий требуют права «Администрирование» в базе или прав администратора кластера. Пользователь может завершить только собственный сеанс. Если прав нет — обратитесь к администратору базы.

Задание зависло на ожидании внешнего сервиса. Что делать?

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

Отличается ли сброс задания в 1С:Фреш и других облачных сервисах?

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

Итог

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

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