Дополнительные параметры исключения: сохранить причину ошибки расчёта

Учебные задачи

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

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

Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.

Подготовка

  1. Используйте отдельную учебную базу без рабочих данных. Создайте серверный общий модуль УчебныйЯзык с флагом Сервер, без Привилегированный.

  2. Вставьте весь модуль выбранного примера, а не одну процедуру внутрь другой. Из своей серверной команды учебной обработки вызовите УчебныйЯзык.ВыполнитьПример().

  3. Все числа, строки и коллекции созданы в самом примере. Документы, регистры, файловая система и сеть не используются; никаких зависимостей от КА2/УНФ/УТ/БП нет.

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

Процедура ВыполнитьПример() Экспорт
    ОшибкаОбработана = Ложь;
    Попытка
        ПроверитьУчебнуюПокупку(0);
    Исключение
        ОшибкаОбработана = Истина;
        Ошибка = ИнформацияОбОшибке();
        Сообщить(Ошибка.Код = "training.purchase.failed");
        Сообщить(Ошибка.ДополнительнаяИнформация = "Собственная задача: книги по 250");
        Сообщить(Ошибка.ЯвляетсяОшибкойКатегории(КатегорияОшибки.ОшибкаКонфигурации, Ложь));
        Если Ошибка.Причина = Неопределено Тогда
            ВызватьИсключение "Учебная проверка не нашла сохранённую причину";
        КонецЕсли;
        Сообщить(Ошибка.Причина.Код = "training.quantity.range");
        Сообщить(Ошибка.Причина.ДополнительнаяИнформация = "Собственное количество должно быть от 1 до 10");
        Сообщить(Ошибка.Описание);
        Сообщить(Ошибка.Причина.Описание);
    КонецПопытки;
    Сообщить(ОшибкаОбработана);
КонецПроцедуры

Процедура ПроверитьУчебнуюПокупку(Знач Количество)
    Попытка
        ПроверитьУчебноеКоличество(Количество);
    Исключение
        Причина = ИнформацияОбОшибке();
        ВызватьИсключение("Учебную покупку рассчитать нельзя", КатегорияОшибки.ОшибкаКонфигурации,
            "training.purchase.failed", "Собственная задача: книги по 250", Причина);
    КонецПопытки;
КонецПроцедуры

Процедура ПроверитьУчебноеКоличество(Знач Количество)
    Если ТипЗнч(Количество) <> Тип("Число") Тогда
        ВызватьИсключение "Передайте собственное числовое количество";
    КонецЕсли;
    Если Количество < 1 ИЛИ Количество > 10 ИЛИ Количество <> Цел(Количество) Тогда
        ВызватьИсключение("Неверное учебное количество", КатегорияОшибки.ОшибкаКонфигурации,
            "training.quantity.range", "Собственное количество должно быть от 1 до 10");
    КонецЕсли;
КонецПроцедуры

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

  1. Внутренняя функция проверяет собственное число 0. Она создаёт ошибку с категорией ОшибкаКонфигурации и отдельным кодом training.quantity.range.

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

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

  4. Внешний обработчик проверяет код операции, затем наличие причины, а уже после этого обращается к её полям.

  5. ЯвляетсяОшибкойКатегории с Ложь проверяет только текущую ошибку. Текст и код исходного неверного количества не теряются в строковом склеивании.

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

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

  2. Вызовите ПроверитьУчебнуюПокупку(3): исключения нет, внешний обработчик не выполняется, последний флаг Ложь. Это положительный вариант, не потерянная диагностика.

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

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

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

  1. Нельзя передавать в параметре категории ВсеОшибки, ПрочаяОшибка, ОшибкаКомпиляцииВстроенногоЯзыка, ОшибкаВоВремяВыполненияВстроенногоЯзыка и ИсключениеВызванноеИзВстроенногоЯзыка.

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

  3. ДополнительнаяИнформация здесь содержит только собственное учебное правило. Не помещайте туда пароли, токены и содержимое рабочих документов.

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

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

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

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

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