Возвращает категорию для пользователя. По этой категории будет формироваться сообщение в методе СообщениеОбОшибкеДляПользователя.
Синтаксис
КатегорияОшибкиДляПользователя(<ИнформацияОбОшибке>)Полное описание, параметры и ограничения
МенеджерОбработкиОшибок.КатегорияОшибкиДляПользователя (ErrorProcessingManager.ErrorCategoryForUser)
МенеджерОбработкиОшибок (ErrorProcessingManager)
КатегорияОшибкиДляПользователя (ErrorCategoryForUser)
Доступен, начиная с версии 8.3.17.
Синтаксис:
КатегорияОшибкиДляПользователя(<ИнформацияОбОшибке>)
Параметры:
<ИнформацияОбОшибке> (обязательный)
Тип: ИнформацияОбОшибке.
Структурированная информация об ошибке.
Возвращаемое значение:
Тип: КатегорияОшибки.
Возвращает одно из следующих значений:
ИсключениеВызванноеИзВстроенногоЯзыка,
НарушениеПравДоступа,
НеправильныйПароль,
ОтсутствиеРазрешенияДляИспользованияФункциональности,
ОшибкаВнешнегоИсточникаДанных,
ОшибкаДоступаКЛокальномуФайлу,
ОшибкаКонфигурации,
ОшибкаКопииБазыДанных,
ОшибкаНастроекКомпоновкиДанных,
ОшибкаПереходаПоНавигационнойСсылке,
ОшибкаПолнотекстовогоПоиска,
ОшибкаПреобразованияДокумента,
ОшибкаПроверкиПодписи,
ОшибкаРаботыСПринтером,
ОшибкаРаботыСРечью,
ОшибкаСеанса,
ОшибкаСети,
ОшибкаСистемыВзаимодействия,
ОшибкаСредствМультимедиа,
ОшибкаТабличногоПространстваБазыДанных,
ОшибкаХранимыхДанных,
ПринудительноеЗавершениеРаботы,
ПрочаяОшибка.
Не возвращает:
ВсеОшибки,
ОшибкаВоВремяВыполненияВстроенногоЯзыка,
ОшибкаИспользованияВстроенногоЯзыка,
ОшибкаКомпиляцииВстроенногоЯзыка.
Описание:
Возвращает категорию для пользователя. По этой категории будет формироваться сообщение в методе СообщениеОбОшибкеДляПользователя.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.17.
Описание изменено в версии 8.3.26.
Методическая информация
Практические примеры
Настоящий отказ учебной карточке: категория, технический разбор и пользовательский диалог
Полная собственная форма считает3×250=750, реально перехватывает отказ количеству4 при остатке3, сравнивает типы четырех представлений и по отдельной кнопке показывает стандартный диалог без формирования отчета.
Где и как запускать
Полный модуль ОбщаяФорма.СтендОшибки85 собственной новой пустой конфигурации; desktop managed client и server guard, runtime0.
Подготовка
Создайте новую пустую файловую базу платформы8.5.1.1343 с конфигурацией УчебныеПредставленияОшибок85, русский язык, управляемое приложение. Предметных объектов, регистров, подписок, заданий и расширений нет; рабочие УТ/УНФ/КА/БП не подходят.
В Общие → Общие формы создайте управляемую форму СтендОшибки85. Два реквизита: Итог85 Строка неограниченной длины, Разбор85 Строка неограниченной длины. Выведите оба многострочными полями только для просмотра.
Создайте команды УспешныйРасчет85, РазобратьСвойОтказ85, ПоказатьСвоюОшибку85, назначьте одноименные процедуры и добавьте кнопки. ПриСозданииНаСервере свяжите с одноименным обработчиком. Вставьте весь код на уровне модуля формы.
Откройте ОбщаяФорма.СтендОшибки85 своей учебной командой в настольном тонком или толстом управляемом клиенте. Веб-клиент не подходит всему уроку: ПодробноеПредставлениеОшибки и ПредставлениеОшибкиДляПользователя native не доступны web.
Никаких собственных настроек обработки/шаблонов/отправки отчетов не устанавливайте. Используются штатные настройки своей новой базы. Не добавляйте SMTP/URL/службу приема отчета или глобальный обработчик отображения ошибок.
Сначала нажмите успешный расчет, затем разбор отказа и только потом отдельную кнопку диалога. Полученная ИнформацияОбОшибке остается клиентской переменной формы, не сериализуется на сервер и не берется от неизвестного ИсходныйОбъект.
В этом уроке только вымышленные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 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Серверный guard проверяет пустую собственную конфигурацию перед каждым опытом. РассчитатьСвоюКарточку85 не читает реальную номенклатуру и не записывает складские данные.
Положительный путь с3/3/250 возвращает750. Новая успешная команда удаляет старую ошибку из переменной формы, чтобы кнопка диалога не показала прежний отказ как текущий.
Для отрицательного пути передаем4/3/250 в ту же настоящую функцию. ВызватьИсключение действительно исполняет языковое исключение; внутри Исключение сохраняется штатный ИнформацияОбОшибке(), а не произвольная строка.
КатегорияОшибкиДляПользователя определяет пользовательскую категорию. Для явного ВызватьИсключение ожидается ИсключениеВызванноеИзВстроенногоЯзыка, а не ВсеОшибки и не техническая категория компиляции.
КраткоеПредставлениеОшибки и ПодробноеПредставлениеОшибки возвращают Строка. Предположение, что подробная строка всегда содержит дословно краткую, не требуется; проверяются native типы и непустота.
ПредставлениеОшибкиДляПользователя и СообщениеОбОшибкеДляПользователя возвращают ФорматированнаяСтрока. Преобразование Строка(...) в учебном разборе показывает plain текст, но не сохраняет кликабельное оформление.
Представление и рекомендованное сообщение имеют разные назначения; текущие штатные настройки могут дать одинаковый видимый текст. Код не требует искусственно разных строк и не подменяет параметры класса ошибки.
Отдельная команда передает исходную настоящую ошибку и явную понятную строку пользователю в первый documented overload ПоказатьИнформациюОбОшибке. Четвертый аргумент Ложь запрещает формирование отчета этим вызовом.
Текст пользовательского диалога объясняет исправление количества, подробный технический разбор остается в отдельном учебном поле. Это не метод обезличивания произвольных рабочих ошибок и не аудит всей политики отправки отчетов.
Как проверить результат
УспешныйРасчет85: результат750, Разбор85 пуст, диалог собственной ошибки запрещен до отрицательного опыта.
РазобратьСвойОтказ85: получен native ИнформацияОбОшибке, категория явного языкового исключения, две непустые Строка и две непустые ФорматированнаяСтрока.
ПоказатьСвоюОшибку85 после отказа: ожидается стандартное окно платформы с вашим понятным сообщением и дополнительной строкой. Никакой автоматической отправки или формирования отчета этим вызовом нет.
Закройте диалог, нажмите успешный расчет снова: прежняя ошибка удалена из переменной. Повторное показание без нового отказа должно быть отвергнуто.
В своей копии вызовите расчет с дробным количеством, отрицательной ценой или строкой вместо числа: отвергаются до умножения. Этот дополнительный тест не заменяет основной4>3.
Никаких реальных документов, складских движений, писем, файлов, отчетов или записей настроек этот полный модуль не делает.
Ожидаемый результат
Ожидаемый ручной результат:750 на корректной карточке; настоящий отказ4>3; категория и native типы представлений проверены; стандартный локальный диалог открывается только по отдельной кнопке. Runtime1С здесь не выполнялся.
На что обратить внимание
Подробный текст может включать технические пути, имена модулей и стек. Пользовательское представление не гарантирует удаления секретов из чужой ошибки. Для production нужна отдельная согласованная политика.
Четвертый аргумент Ложь относится к конкретному вызову диалога. Он не является общей настройкой запрета фоновых отчетов во всей системе и не доказывает сетевой режим ОС.
МенеджерОбработкиОшибок получен через readonly глобальное ОбработкаОшибок. Его нельзя создавать неизвестным конструктором или заменять присваиванием глобального свойства.
ПоказатьИнформациюОбОшибке клиентский; серверный вызов недопустим. Для web нельзя переносить весь код: два из использованных методов там отсутствуют.
ИнформацияОбОшибке берется внутри блока Исключение непосредственно после ожидаемого собственного отказа. Статические проверки не подтверждают внешний вид диалога или точный текст установленного интерфейса.
В уроке нет обработчика ОбработкаОтображенияОшибки с ТребуетсяЗавершениеСеансаИстина: не обещается, что произвольный критический диалог не перезапустит другой сеанс.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.