МенеджерОбработкиОшибок.СообщениеОбОшибкеДляПользователя

Методы · ErrorMessageForUser

Возвращает текст сообщения, которое рекомендуется показать пользователю.

Синтаксис

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

МенеджерОбработкиОшибок.СообщениеОбОшибкеДляПользователя (ErrorProcessingManager.ErrorMessageForUser)

МенеджерОбработкиОшибок (ErrorProcessingManager)

СообщениеОбОшибкеДляПользователя (ErrorMessageForUser)

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

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

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

Описание:

Возвращает текст сообщения, которое рекомендуется показать пользователю.

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

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

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

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

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

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

Настоящий отказ учебной карточке: категория, технический разбор и пользовательский диалог

Полная собственная форма считает3×250=750, реально перехватывает отказ количеству4 при остатке3, сравнивает типы четырех представлений и по отдельной кнопке показывает стандартный диалог без формирования отчета.

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

Полный модуль ОбщаяФорма.СтендОшибки85 собственной новой пустой конфигурации; desktop managed client и server guard, runtime0.

Подготовка

  1. Создайте новую пустую файловую базу платформы8.5.1.1343 с конфигурацией УчебныеПредставленияОшибок85, русский язык, управляемое приложение. Предметных объектов, регистров, подписок, заданий и расширений нет; рабочие УТ/УНФ/КА/БП не подходят.

  2. В Общие → Общие формы создайте управляемую форму СтендОшибки85. Два реквизита: Итог85 Строка неограниченной длины, Разбор85 Строка неограниченной длины. Выведите оба многострочными полями только для просмотра.

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

  4. Откройте ОбщаяФорма.СтендОшибки85 своей учебной командой в настольном тонком или толстом управляемом клиенте. Веб-клиент не подходит всему уроку: ПодробноеПредставлениеОшибки и ПредставлениеОшибкиДляПользователя native не доступны web.

  5. Никаких собственных настроек обработки/шаблонов/отправки отчетов не устанавливайте. Используются штатные настройки своей новой базы. Не добавляйте SMTP/URL/службу приема отчета или глобальный обработчик отображения ошибок.

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

  7. В этом уроке только вымышленные3книги/250рублей. Подробный технический текст может содержать имя вашего собственного модуля и номер строки; показывайте его лишь в своем стенде, не публикуйте снимки с рабочими ошибками.

&НаКлиенте
Перем СвояОшибка85;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ПроверитьСвойПустойСтенд();
    Итог85 = "Сначала успешный расчет; затем отказ превышению своего учебного остатка";
    Разбор85 = "";
КонецПроцедуры

&НаКлиенте
Процедура УспешныйРасчет85(Команда)
    ПроверитьНаСервере85();
    СвояОшибка85 = Неопределено;
    Разбор85 = "";
    Итог = РассчитатьСвоюКарточку85(3, 3, 250);
    Если Итог <> 750 Тогда
        ВызватьИсключение "Три собственные книги по250 должны дать750";
    КонецЕсли;
    Итог85 = "Собственная карточка:3×250=750. Ошибки нет, списание и запись не выполнялись";
КонецПроцедуры

&НаКлиенте
Процедура РазобратьСвойОтказ85(Команда)
    ПроверитьНаСервере85();
    СвояОшибка85 = Неопределено;
    Разбор85 = "";
    Итог85 = "Учебная проверка еще не закончена";
    Попытка
        РассчитатьСвоюКарточку85(4, 3, 250);
    Исключение
        СвояОшибка85 = ИнформацияОбОшибке();
    КонецПопытки;
    Если ТипЗнч(СвояОшибка85) <> Тип("ИнформацияОбОшибке") Тогда
        ВызватьИсключение "Нужна настоящая перехваченная ошибка, не строка или структура";
    КонецЕсли;
    Категория = ОбработкаОшибок.КатегорияОшибкиДляПользователя(СвояОшибка85);
    Если Категория <> КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка Тогда
        ВызватьИсключение "Собственный ВызватьИсключение должен иметь свою documented категорию";
    КонецЕсли;
    Краткое = ОбработкаОшибок.КраткоеПредставлениеОшибки(СвояОшибка85);
    Подробное = ОбработкаОшибок.ПодробноеПредставлениеОшибки(СвояОшибка85);
    Представление = ОбработкаОшибок.ПредставлениеОшибкиДляПользователя(СвояОшибка85);
    Сообщение = ОбработкаОшибок.СообщениеОбОшибкеДляПользователя(СвояОшибка85);
    Если ТипЗнч(Краткое) <> Тип("Строка") Или ТипЗнч(Подробное) <> Тип("Строка")
        Или ТипЗнч(Представление) <> Тип("ФорматированнаяСтрока")
        Или ТипЗнч(Сообщение) <> Тип("ФорматированнаяСтрока") Тогда
        ВызватьИсключение "Нужно отличать технические строки от formatted пользовательских сообщений";
    КонецЕсли;
    Если ПустаяСтрока(Краткое) Или ПустаяСтрока(Подробное)
        Или ПустаяСтрока(Строка(Представление)) Или ПустаяСтрока(Строка(Сообщение)) Тогда
        ВызватьИсключение "Представления собственной реальной ошибки не должны быть пустыми";
    КонецЕсли;
    Разбор85 = "Категория: " + Строка(Категория)
        + Символы.ПС + "Краткая техническая строка: " + Краткое
        + Символы.ПС + "Подробная техническая строка: " + Подробное
        + Символы.ПС + "Представление для пользователя, plain readback: " + Строка(Представление)
        + Символы.ПС + "Рекомендованное сообщение, plain readback: " + Строка(Сообщение);
    Итог85 = "Реальный отказ: запрошено4, доступно3. Категория/четыре представления проверены; запись и отправка отчета отсутствуют";
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьСвоюОшибку85(Команда)
    ПроверитьНаСервере85();
    Если ТипЗнч(СвояОшибка85) <> Тип("ИнформацияОбОшибке") Тогда
        ВызватьИсключение "Сначала РазобратьСвойОтказ85; чужую ошибку не показываем";
    КонецЕсли;
    ОбработкаОшибок.ПоказатьИнформациюОбОшибке(СвояОшибка85,
        "В учебном остатке только3 книги;4 нельзя отпустить",
        "Свой стенд: количество4, остаток3, цена250. Никаких документов не записано", Ложь);
КонецПроцедуры

&НаКлиенте
Функция РассчитатьСвоюКарточку85(Количество, Остаток, Цена)
    Если ТипЗнч(Количество) <> Тип("Число") Или ТипЗнч(Остаток) <> Тип("Число")
        Или ТипЗнч(Цена) <> Тип("Число") Тогда
        ВызватьИсключение "Карточка принимает только числа";
    КонецЕсли;
    Если Количество <> Цел(Количество) Или Остаток <> Цел(Остаток)
        Или Количество <= 0 Или Остаток < 0 Или Цена < 0 Тогда
        ВызватьИсключение "Нужны целые количества и неотрицательная цена";
    КонецЕсли;
    Если Количество > Остаток Тогда
        ВызватьИсключение "Учебная книга: запрос4 превышает свой остаток3; никаких записей нет";
    КонецЕсли;
    Возврат Количество * Цена;
КонецФункции

&НаСервере
Процедура ПроверитьНаСервере85()
    ПроверитьСвойПустойСтенд();
КонецПроцедуры

&НаСервере
Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. Серверный guard проверяет пустую собственную конфигурацию перед каждым опытом. РассчитатьСвоюКарточку85 не читает реальную номенклатуру и не записывает складские данные.

  2. Положительный путь с3/3/250 возвращает750. Новая успешная команда удаляет старую ошибку из переменной формы, чтобы кнопка диалога не показала прежний отказ как текущий.

  3. Для отрицательного пути передаем4/3/250 в ту же настоящую функцию. ВызватьИсключение действительно исполняет языковое исключение; внутри Исключение сохраняется штатный ИнформацияОбОшибке(), а не произвольная строка.

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

  5. КраткоеПредставлениеОшибки и ПодробноеПредставлениеОшибки возвращают Строка. Предположение, что подробная строка всегда содержит дословно краткую, не требуется; проверяются native типы и непустота.

  6. ПредставлениеОшибкиДляПользователя и СообщениеОбОшибкеДляПользователя возвращают ФорматированнаяСтрока. Преобразование Строка(...) в учебном разборе показывает plain текст, но не сохраняет кликабельное оформление.

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

  8. Отдельная команда передает исходную настоящую ошибку и явную понятную строку пользователю в первый documented overload ПоказатьИнформациюОбОшибке. Четвертый аргумент Ложь запрещает формирование отчета этим вызовом.

  9. Текст пользовательского диалога объясняет исправление количества, подробный технический разбор остается в отдельном учебном поле. Это не метод обезличивания произвольных рабочих ошибок и не аудит всей политики отправки отчетов.

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

  1. УспешныйРасчет85: результат750, Разбор85 пуст, диалог собственной ошибки запрещен до отрицательного опыта.

  2. РазобратьСвойОтказ85: получен native ИнформацияОбОшибке, категория явного языкового исключения, две непустые Строка и две непустые ФорматированнаяСтрока.

  3. ПоказатьСвоюОшибку85 после отказа: ожидается стандартное окно платформы с вашим понятным сообщением и дополнительной строкой. Никакой автоматической отправки или формирования отчета этим вызовом нет.

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

  5. В своей копии вызовите расчет с дробным количеством, отрицательной ценой или строкой вместо числа: отвергаются до умножения. Этот дополнительный тест не заменяет основной4>3.

  6. Никаких реальных документов, складских движений, писем, файлов, отчетов или записей настроек этот полный модуль не делает.

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

Ожидаемый ручной результат:750 на корректной карточке; настоящий отказ4>3; категория и native типы представлений проверены; стандартный локальный диалог открывается только по отдельной кнопке. Runtime1С здесь не выполнялся.

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

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

  2. Четвертый аргумент Ложь относится к конкретному вызову диалога. Он не является общей настройкой запрета фоновых отчетов во всей системе и не доказывает сетевой режим ОС.

  3. МенеджерОбработкиОшибок получен через readonly глобальное ОбработкаОшибок. Его нельзя создавать неизвестным конструктором или заменять присваиванием глобального свойства.

  4. ПоказатьИнформациюОбОшибке клиентский; серверный вызов недопустим. Для web нельзя переносить весь код: два из использованных методов там отсутствуют.

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

  6. В уроке нет обработчика ОбработкаОтображенияОшибки с ТребуетсяЗавершениеСеансаИстина: не обещается, что произвольный критический диалог не перезапустит другой сеанс.

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

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

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

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

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