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