Глобальный контекст.ПодробноеПредставлениеОшибки

Методы · DetailErrorDescription

Возвращает строку, аналогичную той, что показывается в стандартном диалоге платформы "1С:Предприятие", вызываемом при нажатии кнопки "Подробно" из сообщения об ошибке.

Синтаксис

ПодробноеПредставлениеОшибки(<ИнформацияОбОшибке>)
Полное описание, параметры и ограничения

Глобальный контекст.ПодробноеПредставлениеОшибки (Global context.DetailErrorDescription)

Глобальный контекст (Global context)

ПодробноеПредставлениеОшибки (DetailErrorDescription)

Не рекомендуется использовать, начиная с версии 8.3.17.

Рекомендуется использовать:

ПодробноеПредставлениеОшибки

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

Синтаксис:
ПодробноеПредставлениеОшибки(<ИнформацияОбОшибке>)
Параметры:

<ИнформацияОбОшибке> (обязательный)
Тип: ИнформацияОбОшибке.
Содержит информацию об ошибке.
Возвращаемое значение:
Тип: Строка.

Описание:

Возвращает строку, аналогичную той, что показывается в стандартном диалоге платформы "1С:Предприятие", вызываемом при нажатии кнопки "Подробно" из сообщения об ошибке.

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

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

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

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

Не рекомендуется использовать, начиная с версии 8.3.17.

Описание изменено в версии 8.3.17.

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

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

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

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

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

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

Подготовка

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Подготовка

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

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


Функция УчебноеИмяИзJSON(Текст) Экспорт
    Данные = ПрочитатьЗначениеJSON(Текст);
    Если ТипЗнч(Данные) <> Тип("Структура") Тогда
        ВызватьИсключение "Ожидался JSON-объект";
    КонецЕсли;
    Имя = Неопределено;
    Если Не Данные.Свойство("name", Имя) Тогда
        ВызватьИсключение "Нет поля name";
    КонецЕсли;
    Если ТипЗнч(Имя) <> Тип("Строка") Тогда
        ВызватьИсключение "name должен быть строкой";
    КонецЕсли;
    Возврат Имя;
КонецФункции

Функция УчебнаяЗагрузкаИмени(Текст) Экспорт
    Попытка
        Возврат УчебноеИмяИзJSON(Текст);
    Исключение
        Сообщить("Учебная загрузка не завершена; исходная ошибка передаётся вызывающему коду");
        ВызватьИсключение;
    КонецПопытки;
КонецФункции

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

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

  1. Исходная ошибка возникает в разборе известного некорректного JSON, а не из-за сети или конфигурации.

  2. Промежуточный слой не возвращает пустую строку как будто загрузка успешна.

  3. ВызватьИсключение без аргументов внутри обработчика передаёт исходную ошибку выше.

  4. Верхний уровень читает диагностику и обходит имеющиеся причины, проверяя Неопределено и ограничивая объём вывода.

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

  1. Для входа { нет сообщения Принято; есть техническая диагностика исходной ошибки разбора.

  2. В подробном представлении проверьте исходный вызов ПрочитатьЗначениеJSON и место в вашем общем модуле, а не только промежуточный текст.

  3. Замените вход на "{""name"":""Книга""}": выводится Принято: Книга, обработчики ошибок не выполняются.

  4. Корректный JSON {"name":3} отклоняется уже правилом типа name, а не синтаксическим парсером.

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

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

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

  1. ВызватьИсключение ОписаниеОшибки() создаёт новое исключение с текстом и может потерять исходный диагностический контекст; это не равно повторному вызову без аргументов.

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

  3. Цепочка причин может состоять из одного уровня; повторное исключение само по себе не обязано добавлять новую Причина.

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

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

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

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

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