ИнформацияОбОшибке.Описание

Свойства · Description

Тип: Строка. Содержательное описание ошибки (исключения). Данное свойство может содержать: Краткое сообщение об ошибке, Код ошибки (если есть), Подробную техническую информацию об ошибке (если есть).

Полное описание, параметры и ограничения

ИнформацияОбОшибке.Описание (ErrorInfo.Description)

ИнформацияОбОшибке (ErrorInfo)

Описание (Description)

Доступен, начиная с версии 8.1.

Использование:
Только чтение.
Описание:
Тип: Строка.
Содержательное описание ошибки (исключения). Данное свойство может содержать:
Краткое сообщение об ошибке,

Код ошибки (если есть),

Подробную техническую информацию об ошибке (если есть).

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Найти причину ошибки собственного фонового расчёта

Передаём -1 вместо количества и намеренно получаем собственную ошибку в фоне. Исключение внутри рабочего метода отличаем от исключения запуска.

Где и как запускать

Полный серверный неглобальный общий модуль УчебныеФоновыеЗадачи отдельной собственной учебной конфигурации.

Подготовка

  1. Создайте отдельную собственную учебную конфигурацию с именем УчебнаяКонфигурацияСинтаксиса. Не используйте рабочую базу или копию с включёнными заданиями обмена, рассылки и обработчиками бизнес-данных.

  2. Создайте неглобальный общий модуль УчебныеФоновыеЗадачи: Сервер = Истина, Глобальный = Ложь, Привилегированный = Ложь. Вставьте полный модуль одного урока; имя модуля используется в строке запуска.

  3. ВыполнитьПример() вызывайте из серверного обработчика своей учебной команды обычного сеанса 1С. Не запускайте из COM/внешнего соединения с файловой базой или из другого фонового задания файловой базы.

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

  5. Задание считает собственные числа в памяти и публикует СообщениеПользователю. Документы, регистры, файлы, интернет и настройки пользователей не меняются. История собственных заданий остаётся в базе по правилам платформы.

  6. Выполнить возвращает объект задания, а не результат вычисления. Трёхсекундный таймаут ограничивает одно ожидание; он не отменяет задание и не доказывает успешное завершение.

Процедура Рассчитать(Количество, Цена, Режим) Экспорт
    Если Количество < 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. Запустить ту же экспортную процедуру с отрицательным количеством: проверка входных данных находится внутри фонового метода.

  2. Обновить объект ограниченным ожиданием. Если пока Активно, не читать отсутствующую ошибку как успешный результат.

  3. Только при ЗавершеноАварийно получить ИнформацияОбОшибке, проверить собственный текст и вывести модуль, номер строки и описание.

  4. Исправить -1 на 3 и повторить запуск с новым ключом. Это новая задача, а не изменение уже завершённой.

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

  1. При аварийном завершении поиск собственного текста ошибки даёт Истина.

  2. При количестве 3 задача должна завершиться успешно. Текст об отрицательном количестве исчезает; при таймауте окончательный результат пока неизвестен.

Ожидаемый результат

Полный воспроизводимый пример диагностики собственной валидации в фоне, без проведения документов.

На что обратить внимание

  1. Выполнить может сам выбросить исключение до запуска, например из-за прав или несериализуемого параметра: тогда объекта задания нет.

  2. ОжидатьЗавершенияВыполнения возвращает состояние, а не автоматически выбрасывает исключение из завершившегося рабочего метода.

  3. Не перезапускайте финансовую или обменную операцию автоматически только потому, что истёк таймаут. Этот урок считает только собственные числа.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Получить содержательное описание намеренной ошибки

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

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Ошибки намеренно создаются на вымышленных значениях в учебной базе; файлы и рабочие данные не используются.

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


Сумма = 250;
Количество = 0;
Попытка
    Среднее = Сумма / Количество;
    Сообщить(Среднее);
Исключение
    Ошибка = ИнформацияОбОшибке();
    Сообщить(ОписаниеОшибки());
    Сообщить(КраткоеПредставлениеОшибки(Ошибка));
    Сообщить(ПодробноеПредставлениеОшибки(Ошибка));
    Сообщить("Описание: " + Ошибка.Описание);
    Сообщить("Модуль: " + Ошибка.ИмяМодуля);
    Сообщить(СтрШаблон("Строка %1: %2", Ошибка.НомерСтроки, Ошибка.ИсходнаяСтрока));
    Сообщить("Код: " + Ошибка.Код);
    Сообщить("Дополнительная информация: " + Ошибка.ДополнительнаяИнформация);
    Сообщить(Ошибка.ЯвляетсяОшибкойКатегории(КатегорияОшибки.ВсеОшибки));
    Если Ошибка.Причина <> Неопределено Тогда
        Сообщить("Причина: " + Ошибка.Причина.Описание);
    Иначе
        Сообщить("Отдельная вложенная причина не задана");
    КонецЕсли;
КонецПопытки;

Разбор по шагам

  1. Деление на ноль заставляет управление перейти в Исключение; Среднее не является успешным результатом.

  2. Сразу получаем объект ИнформацияОбОшибке и его текстовые представления.

  3. Отделяем описание для пользователя от технических сведений о модуле и строке.

  4. Код и дополнительная информация могут быть пустыми. Причину проверяем на Неопределено перед чтением свойств.

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

  1. Количество=0 приводит к сообщениям об ошибке, а не к значению средней цены 0.

  2. НомерСтроки указывает место в вашем модуле; он не обязан совпадать с номером строки HTML-примера.

  3. Проверка категории ВсеОшибки даёт Истина. Измените количество на 2: выводится 125, обработчик ошибки не выполняется.

Ожидаемый результат

Ошибка диагностирована на контролируемом входе; успешный результат не подменён фиктивным нулём.

На что обратить внимание

  1. Полный текст и исходная строка могут раскрывать секреты или личные данные — в рабочем приложении разделяйте пользовательское сообщение и защищённый технический журнал.

  2. Не сравнивайте локализованный текст ошибки для бизнес-логики. Для специально маркированных ошибок используйте согласованный код или категорию.

  3. Здесь ошибка поглощена ради просмотра диагностики. В реальной операции её нужно вернуть как явный статус либо передать вызывающему коду.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.