Исследовать режим сообщения и наличие шаблона категории

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

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

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

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

Подготовка

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

  2. Текущий учебный пользователь должен иметь Администрирование данных для чтения общих настроек. Не обходите отказ в доступе привилегированным режимом.

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

  4. Задания только читают. Не вызывайте УстановитьНастройкиПользователя/УстановитьОбщиеНастройки, не имитируйте падение 1С и не отправляйте отчёт во внешние сервисы.

  5. Значения зависят от учебной базы. Диагностический вывод не доказывает отправку отчёта, получение согласия пользователя или доступность сервиса.

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

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

  1. Режим отображения и коллекция шаблонов — два разных свойства настроек.

  2. Количество — число заданных категорий, не число произошедших ошибок.

  3. Получить может вернуть Неопределено: обе попытки проверяем до обращения к текстам.

  4. Тексты с перезапуском/без перезапуска имеют разное назначение; не выводим их содержимое и не перезапускаем приложение.

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

  1. Всегда видны режим и количество категорий. При наличии шаблона показаны только две длины.

  2. При отсутствии двух ключей выводится понятное сообщение, нет обращения к свойствам Неопределено.

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

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

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

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

  2. Краткая пользовательская фраза не является подробным описанием причины для разработчика.

  3. Не передавайте произвольное содержимое шаблона в Выполнить и не выводите его как доверенную HTML-разметку.

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

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

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

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

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