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

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

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

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

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

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

Ниже разобраны все три способа с пошаговыми действиями, признаками того, что задание действительно завершено, и типичными ошибками, из-за которых задания «отменяются», но продолжают работать.

Почему фоновое задание зависает и как это распознать

Фоновое задание считается зависшим, если оно находится в состоянии «Активно» значительно дольше обычного времени выполнения, не пишет сообщений в журнал регистрации и не завершается само. Типичные причины: ожидание управляемой блокировки данных, которую держит другой сеанс; бесконечный цикл в коде обработки; обращение к недоступному внешнему ресурсу (веб-сервису, файлу по сети) без таймаута.

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

Состояние заданияАктивно дольше обычного

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

Журнал регистрацииНет новых записей от задания

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

БлокировкиОшибки конфликта блокировок у пользователей

Проверьте, не удерживает ли сеанс задания управляемые блокировки

СеансСеанс фонового задания присутствует в списке активных

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

Способ 1: отмена задания через консоль заданий

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

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

Отмена через консоль заданий
  1. 1
    Откройте базу в режиме 1С:Предприятие под администратором
  2. 2
    Запустите обработку «Консоль заданий» (Файл — Открыть)
  3. 3
    Найдите активное фоновое задание по имени метода или времени запуска
  4. 4
    Нажмите «Отменить» и дождитесь смены состояния на «Отменено»
  5. 5
    Проверьте журнал регистрации: должно появиться событие об отмене задания

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

Способ 2: программная отмена через встроенный язык

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

Отбор = Новый Структура;

Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);

Отбор.Вставить("ИмяМетода", "ДлительныеОперации.ВыполнитьПроцедуруМодуля");

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

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

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

КонецЦикла;

Если известен уникальный идентификатор задания (его можно увидеть в консоли заданий или получить при запуске), отбор строят по свойству УникальныйИдентификатор. Это надёжнее, чем отбор по имени метода, когда одновременно могут работать несколько экземпляров одного задания.

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

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

Способ 3: завершение сеанса фонового задания

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

В типовых конфигурациях на БСП есть команда завершения сеанса прямо из формы активных пользователей. Выделите сеанс фонового задания и завершите его — задание при этом получит состояние «ЗавершеноАварийно». Данные, которые задание успело записать до прерывания транзакции, останутся; незавершённая транзакция откатится.

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

Чем файловая база отличается от клиент-серверной при работе с заданиями

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

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

Сравнение способов завершения

Метод Отменить()

Штатный и безопасный способ. Ограничение: не мгновенный, не сработает при жёстком зависании в ожидании блокировки

Завершение сеанса

Надёжнее при зависании; задание завершится аварийно. Ограничение: нужны права администратора и доступ к списку сеансов

Завершение процесса 1cv8.exe

Последнее средство при полной блокировке базы. Риск повреждения файла данных, требуется резервная копия

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

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

Дополнительно откройте журнал регистрации с отбором по фоновым заданиям. Корректная отмена фиксируется событием отмены; аварийное завершение — ошибкой с текстом вида «Сеанс завершен администратором». Если записей нет, а задание числится активным, отмена не дошла до исполнения.

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

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

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

Отменено или ЗавершеноАварийно

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

Остаётся Активно через 2–3 минуты после отмены

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

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

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

Сеанс BackgroundJob присутствует и не завершается

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

Есть событие отмены или аварийного завершения

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

Нет новых событий, задание молчит

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

Блокировки сняты, документы проводятся

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

Ошибки конфликта блокировок сохраняются

Типичные ошибки и профилактика зависаний

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

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

Типичные ошибки
01
Отмена задания без проверки состояния — задание уже завершено, а администратор ищет несуществующую проблему
02
Повторный запуск того же задания, пока старое ещё активно — два экземпляра конфликтуют за одни данные и взаимно блокируются
03
Завершение процесса 1cv8.exe без резервной копии — риск повреждения файла 1Cv8.1CD
04
Игнорирование журнала регистрации — без него невозможно понять, зависло задание или просто работает долго

Если зависания повторяются регулярно, ищите причину в коде или в данных: длительные запросы без индексов, обработка больших объёмов без порционной выборки, обращения к сетевым ресурсам. Завершение задания решает симптом, но не устраняет источник проблемы.

Итог

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

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

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

Можно ли завершить фоновое задание, если база открыта у других пользователей?

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

Почему после вызова Отменить() задание остаётся активным?

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

Что происходит с данными при аварийном завершении задания?

Незавершённая транзакция откатывается — частично записанных данных не останется. Всё, что задание успело зафиксировать отдельными транзакциями до прерывания, сохранится в базе.

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

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

Можно ли запретить пользователям запускать длительные фоновые операции?

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

Задание стартует автоматически после каждого завершения — как это остановить?

Это признак регламентного задания с расписанием или механизма повторного запуска в коде. Откройте консоль заданий, найдите соответствующее регламентное задание и отключите его использование или измените расписание, иначе фоновые экземпляры будут создаваться снова.