Тип: ИнформацияОбОшибке, Неопределено. Информация об ошибке, если задание было завершено аварийно. Неопределено, если задание было завершено успешно.
Полное описание, параметры и ограничения
ФоновоеЗадание.ИнформацияОбОшибке (BackgroundJob.ErrorInfo)
ФоновоеЗадание (BackgroundJob)
ИнформацияОбОшибке (ErrorInfo)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: ИнформацияОбОшибке, Неопределено.
Информация об ошибке, если задание было завершено аварийно.
Неопределено, если задание было завершено успешно.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Найти причину ошибки собственного фонового расчёта
Передаём -1 вместо количества и намеренно получаем собственную ошибку в фоне. Исключение внутри рабочего метода отличаем от исключения запуска.
Где и как запускать
Полный серверный неглобальный общий модуль УчебныеФоновыеЗадачи отдельной собственной учебной конфигурации.
Подготовка
Создайте отдельную собственную учебную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую базу или копию с включёнными заданиями обмена, рассылки и обработчиками бизнес-данных.
Создайте неглобальный общий модуль УчебныеФоновыеЗадачи: Сервер = Истина, Глобальный = Ложь, Привилегированный = Ложь. Вставьте полный модуль одного урока; имя модуля используется в строке запуска.
ВыполнитьПример() вызывайте из серверного обработчика своей учебной команды обычного сеанса 1С. Не запускайте из COM/внешнего соединения с файловой базой или из другого фонового задания файловой базы.
Нужны права запуска собственных фоновых заданий. Не включайте привилегированный режим для обхода отказа. Передаются только сериализуемые числа и строка режима.
Задание считает собственные числа в памяти и публикует СообщениеПользователю. Документы, регистры, файлы, интернет и настройки пользователей не меняются. История собственных заданий остаётся в базе по правилам платформы.
Выполнить возвращает объект задания, а не результат вычисления. Трёхсекундный таймаут ограничивает одно ожидание; он не отменяет задание и не доказывает успешное завершение.
Процедура Рассчитать(Количество, Цена, Режим) Экспорт
Если Количество < 0 Или Количество > 1000000 Или Количество <> Цел(Количество) Тогда
ВызватьИсключение "guide-owned: количество должно быть целым от 0 до 1000000";
КонецЕсли;
Если Цена < 0 Тогда
ВызватьИсключение "guide-owned: цена не может быть отрицательной";
КонецЕсли;
Если Режим = "Книга" Тогда
Сумма = Количество * Цена;
ИначеЕсли Режим = "Пакет" Тогда
Сумма = 0;
Для Номер = 1 По Количество Цикл
Сумма = Сумма + Цена;
КонецЦикла;
Иначе
ВызватьИсключение "guide-owned: неизвестный режим";
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "guide-owned: сумма " + Формат(Сумма, "ЧГ=0");
Сообщение.Сообщить();
КонецПроцедуры
Процедура ВыполнитьПример() Экспорт
Параметры = Новый Массив;
Параметры.Добавить(-1);
Параметры.Добавить(250);
Параметры.Добавить("Книга");
Ключ = "guide-owned-" + Строка(Новый УникальныйИдентификатор);
Задание = ФоновыеЗадания.Выполнить("УчебныеФоновыеЗадачи.Рассчитать", Параметры, Ключ, "guide-owned: расчёт книги");
Сообщить("Собственный идентификатор: " + Строка(Задание.УникальныйИдентификатор));
Задание = Задание.ОжидатьЗавершенияВыполнения(3);
Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Сообщить("Таймаут: собственное задание ещё активно, успех не подтверждён");
Возврат;
КонецЕсли;
Если Задание.Состояние <> СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
Сообщить("Ожидалось аварийное завершение, фактически: " + Строка(Задание.Состояние));
Возврат;
КонецЕсли;
Ошибка = Задание.ИнформацияОбОшибке;
Если Ошибка = Неопределено Тогда
ВызватьИсключение "Аварийное состояние без доступной информации об ошибке";
КонецЕсли;
Сообщить(СтрНайти(Ошибка.Описание, "guide-owned: количество") > 0);
Сообщить("Модуль: " + Ошибка.ИмяМодуля);
Сообщить("Строка: " + Строка(Ошибка.НомерСтроки));
Сообщить("Описание: " + Ошибка.Описание);
КонецПроцедурыРазбор по шагам
Запустить ту же экспортную процедуру с отрицательным количеством: проверка входных данных находится внутри фонового метода.
Обновить объект ограниченным ожиданием. Если пока Активно, не читать отсутствующую ошибку как успешный результат.
Только при ЗавершеноАварийно получить ИнформацияОбОшибке, проверить собственный текст и вывести модуль, номер строки и описание.
Исправить -1 на 3 и повторить запуск с новым ключом. Это новая задача, а не изменение уже завершённой.
Как проверить результат
При аварийном завершении поиск собственного текста ошибки даёт Истина.
При количестве 3 задача должна завершиться успешно. Текст об отрицательном количестве исчезает; при таймауте окончательный результат пока неизвестен.
Ожидаемый результат
Полный воспроизводимый пример диагностики собственной валидации в фоне, без проведения документов.
На что обратить внимание
Выполнить может сам выбросить исключение до запуска, например из-за прав или несериализуемого параметра: тогда объекта задания нет.
ОжидатьЗавершенияВыполнения возвращает состояние, а не автоматически выбрасывает исключение из завершившегося рабочего метода.
Не перезапускайте финансовую или обменную операцию автоматически только потому, что истёк таймаут. Этот урок считает только собственные числа.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Запустить расчёт книги и прочитать паспорт собственного задания
В фоне считаем 3 × 250. На стороне запуска сохраняем UUID, повторно получаем именно своё задание и разбираем все его свойства только для чтения.
Где и как запускать
Полный серверный неглобальный общий модуль УчебныеФоновыеЗадачи отдельной собственной учебной конфигурации.
Подготовка
Создайте отдельную собственную учебную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую базу или копию с включёнными заданиями обмена, рассылки и обработчиками бизнес-данных.
Создайте неглобальный общий модуль УчебныеФоновыеЗадачи: Сервер = Истина, Глобальный = Ложь, Привилегированный = Ложь. Вставьте полный модуль одного урока; имя модуля используется в строке запуска.
ВыполнитьПример() вызывайте из серверного обработчика своей учебной команды обычного сеанса 1С. Не запускайте из COM/внешнего соединения с файловой базой или из другого фонового задания файловой базы.
Нужны права запуска собственных фоновых заданий. Не включайте привилегированный режим для обхода отказа. Передаются только сериализуемые числа и строка режима.
Задание считает собственные числа в памяти и публикует СообщениеПользователю. Документы, регистры, файлы, интернет и настройки пользователей не меняются. История собственных заданий остаётся в базе по правилам платформы.
Выполнить возвращает объект задания, а не результат вычисления. Трёхсекундный таймаут ограничивает одно ожидание; он не отменяет задание и не доказывает успешное завершение.
Процедура Рассчитать(Количество, Цена, Режим) Экспорт
Если Количество < 0 Или Количество > 1000000 Или Количество <> Цел(Количество) Тогда
ВызватьИсключение "guide-owned: количество должно быть целым от 0 до 1000000";
КонецЕсли;
Если Цена < 0 Тогда
ВызватьИсключение "guide-owned: цена не может быть отрицательной";
КонецЕсли;
Если Режим = "Книга" Тогда
Сумма = Количество * Цена;
ИначеЕсли Режим = "Пакет" Тогда
Сумма = 0;
Для Номер = 1 По Количество Цикл
Сумма = Сумма + Цена;
КонецЦикла;
Иначе
ВызватьИсключение "guide-owned: неизвестный режим";
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "guide-owned: сумма " + Формат(Сумма, "ЧГ=0");
Сообщение.Сообщить();
КонецПроцедуры
Процедура ВыполнитьПример() Экспорт
Параметры = Новый Массив;
Параметры.Добавить(3);
Параметры.Добавить(250);
Параметры.Добавить("Книга");
Ключ = "guide-owned-" + Строка(Новый УникальныйИдентификатор);
Задание = ФоновыеЗадания.Выполнить("УчебныеФоновыеЗадачи.Рассчитать", Параметры, Ключ, "guide-owned: расчёт книги");
Сообщить("Собственный идентификатор: " + Строка(Задание.УникальныйИдентификатор));
Идентификатор = Задание.УникальныйИдентификатор;
Обновлённое = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор);
Если Обновлённое = Неопределено Тогда
Сообщить("Запись собственного задания недоступна; не подменяйте её первым заданием из общего списка");
Возврат;
КонецЕсли;
Задание = Обновлённое.ОжидатьЗавершенияВыполнения(3);
Сообщить(Задание.УникальныйИдентификатор = Идентификатор);
Сообщить(Задание.Ключ = Ключ);
Сообщить(Задание.ИмяМетода = "УчебныеФоновыеЗадачи.Рассчитать");
Сообщить(Задание.Наименование = "guide-owned: расчёт книги");
Сообщить(ТипЗнч(Задание.Начало) = Тип("Дата"));
Сообщить(ТипЗнч(Задание.Конец) = Тип("Дата"));
Сообщить(ТипЗнч(Задание.НомерРодительскогоСеанса) = Тип("Число"));
Сообщить(ТипЗнч(Задание.РазделениеДанных) = Тип("Структура"));
Сообщить(ТипЗнч(Задание.Расположение) = Тип("Строка"));
Сообщить("Связанное регламентное: " + Строка(Задание.РегламентноеЗадание));
Сообщить("Состояние: " + Строка(Задание.Состояние));
Если Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Сообщить(Задание.ИнформацияОбОшибке = Неопределено);
Сообщить("Расчёт завершён; результат передаётся сообщением, не возвратом Выполнить");
ИначеЕсли Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
Сообщить("Таймаут: задание продолжает работать");
Иначе
Сообщить("Задание не завершилось успешно; проверьте состояние и информацию об ошибке");
КонецЕсли;
КонецПроцедурыРазбор по шагам
Создать массив из трёх параметров в порядке экспортной процедуры: количество, цена, режим.
Сгенерировать собственный ключ и запустить метод неглобального серверного общего модуля. Возвращается ФоновоеЗадание, не число 750.
Сохранить UUID и выполнить поиск по этому UUID. Не брать первое задание базы при отсутствии собственной записи.
Присвоить результат ожидания переменной: это обновлённый объект. Прочитать паспорт и отдельно обработать активное, успешное и неуспешное состояния.
Как проверить результат
Девять проверок UUID, ключа, имени метода, наименования и типов свойств должны дать Истина.
При Завершено ИнформацияОбОшибке = Неопределено. При Активно выводится таймаут, а не сообщение об успехе. Время и сервер зависят от запуска.
Ожидаемый результат
Собственная задача считает 750 без чтения товаров базы; паспорт показывает происхождение и текущий статус, а не обещание результата.
На что обратить внимание
Объект задания может устареть после получения: обновляйте его поиском или возвратом ожидания.
Все свойства задания только читаются. Присваивание Состояние = Завершено не завершает задачу и запрещено.
НомерРодительскогоСеанса — 0 для запуска не из фонового задания; это не номер обычного текущего сеанса.
РазделениеДанных отражает разделители при запуске. Не выводите их реальные значения в публичный журнал. РегламентноеЗадание здесь только диагностируется: урок ничего не планирует.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.