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