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

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

Как найти фоновое задание в 1С

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

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

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

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

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

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

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

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

Поиск через консоль заданий в режиме «1С:Предприятие»

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

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

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

Если консоли нет в интерфейсе — например, в самописной конфигурации без БСП — используйте внешнюю обработку «Консоль заданий» с диска ИТС или любую аналогичную из открытых репозиториев. Либо переходите к программному поиску, описанному ниже.

Программный поиск через консоль кода

Когда задание запущено кодом и уже завершилось, консоль может его не показать, а точный поиск нужен по ключу или состоянию. В этом случае используется метод ФоновыеЗадания.ПолучитьФоновыеЗадания() со структурой отбора. Выполнить такой код можно в консоли кода (встроенной в БСП или внешней) под полными правами.

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

В отбор можно передавать поля: УникальныйИдентификатор, Ключ, ИмяМетода, Состояние, Наименование, РегламентноеЗадание, а также Начало и Конец для ограничения по времени. Комбинация ключа и имени метода даёт точный результат без перебора всего списка.

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

Поиск через журнал регистрации

Если задание завершилось с ошибкой и пропало из всех списков, след остаётся в журнале регистрации. Откройте «Администрирование → Поддержка и обслуживание → Журнал регистрации» (или «Сервис → Журнал регистрации» в конфигураторе) и установите отбор.

Фильтруйте по событию «Фоновое задание» с уточнениями: «Запуск», «Ошибка выполнения», «Аварийное завершение», «Отмена». Дополнительно ограничьте период и, если известно, пользователя, от имени которого стартовал запуск. В тексте события будет имя метода, ключ задания и полное описание ошибки, включая стек вызовов.

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

Журнал регистрации — единственный надёжный источник для заданий, которые упали до того, как администратор успел открыть консоль. Минус способа — журнал не показывает задания, которые сейчас выполняются: для живого наблюдения нужна консоль заданий или программный отбор по состоянию «Активно».

Поиск задания в кластере серверов 1С

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

Этот способ незаменим, когда задание «висит» и грузит процессор сервера: по нагрузке на rphost вы находите сеанс, а по сеансу — задание и пользователя-инициатора. Дальше задание можно либо дождаться, либо принудительно завершить.

Как отличить зависшее задание от долго работающего

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

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

Как проверить состояние задания

Длительность выполнения
Норма

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

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

В разы превышает обычную длительность

Активность процесса на сервере
Норма

rphost потребляет CPU или идут обращения к СУБД

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

Процесс простаивает при активном состоянии задания

Записи в журнале регистрации
Норма

Появляются промежуточные сообщения от задания

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

Полная тишина после записи «Запуск»

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

Новых экземпляров с тем же ключом нет

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

Копятся задания с одинаковым ключом в состоянии ошибки

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

Частые ошибки и ограничения при поиске

Типичные ошибки
01
Искать программное задание среди регламентных: задания, запущенные через ФоновыеЗадания.Выполнить(), не привязаны к метаданным и видны только во вкладке «Фоновые задания» или программным отбором
02
Искать завершившееся задание в консоли без отбора по периоду: старые экземпляры вытесняются, и без фильтра по дате нужная строка теряется
03
Путать состояние «Завершено аварийно» с зависанием: аварийное задание уже не выполняется, искать причину нужно в журнале регистрации, а не в мониторинге сеансов
04
Запускать ПолучитьФоновыеЗадания() без отбора на рабочей базе: это лишняя нагрузка и долгое ожидание ответа

Ещё одно ограничение: право «Администрирование» требуется для просмотра чужих заданий и их отмены. Под обычным пользователем вы увидите только собственные фоновые задания, и картина загруженности базы будет неполной. Для диагностики работайте под учётной записью администратора.

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

Итог

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

Регламентные задания ищите в консоли «Регламентные и фоновые задания», программные — методом ФоновыеЗадания.ПолучитьФоновыеЗадания() с отбором по ключу, состоянию или имени метода. Упавшие задания восстанавливаются по журналу регистрации, зависшие диагностируются через сеансы на сервере. Принудительная отмена — последняя мера после проверки, что задание не пишет данные.

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

Почему фоновое задание не отображается в списке?

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

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

У объекта фонового задания нет прямого свойства «пользователь», но в журнале регистрации событие запуска привязано к сеансу и пользователю. Отфильтруйте журнал по событию «Фоновое задание. Запуск» и времени старта — в записи будет указан инициатор.

Можно ли найти задание, зная только текст ошибки?

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

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

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

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

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

Как найти задание обмена данными, которое запускается по расписанию?

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