Как отключить сообщение «К сожалению, возникла непредвиденная ситуация» и вернуть показ текста ошибки в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Начиная с версии платформы 1С:Предприятие 8.3.17 (при установленном режиме совместимости 8.3.17 и выше) разработчики фирмы «1С» изменили стандартное поведение системы при возникновении неперехваченных исключений. Вместо привычного окна с техническим описанием сбоя, модулем и номером строки пользователи стали видеть лаконичное сообщение: «К сожалению, возникла непредвиденная ситуация». Это решение было принято для того, чтобы не пугать рядовых пользователей сложными техническими терминами и стеком вызовов, однако для разработчиков, аналитиков и администраторов баз данных это существенно усложнило первичную диагностику неполадок.

Выясним причину такого поведения и подробно разберем все доступные способы вернуть информативные сообщения об ошибках.

Способ 1. Интерактивная настройка шаблонов отображения ошибок

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

Разберем по шагам, как настроить вывод текста ошибки для текущего пользователя:

  1. Откроем главное меню программы и перейдем в раздел «Функции для технического специалиста» (в более ранних интерфейсах данный пункт назывался «Все функции»). Если данный пункт скрыт, его можно включить через «Настройки» — «Параметры» — флаг «Режим технического специалиста».
  2. В дереве объектов раскроем ветку «Стандартные» и запустим обработку «Управление настройками обработки ошибок».
  3. В открывшемся окне перейдем к разделу настройки шаблонов отображения по категориям ошибок.
  4. Найдем категорию, для которой требуется изменить текст (например, «Все ошибки» или «Исключение, вызванное из встроенного языка»).
  5. Зададим собственный шаблон для ошибок, не требующих перезапуска, и для критических ошибок, требующих завершения работы. В шаблон можно вставлять специальные предопределенные параметры платформы в квадратных скобках:
    1. [КраткоеПредставлениеОшибки] — возвращает лаконичное описание сбоя (аналогично поведению платформы до релиза 8.3.17);
    2. [ПодробноеПредставлениеОшибки] — выводит полный стек вызовов с указанием модулей, методов и строк исходного кода;
    3. [ПредставлениеОшибкиДляПользователя] — формирует понятное описание без системных технических рекомендаций;
    4. [СтандартноеСообщениеОбОшибкеДляПользователя] — стандартный платформенный текст по умолчанию.
  6. Сохраним выполненные изменения и обязательно перезапустим текущий пользовательский сеанс, так как новые параметры применяются только при старте клиентского приложения.

Способ 2. Программное переопределение шаблонов через менеджер обработки ошибок

Если нам необходимо централизованно задать формат вывода сообщений для группы пользователей или автоматизировать процесс при первом запуске информационной базы, воспользуемся возможностями встроенного языка. Для этого в платформе предусмотрен менеджер ОбработкаОшибок.

Посмотрим на пример программной установки шаблона текста для системных исключений:


Настройки = ОбработкаОшибок.ПолучитьНастройкиПользователя();
Тексты = Новый ТекстыСообщенияОбОшибке;
Тексты.ТекстОшибки = "[КраткоеПредставлениеОшибки]";
Тексты.ПодробныйТекстОшибки = "[ПодробноеПредставлениеОшибки]";

Настройки.ТекстыСообщенийОбОшибках.Вставить(
    КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка, 
    Тексты
);

ОбработкаОшибок.УстановитьНастройкиПользователя(Настройки);

Рассмотрим подробнее логику работы этого фрагмента. Сначала с помощью метода ПолучитьНастройкиПользователя() мы извлекаем текущую структуру настроек сеанса. Затем создаем объект типа ТекстыСообщенияОбОшибке, наполняем его макетами с макроподстановками и связываем с требуемым элементом системного перечисления КатегорияОшибки. Метод УстановитьНастройкиПользователя() сохраняет новые правила для текущего пользователя информационной базы.

Способ 3. Перехват ошибок в модуле управляемого приложения

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

Проанализируем пример использования обработчика ОбработкаОтображенияОшибки:


Процедура ОбработкаОтображенияОшибки(ИнформацияОбОшибке, ТребуетсяЗавершениеСеанса, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
    ПоказатьПредупреждение(, ТекстОшибки, , "Обнаружена ошибка выполнения");
КонецПроцедуры

Разберем ключевые моменты этого решения. Установка параметра СтандартнаяОбработка = Ложь полностью блокирует появление штатного платформенного окна с сообщением о непредвиденной ситуации. Из параметра ИнформацияОбОшибке с помощью встроенной функции ПодробноеПредставлениеОшибки() извлекается детальное описание сбоя вместе со стеком вызовов. Этот текст мы можем вывести пользователю в привычном окне предупреждения либо отправить во внешнюю систему логирования.

Способ 4. Штатный просмотр деталей ошибки без изменения настроек программы

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

  1. В окне с предупреждением «К сожалению, возникла непредвиденная ситуация» нажимаем на гиперссылку «Сформировать отчет об ошибке».
  2. Платформа сформирует пакет диагностических данных и откроет новое окно отправки отчета.
  3. В этом окне кликаем по ссылке «Подробный текст ошибки» (или раскрываем блок дополнительных сведений) — откроется текстовое поле с полным стеком вызовов, наименованием модуля и точным номером сбойной строки.

Важные ограничения и особенности платформы

При работе с механизмами отображения ошибок следует учитывать несколько важных нюансов:

  1. Файлы конфигурации запуска: Вернуть старый стиль сообщений глобально через конфигурационные файлы платформы (такие как conf.cfg или файл описания баз ibases.v8i) невозможно. Механизм управляется исключительно на уровне базы данных и встроенного языка 1С.
  2. Режим совместимости: Новая концепция показа непредвиденных ситуаций активируется только в том случае, если в свойствах конфигурации установлен режим совместимости с версией 8.3.17 и выше. Если база работает с совместимостью 8.3.16 или ниже, платформа продолжит использовать прежний классический интерфейс сообщений об ошибках с прямой кнопкой «Подробно».
  3. Режим отладки: При запуске клиентского сеанса под отладчиком платформа по-прежнему отображает окно с предложением завершить работу или перезапустить программу, однако при этом всегда доступна прямая кнопка перехода к месту возникновения ошибки в коде конфигуратора.
  4. Журналы фиксации: Независимо от того, какой текст отображается на экране пользователя, техническое описание каждого неперехваченного исключения фиксируется в Журнале регистрации с уровнем «Ошибка», а также записывается в Технологический журнал в рамках события EXCP.
← На главную