Новое отображение ошибок в 1С

10.08.20

Разработка - Механизмы платформы 1С

Рассмотрим развитие механизма отображения ошибок в 1С (начиная с 8.3.17)

Всем привет!

Сегодня давайте рассмотрим развитие механизма отображения ошибок в 1С.

Совсем недавно я снял видео. Данная статья - текстовый его вариант. 

 

 

 

Содержание

 

Подготовка

 

Где почитать?  ^

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

Вот статья: https://wonderland.v8.1c.ru/blog/razvitie-mekhanizma-otobrazheniya-oshibok/

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

И вот, в версии 8.3.17 мы можем видеть "новое о платформе"

https://dl04.1c.ru/content/Platform/8_3_17_1549/1cv8upd_8_3_17_1549.htm#9f36892b-eb6c-11e9-8371-0050569f678a

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

  • Возможность обработки всех не перехваченных ошибок, возникающих при работе прикладного решения, перед отображением ошибок пользователю. Реализован обработчик модуля приложения ОбработкаОтображенияОшибки.
  • Реализована возможность декларативной настройки текстов сообщений об ошибке.
  • Реализована возможность формирования и отправки отчета об ошибке для службы технической поддержки (в том числе полностью автоматически). Реализован объект ОтчетОбОшибке.
  • Реализовано понятие «категория ошибки», что позволяет группировать ошибки. Реализован метод ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории().
  • Изменено стандартное окно отображения ошибок пользователю.

Реализовано свойство глобального контекста ОбработкаОшибок.

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

Тем, кому будет интересно самому подробнее погрузиться в этот механизм, можно прочитать на ИТС здесь и здесь

 

Где и как тестировать? ^

Работать мы будем в демо-базе, которую можно скачать с того сайта 1С: https://releases.1c.ru/version_files?nick=Platform83&ver=8.3.17.1549

Я выбрал пункт с файлом DT. Вот прямая ссылка на скачивание. Естественно, нужен доступ на users: https://releases.1c.ru/version_file?nick=Platform83&ver=8.3.17.1549&path=Platform\8_3_17_1549\demodt_8_3_17_1549.zip

Данный ДТшник после установки платформы 8.3.17.1549 я загрузил в базу для последующих экспериментов.

 

Так же для работы сделаем обработку, в которой просто будем вызывать ошибку. 

 

 

Сделаем простую непредвиденную ошибку в коде. Просто попытаемся присвоить в зарезервированную переменную "Неопределено":

 

Далее будем работать с этой обработкой.

 

В начале были нюансы...  ^

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

Поэтому сразу же для удобства вынесем кнопку "1С:Предприятие", которая будет запускать базу без подключенной отладки.

 

Теперь запустим в таком режиме сеанс и попробуем выполнить нашу обработку.

 

Вуаля! Мы видим новое окно с информацией об ошибке! Здесь есть кнопка "Сформировать отчет об ошибке" и нет совершенно упоминание кода, на котором эта ошибка возникла. Но данную форму мы ещё рассмотрим. Давайте закроем сеанс, вернёмся в конфигуратор и запустим 1С в режиме отладки. Теперь, если мы попытаемся выполнить нашу обработку, то увидим старое, уже давно привычное нам, окно с информацией об ошибке:

 

 

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

 

 

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

Это странное решение 1С, может у кого в комментариях будут предположения о причинах... Но деваться некуда - нужно просто это знать, чтобы потом не удивляться.

Ещё усугубляет ситуацию то, что часто разработчики советуют пользователям включать этот режим отладки в текущем сеансе. Для того, чтобы появлялась кнопочка "Подробнее...". Покажу не примере:

Если открыть базу до 8.3.17 (у меня это будет 8.3.15), а далее без режима отладки вызвать ошибку, то мы увидим такое окно:

Что здесь не так? Нет возможности нажать "Подробнее" (чтобы увидеть полный текст ошибки), а так же нет возможности скопировать этот текст.

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

 

Выходит, что пользователи, наученные включать режим отладки, не увидят новое окно об ошибке. Их нужно будет переучить. И, поздравляю, можете начинать и сейчас. Потому что есть более "правильный" способ пользователям копировать текст ошибке (без включения отладки). Просто перейдите в "О программе" -> "Информация для технической поддержки". Это даже удобнее, чем окно с сообщением, потому что ошибки копятся и не пропадут после закрытия окна.

 

 

Что видит пользователь?  ^

Вернёмся к новому окну.

 

Вот что пользователь увидит по кнопке "Сформировать отчет об ошибке":

 

Форма формирования отчета  ^

Это новая форма платформы, в которой мы можем внести описание проблемы (например, что мы именно делали перед возникновением ошибки).

Но самое главное, что теперь разработчики могут получить от пользователя автоматически сформированные пункты. 

  1. Подробный текст ошибки. Это конкретно тот текст ошибки, который нам нужен. А не тот, который пользователь неизвестно как и откуда скопировал.

     
  2. Снимок окон приложения. Полноразмерный скрин окон 1С.


     
  3. Имя пользователя информационной базы

     
  4. Сведения об используемом приложении. Здесь у нас хранится инфа о конфигурации, режиме совместимстимости и расширениях

     
  5. Информация о компьютере. Гигабайты, гигагерцы и так далее

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

 

Самое главное, что всё это добро можно сохранить на компьютере в виде архива, а потом переслать кому нужно:

 

Содержимое отчета об ошибке  ^

Давайте посмотрим, что внутри:

 

Скриншот и файлик JSON. А вот в JSON уже хранится вся информация:

 

Здесь хранится даже больше, чем нам было показано в окне. Например, вот код локализации:

 

А вот идентификатор расширений. Их не было на скринах выше:

 

А здесь вообще подробный стек:

В общем, в JSON хранится много всего интересного. Но рассмотрим его подробнее в следующих статьях. Попытаемся его распарсить.

 

Как сохраняются скриншоты  ^

Перед тем, как перейти далее, рассмотрим то, как 1С создаёт скриншоты окон приложения. Для этого в форме нашей обработки сделаем режим открытия окна "Блокировать весь интерфейс". 

И теперь вызовем ошибку.

 

Как видите, обработка полностью закрыла собой основное окно 1С. Но как будет выглядеть скриншот?

 

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

 

 

Администрирование  ^

Одно из основных "фишек" нового механизма - возможность видоизменять текст окна с ошибкой в режиме предприятия.

 

Управление настройками обработки ошибок  ^

Настройки механизма в режиме Предприятие вносятся в "Управление настройками обработки ошибок". Для этого перейдём в "Функции для технического специалиста" (ранее "Все функции") -> "Стандартные" - "Управление настройками обработки ошибок".

 

 

И вот мы видим такую форму. Добавить в избранное мы, к сожалению, не можем, потому что это "стандартная форма". 

 

Теперь посмотрим на функционал этой формы. У нас уже есть одна настройка, потому что это демо-база. 

 

Настройка отображения для категории  ^

Попробуем добавить новую.

 

Мы можем выбрать

  1. Любую категорию ошибок. В 1С есть список из 12ти категорий:

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


     
  2. Текст для ошибки, не требующей перезапуск
  3. Текст для ошибки, требующей перезапуск

 

Шаблон с текстом ошибки позволяет задать произвольный отформатированный текст, а так же использовать встроенные "параметры".

 

 

Чтобы рассмотреть их наглядно, создадим настройку для категории "Все ошибки". И внесём в неё текст со списком всех параметров.

 

Настройки обработки ошибок применяются после перезапуска сеанса:

 

Перезапустим сеанс и снова откроем нашу обработку, которая вызовет ошибку. 

Вот так выглядят все доступные параметры для пользователя:

 

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

ПредставлениеОшибкиДляПользователя - отображает только описание ошибки без каких-либо рекомендаций. Так же напрямую формируется из категории

КраткоеПредставлениеОшибки - это краткое представление ошибки равнозначно тому тексту, который на ранних версиях платформы показывался пользователю в сеансе без подключенной отладки.

ПодробноеПредставлениеОшибки - Расширенное представление информации об ошибки. Как то, которое доступно пользователю по кнопке "Подробно" в окне с ошибкой.

 

Как хранить шаблоны?  ^

Вернемся в редактор и рассмотрим небольшой его недостаток и как с ним можно бороться. 

 

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

А далее открыть его в браузере. 

 

И уже с этого файла можно простым копипастом вставить его в поле с настройкой 1С. 

Вот, например, содержимое файла:

 

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

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

 

ПредставлениеОшибкиДляПользователя

[ПредставлениеОшибкиДляПользователя]

 

КраткоеПредставлениеОшибки

[КраткоеПредставлениеОшибки]

 

ПодробноеПредставлениеОшибки

[ПодробноеПредставлениеОшибки]

 

Это может быть полезным, когда в рамках ТЗ вы разработали шаблон, нужно его как-то передать на внедрение на продуктив. Просто сохраняете HTML.

И если вам нужно временно отключить настройку, но не потерять её содержимое - опять же HTML.

 

Настройка пунктов отчета  ^

Теперь рассмотрим остальные настройки в редакторе:

 

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

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

А сейчас рассмотрим третью группу настроек.

Здесь настраиваются пункты, которые будут добавляться в отчет об ошибке.

Давайте сделаем здесь разные варианты. Например, такие:

 

Перезапустим и вызовем ошибку:

 

Сразу видим, что список пунктов уменьшился. Те, что мы отключили, в принципе не предполагается к отправке. А обязательные пункты отключить нельзя.

Это очень удобно для разработчиков и администраторов. Мы можем просто запретить пользователям снимать галочки с пунктов, чтобы однозначно увидеть полные данные об ошибке. 

 

Сбросим теперь настройки на Авто (к сожалению, кнопки по сбросу настроек нет).

 

Настройки для пользователей  ^

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

 

 

Они работают точно так же, но уже для конкретного пользователя ИБ.

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

 

 

Программная работа  ^

Вернемся к нашей обработке и рассмотрим принцип механизма. 

 

ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории()  ^

 

 

Что здесь происходит?

Мы пытаемся присвоить "Неопределено" в зарезервированную переменную. Происходит ошибка. Давайте перехватим её при помощи попытки:

 

В отладке мы видим содержимое информации об ошибке.

 

Это старый объект в 1С, но он получил новый метод: ЯвляетсяОшибкойКатегории()

Теперь каждая информация об ошибке относится к категориям. И все информации об ошибках относятся к категории "Все ошибки":

Но что нам с этим делать?

 

ОбработкаОтображенияОшибки()  ^

Дело в том, что если ранее мы НЕ перехватывали ошибку через попытку, то она сразу отправлялась на экран пользователю. И мы никак не могли с этим работать. 

Но теперь платформа позволяет использовать метод в модуле приложения: ОбработкаОтображенияОшибки()

 

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

Процедура имеет параметры:

 

ИнформацияОбОшибке - одноименный объект. Тот же самый, что мы перехватывали через попытку

ТребуетсяЗавершениеСеанса - булево - будет ли платформа требовать завершения сеанса. Изменить эту переменную вы можете, но ни на что это влиять не будет. Она нужна только для чтения.

СтандартнаяОбработка - булево - будет ли платформа сама отображать пользователю ошибку.

 

Рассмотрим пример из Демо-базы:

 

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

Вообще, данный пример можно было бы настроить и в режиме предприятия. Ведь всё здесь постоянно - и ФИ и номер телефона. Но пример показывает не кейсы применения, а саму программную работу. 

 

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

На скрине выше мы видим использование новой глобальной переменной ОбработкаОшибок. Тип у переменной МенеджерОбработкиОшибок.

 

Это переменная - самый главный объект по программному доступу к обработке ошибок.

Объект содержит методы, которые позволяют отображать информацию пользователя, получить форматированный текст с учетом настроек в базе, а так же читать и изменять эти самые настройки.

 

Это даёт разработчику возможность полностью видоизменять отображаемый пользователю форматированный текст. 

Если додумать наш  код из демо-базы, то ФИО и контактную информацию можно брать из базы. Например, добавить регистр сведений "ОтветственныеЗаОшибки". И в этом регистре указывать физ-лица в разрезе категорий ошибок. А в коде, при возникновении ошибки, выводить пользователю контактные данные этого физ-лица.

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

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

 

ОбработкаОшибок.КатегорияОшибкиДляПользователя()  ^

В примере из демо-базы используется ещё один метод для определения категории. На этот раз метод относится не к ИнформацияОбОшибке, а к ОбработкаОшибок. 

КатегорияОшибкиДляПользователя() возвращает конкретную категорию, к которой относится ошибка. Например, у нас это "непредвиденная ошибка".

Какой метод использовать?

На Зазеркалье использовался метод ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории(). Дело в том, что одна ошибка может относится сразу к нескольким категориям. Цитата:

У объекта ИнформацияОбОшибке есть метод ЯвляетсяОшибкойКатегории(). Одна ошибка может одновременно принадлежать к нескольким категориям.

В описании нового в платформе так же указывается этот метод

И на ИТС тоже:

Не совсем понятно, почему в демо-базе использовался другой метод. Если у вас есть ответ на этот вопрос, то можете писать в комментарии. Обновлю информацию в статье.

 

Журнал регистрации  ^

Как обстоят дела с фиксацией ошибки в журнале регистрации?

Сейчас мы находимся в отладке в самом начале метода ОбработкаОтображенияОшибки(). 

 

Если зайдём в журнал регистрации, то увидим, что ошибка уже в него записана:

То есть, дополнительно фиксировать информацию в журнал регистрации не нужно, даже если мы установим "СтандартнаяОбработка = Ложь". Уже на момент входа в процедуру запись в ЖР есть.

Но есть нюанс:

 

Ошибки внутри ОбработкаОтображенияОшибки()  ^

Вот у нас в обработке произошла ошибка. 1С передала управление в метод ОбработкаОтображенияОшибки().

Но что будет, если в этом методе тоже произойдёт ошибка? Как себя поведёт платформа?

Вызовем ошибку внутри процедуры по обработке ошибки (интересно звучит). Для этого попытаемся присвоить "Неопределено" в зарезервированную переменную

 

Выполняем обработку и видим стандартный текст с инфомацией об ошибке:

Перейдём в формирование отчета:

И посмотрим подробный текст ошибки:

 

Как видим, это текст ошибки, которая возникла в обработке. Здесь не содержится информация об ошибке, которую мы совершили после.

А что в журнале регистрации?

Опять же только одна ошибка. Та, которая является первопричиной. И нет никаких данных о том, что у нас была ещё и другая.

Дело в том, что когда в процедуре ОбработкаОтображенияОшибки() происходит ошибка, то 1С дальше работает по стандартной логике. Независимо от того, успели ли вы отключить СтандартнуюОбработку.

И в журнале регистрации вторая ошибка (в самом обработчике) фиксироваться не будет. 

А что если мы успели сами уже отобразить показать информацию пользователю? Для этого внесём изменения в код:

 

Вызываем ошибку:

В этом тексте есть в конце слово "ТЕСТ". А значит, это то окно, которое мы сами программно вызвали.

Но когда мы закроем это окно, 1с откроет новое:

Это окно уже без надписи "ТЕСТ". 

Дело в том, что 1С сначала выполнила открытие окна с ошибкой, которое мы выполнили сами, а затем, после того как процедуру ОбработкаОтображенияОшибки() не удалось выполнить, открыла ещё и стандартное окно.

Этот нюанс важно помнить при разработке. И быть очень осторожным, чтобы не допустить в методе ошибку. Иначе вы как разработчик можете даже не заметить её (ведь в журнале не фиксируется), а пользователя может пытать ситуация, когда ему дважды предлагают отправить отчет.

 

Выводы  ^

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

В следующих статьях мы продолжим разбирать данных механизм. Создадим свойс htttp-сервис регистрации ошибок. Попробуем реализовать пример использования обработчика ОбработкаОтображенияОшибки(). Будет интересно 👍

 

Понравилась статья?

Не будьте равнодушными! Поставьте лайк плюс, оставьте комментарий.

Не забудьте посмотреть видео по этой теме, в нём я наглядно показываю всё то, что говорится в статье: Отображение ошибок в 1С (новый механизм с версии 8.3.17)

И переходите к другим публикациям:

 

ИнформацияОбОшибке ОбработкаОтображенияОшибки ЯвляетсяОшибкойКатегории МенеджерОбработкиОшибок ОбработкаОшибок Ошибки Отчет Сервис регистрации

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7512    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5967    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    17799    YA_418728146    26    

71

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23786    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    14779    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wowik 890 11.08.20 11:29 Сейчас в теме
+1 за оформление, +1 за содержание = +1.
2. Sander80 100 11.08.20 11:58 Сейчас в теме
Что удивительно (это не к автору, а к 1с), это что общая обработка ошибок
- рекомендуется к использованию как чисто клиентская
- происходит после записи в журнал регистрации

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

А сервер регистрации ошибок у вас не получилось еще поднять? Было бы крайне интересно
3. SeiOkami 3517 11.08.20 12:06 Сейчас в теме
(2)
А сервер регистрации ошибок у вас не получилось еще поднять?

Сделал сервис регистрации (http-сервисом в базе 1С).
Позже сделаю обзор на это. Там несложно, но интересно.
В планах ещё сделать буферный http-сервис (возможно, на python). Он будет основным сервисом. Принимать отчеты от пользователей, складировать их, а далее (с заданной частотой) передавать их в базу 1С. Чтобы уменьшить количество затрачиваемых лицензий
5. Sander80 100 11.08.20 19:29 Сейчас в теме
(3) http-сервисом в базе 1С это прямо очень интересно!
Спасибо, будем ждать
6. untru 14 23.09.20 23:56 Сейчас в теме
(3)а где почитать как организовать свой сервис? Можете подсказать? Это же наверно обычный пост запрос с json в теле или как?
7. untru 14 09.10.20 23:32 Сейчас в теме
(3)Сделаете обзор? я что то полез, методом тыка понял что надо сдать все на /getInfo
Но у меня приходит в теле только инфо о системе. А где все остальное не пойму
8. SeiOkami 3517 10.10.20 20:02 Сейчас в теме
(7) да, как раз на след. неделе выйдет статья здесь и видео на ютубе
19. untru 14 10.10.20 22:39 Сейчас в теме
(8) Все, нашел на просторах ИТС как сделать) в pushReport все получил)
В статье будете делится конфигурацией?)
4. dimonb123 11.08.20 15:40 Сейчас в теме
спасибо!

подписался на ю-туб канал.
9. Xershi 1555 10.10.20 20:30 Сейчас в теме
Как администратор 1С интересно решение именно автоматического сбора таких ошибок.
Есть решение из ЖР тянуть это. руки пока не дошли, но там и без 8.3.17 это доступно.
10. SeiOkami 3517 10.10.20 20:49 Сейчас в теме
(9) на следующей неделе выложу статью и видео на ютубе с примером разработки простого сервиса по сбору ошибок.
Из ЖР, конечно, можно, но столько информации не вытянуть. В этом отношении в 8.3.17 очень интересное нововведение.
11. Xershi 1555 10.10.20 21:29 Сейчас в теме
(10) интересует только готовое решение.
Взял и работает. Статью пишут обычно для начинающих.
12. SeiOkami 3517 10.10.20 21:32 Сейчас в теме
(11) а дело в том, что на данный момент нет ни решений, ни "не начинающих". Либо они не показываются. Есть только инфа на ИТС, а всё остальное копать и делать самому. Результат этого копания и превращается в статью.
А готовое решение будет позже. Планирую разработку конфигурации для сбора и обработки ошибок. Если есть какие-то мысли по этому поводу, то можете писать в комментариях или личке.
13. Xershi 1555 10.10.20 21:36 Сейчас в теме
(12) сейчас расширения рулят.
14. SeiOkami 3517 10.10.20 21:36 Сейчас в теме
(13) это никак не относится к сервису регистрации ошибок. Расширения - это уже способ их исправить)
15. Xershi 1555 10.10.20 21:38 Сейчас в теме
(14) ну речь идет о том что пользователи не умеет жать кнопки, а алгоритм сложил нам это куда нужно и дал статистику.
16. SeiOkami 3517 10.10.20 21:39 Сейчас в теме
(15) есть возможность настроить 1С так, чтобы все ошибки автоматически отправлялись на сервис регистрации (со всеми данными, скринами и так далее). Так что, именно эту проблему и пытается решить нововведение.
17. Xershi 1555 10.10.20 21:40 Сейчас в теме
(16) я не помню писал ли 1С про эту настройку, но если это лишь настройка, то и статьи как раз хватит!
18. SeiOkami 3517 10.10.20 21:43 Сейчас в теме
(17) да, в этой статье просто не рассматривается сервис регистрации.

Вот на этом скрине видно, что в первой колонке (Отчет об ошибке) есть пункт "Отправлять отчет". Его просто нужно перевести в "Отправлять". А далее уже нужно иметь готовую систему, которая примет и отработает этот отчет об ошибке.
20. simon_simon 1 22.01.21 14:28 Сейчас в теме
Благодарю за статью. Ваш материал здорово помог в написании собственного обработчика ошибки.
Для развития темы и развития своего собственного функционала хотелось бы понять есть ли возможность программно получить в 1с скриншоты экранов в момент ошибки (те скриншоты, которые 1с позволяет получить в момент формирования отчета об ошибке).
21. SeiOkami 3517 22.01.21 20:13 Сейчас в теме
(20)
Я ещё напишу про это подробнее, но там всё просто:

ОтчетОбОшибке = Новый ОтчетОбОшибке(ИнформацияОбОшибке());
ОтчетОбОшибке.Записать(ПутьКАрхиву, Ложь);

Этот код выполняется на клиенте. При этом ошибки может вообще не быть - его можно выполнить в любой момент.
Однако, если в настройках базы не будет указано обязательное прикладывание скрина, то в архиве его не будет.
SagittariusA; simon_simon; +2 Ответить
27. simon_simon 1 07.10.21 15:15 Сейчас в теме
(21)
Мои попытки получить скриншот программным образом , к сожалению, не увенчались успехом.
При формировании ошибки и обработке ее со стороны пользователя (в интерактивном режиме ) все успешно сохраняется на диске .

При попытке получить данный архив с отчетом об ошибке и скриншотом программно - содержимое архива оказывается без скриншота. json строка с данными об ошибке на месте.
    
        ErrorProcessingSettings = New ErrorProcessingSettings;  
	ErrorProcessingSettings.IncludeWindowsPictureInReport = ErrorReportingMode.Send;
	RepInfo = New ErrorReport(ErrorInfo);
	TemporaryFileName = GetTempFileName("zip");
	RepInfo.Write(TemporaryFileName, False);

При чем я программно устанавливаю свойство "прикладывать окно"
28. SeiOkami 3517 07.10.21 15:17 Сейчас в теме
(27) я как-то написал этот метод. Но он работает только при настройке "прикладывать скриншот":
29. simon_simon 1 07.10.21 15:35 Сейчас в теме
(28)Выходит, что мои попытки установить это свойство программно ни к чему не привели. Немного странное поведение платформы, как мне кажется. Хотя возможно программно я что-то делаю не так.
30. SeiOkami 3517 07.10.21 15:36 Сейчас в теме
(29) а если не программно, а просто в настройках указать?
31. simon_simon 1 07.10.21 15:38 Сейчас в теме
(30)Все отработало как надо. Скриншот на месте.
32. simon_simon 1 08.10.21 13:48 Сейчас в теме
(31)
(30)
Подскажите пожалуйста , может быть приходилось решать, как на web клиенте получить все то, что ОтчетОбОшибке выдает методом записать
33. simon_simon 1 08.10.21 13:50 Сейчас в теме
(32) на вебе ПолучитьИмяВременногоФайла не определено. А хотелось бы скрины об ошибке прикладывать не только при работе на тонком клиенте, но и на веб
34. SeiOkami 3517 08.10.21 13:53 Сейчас в теме
(33) я не пробовал, но посмотрите здесь: https://its.1c.ru/db/v8std/content/542/hdoc
Прикрепленные файлы:
35. simon_simon 1 08.10.21 13:54 Сейчас в теме
22. kraynev-navi 681 25.03.21 15:38 Сейчас в теме
А как сделать так, чтобы все осталось как было? Т.е. чтобы не открывался отчет, а если ошибки были, то в стандартных старых "ошибочных" формочках. Программно можно сделать?
23. kraynev-navi 681 26.03.21 09:33 Сейчас в теме
(22) как-то так:

Настройки = ОбработкаОшибок.ПолучитьОбщиеНастройки();
Настройки.ВариантОтображенияСообщения=ВариантОтображенияСообщенияОбОши­бке.ПодробноеПредставлениеОшибки;
ОбработкаОшибок.УстановитьОбщиеНастройки(Настройки);
24. Yashazz 4791 22.06.21 16:37 Сейчас в теме
Погонял на 8.3.19.1150. Поскольку а) мне некогда делать отдельную публикацию типа "Нюансы", и б) всё это сильнейше зависит от релиза и дцать раз ещё поменяется, то кратко отпишусь тут. Что замечено:

1. Как минимум некоторые ошибки средствами настройки клиентского показа (через "Режим тех.специалиста", без кодинга) не ловит. Ни в режиме включённой/разрешённой отладки, ни без неё. Смоделировал на: ошибке открытия формы, ошибке перехода по навигационной ссылке, ошибке работы с избранным, применении СКД-отчёта с кривой схемой (не настройками, а именно самой схемой). Все моделируемые ошибки - восстановимые. Так вот, плевать оно хотело на все настройки, в т.ч. "Все ошибки" и "Прочие". Ноль эмоций, только типовая сообщалка.
2. Программно ОбработкаОтображенияОшибки нормально работает и в режиме отладки, клиентские и серверные ошибки нормально ловит. А вот в запуске ком-Application она не исполняется.
3. Содержимое, возвращаемое ИнформацияОбОшибке в некоторых случаях - матрёшка, и чтоб добраться до вменяемого текста, приходится погружаться, раскрывая свойство "Причина", иногда на 3-4 уровня. Поэтому скармливать что-либо сообщалке надо вдумчиво, с анализом.
4. Если в транзакции происходит реальная обрабатываемая ошибка, то "наведённая ошибка-фантом" вида "В данной транзакции уже происходили ошибки" никак и нигде не регистрируется этим новым механизмом. При этом, необрабатываемая ошибка в транзакции фиксируется в ЖР, т.е. режим записи в ЖР там явно "независимый".
5. При этом, "вложенные" ошибки обрабатываются единожды на "верхнем уровне", т.е. принудительный вызов ИнформацияОбОшибке() даёт пустоту, буфер ошибок в этот момент уже вычищен.
6. У объекта "ДанныеОтчета" в подсказке больше свойств, чем описано в СП. Явно не всё документировали. Например, "ДанныеОтчета". Есть опечатки в самих методах (например, "ОтправлятьОчет" в настройке обработки ошибок юзера). Это значит, что ляпы могут быть и смысловые.
7. Никакого описания категорий ошибок в хдто-пакете с URI http://v8.1c.ru/8.2/data/bsl/ нету вообще. Или в СП ошиблись, или я не знаю что.
8. ОбработкаОтображенияОшибки вызывается даже в случае ошибки в ПередНачаломРаботыСистемы (правда, там ничего толком не сделать без основного-то окна 1С), ну хоть в ЖР. Интересно, ловятся ли и к каким категориям будут относиться ошибки авторизации, внешних соединений итд. Особенно если речь о вызываемой базе-провайдере - что это за категория будет применительно к ней?
9. ОбработкаОтображенияОшибки можно вызывать принудительно, в т.ч. из своей попытки-исключения, передавая ей информацию об ошибке. Но, при этом, естественно, никакой записи в ЖР не будет.
10. Жаль, что ошибки расширений не выведены в отдельную категорию, и нет признака отличия их от ошибок основной конфы. Имя модуля и даже строка кода бесполезны, если оно всё частично перегружено, да ещё несколькими расширениями.
11. В версии 8.3.19 категории ошибки разделены на возвращаемые всегда и НЕ всегда (например, КатегорияОшибкиДляПользователя не вернёт ничего, связанного с выполнением команд встроенного языка).
25. andru_1 22.07.21 22:02 Сейчас в теме
Толстый клиент, обычное приложение не работает. Платформа 8.3.18.1483, режим совместимости отключен.
Поведение исключений не поменялось. Процедура ОбработкаОтображенияОшибки в модуле обычного приложения не срабатывает. Интересно зачем ее туда добавили... У всех так или мне повезло?
26. Yashazz 4791 23.07.21 10:09 Сейчас в теме
(25) В обычном приложении оно вообще не работает. Обработчик события есть, в модуле можно типа вроде как добавить, только он игнорируется. Наплевали на все старые конфы, короче говоря.
gubanoff; +1 Ответить
36. buzzzard 51 29.10.21 17:40 Сейчас в теме
Возможно ли как-то дополнить информацию, отправляемую как отчет об ошибке, информацией из контекста, в котором произошла ошибка?
Допустим ошибка произошла в управляемой форме, в контексте сервера, и хочется отправить в отчете об ошибке значения некоторых переменных.
Перепробовал все свои идеи и пока мне кажется, что это в принципе невозможно.
Так ли это? Никто не пробовал?
37. SeiOkami 3517 29.10.21 18:45 Сейчас в теме
(36)
Можно использовать "ДополнительныеДанные"
ОтчетОбОшибке.ДополнительныеДанные = Новый Структура("ТЕСТ", "А");
Прикрепленные файлы:
38. buzzzard 51 29.10.21 22:25 Сейчас в теме
(37) Я не зря написал, что ошибка происходит в управляемой форме в контексте сервера.
ОтчетОбОшике
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
39. SeiOkami 3517 29.10.21 22:34 Сейчас в теме
(38) не правильно формировать отчёт об ошибке на сервере. Это нужно делать на клиенте
40. buzzzard 51 29.10.21 23:16 Сейчас в теме
(39) Да без проблем. Я с этим не спорю. Вопрос в том, как при этом, на клиенте, получить значения переменных, которые были в момент возникновения ошибки в каком-то серверном контексте?
41. buzzzard 51 29.10.21 23:19 Сейчас в теме
(39) Ну или, ладно, чисто для упрощения. Как на клиенте при формировании отчета об ошибке получить значения переменных, которые были в момент возникновения ошибки в клиентском контексте?
42. buzzzard 51 29.10.21 23:54 Сейчас в теме
(39) Зайду с другой стороны. Чтобы было понятно чего мне хочется.
Допустим есть клиентская процедура в управляемой форме.
В этой процедуре есть переменная, значение которой мне хочется мониторить.
Значение этой переменной меняется несколько раз в процессе выполнения этой процедуры.
И в какой-то момент, не обязательно при изменении этой переменной, возникает ошибка, необязательно связанная с этой переменной.
Но мне хочется знать какое значение было в моей переменной в момент ошибки.
Возможно ли это?
Мне на ум пришла только Попытка, т.е. перехватить ошибку и в этом момент снять телеметрию.
Но! Если я перехватываю ошибку, тогда не отработает стандартная ОбработкаОшибок.

Ну а с серверными ошибками еще сложнее ;)
43. buzzzard 51 30.10.21 00:22 Сейчас в теме
(39) И все таки спасибо за наводку. Разобрался с клиентскими ошибками.

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

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


Остается придумать как отправить отчет с дополнительной телеметрией после ошибки в серверном контексте.
44. Alex7850 28.03.22 17:32 Сейчас в теме
Подскажите, как то можно отключить отображение ошибок у пользователя временно?
45. MaCCapAkIII 10.11.22 15:49 Сейчас в теме
И еще есть вопрос. Если мне нужно подменить отображаемый у пользователя текст ошибки на свой текст, а, собственно, информацию об ошибке записать в ЖР и дальше анализировать самостоятельно - это возможно без глобального описания в МодулеПриложения обработчика ошибок? Пользователя смущает длинная простыня кода на форме с сообщением об ошибке. Исключение вызывается программно через ВызватьИсключение в неудачной Попытке.
user591389_aska_rabota; +1 Ответить
46. GetNight 48 24.09.24 18:05 Сейчас в теме
Из-за того, что такой глобальной переменной (ОбработкаОшибок) в этой версии ещё не существует, обработка, созданная на версии 8.3.22 вообще не запустилась на версии 8.3.16:

{ВнешняяОбработка.БУХ_СозданиеСводныхПеремещений.Форма.Форма.Форма(611,24)}: Переменная не определена (ОбработкаОшибок)
ПодробноОбОшибке = <<?>>ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);

Сделал функцию, которая помогла её запустить
//ZDN 24.09.24 Чтобы узнать версию платформы или проверить, что текущая версия достаточна
//Варианты:
//		ПодробноОбОшибке = ?(ВерсияПлатформы(83.17), Вычислить("ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())"), ИнформацияОбОшибке().Причина);
//		Версия = ВерсияПлатформы();
Функция ВерсияПлатформы(Минимум=Неопределено) Экспорт
	Версия	  = СтрРазделить(Вычислить("Новый СистемнаяИнформация").ВерсияПриложения, ".");
	Платформа = Число(Версия[0]+Версия[1]+"."+Версия[3]);
	Возврат ?(Минимум = Неопределено, Платформа, Платформа>=Минимум)
КонецФункции
Показать


Если в качестве параметра передать нужную версию, она будет возвращать Истина или Ложь, если ничего не указывать - то текущую версию в формате числа (8.3.22.2283 будет возвращаться, как 83.2283) что облегчает сравнение версий между собой.

Использовать можно так (через вычислить, чтобы старая платформа не ругнулась на отсутствие переменной ОбработкаОшибок):
ПодробноОбОшибке = ?(ВерсияПлатформы(83.17), Вычислить("ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())"), ИнформацияОбОшибке().Причина)
47. SeiOkami 3517 24.09.24 19:31 Сейчас в теме
(46) а если такой метод для получения?

Попытка
	Возврат Новый("МенеджерОбработкиОшибок");
Исключение
	Возврат Неопределено;
КонецПопытки
48. GetNight 48 29.09.24 00:16 Сейчас в теме
(47) Ну... узнать таким образом я смогу, есть или нет такой менеджер... но 1С от этого ругаться на ОбработкаОшибок не перестанет. Однако можно обыграть чуть-чуть иным образом (проверил на обеих версиях - работает)... просто мне прошлый способ показался более лояльным к здравому смыслу...

Попытка
	ОбработкаОшибок = Неопределено;
	Сообщить("Менеджер обработки ошибок не существует")
Исключение
	Сообщить("Менеджер обработки ошибок работает")
КонецПопытки;

ИнформацияОбОшибке = ИнформацияОбОшибке();
Если ОбработкаОшибок = Неопределено Тогда
	Сообщить("Менеджер обработки ошибок не работает, получаем ошибку старым способом");
	Попытка
		ПодробноОбОшибке = ИнформацияОбОшибке.Причина.Описание;
	Исключение
		ПодробноОбОшибке = ИнформацияОбОшибке.Описание;
	КонецПопытки
Иначе
	Сообщить("Менеджер обработки ошибок работает, получаем ошибку через него");
	ПодробноОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
КонецЕсли;
Показать
49. SeiOkami 3517 29.09.24 05:53 Сейчас в теме
(48) , ОбработкаОшибок - это и есть менеджер.

Делаем функцию

Функция ОбработкаОшибок()

Попытка
    Возврат Новый("МенеджерОбработкиОшибок");
Исключение
    Возврат Неопределено;
КонецПопытки;

КонецФункции
Показать


А далее заменяем все обращения к ОбработкаОшибок на новую функцию. И проверяем, если она вернула Неопределено, значит в данной версии платформы новое отображение ошибок не поддерживается
50. GetNight 48 30.09.24 12:54 Сейчас в теме
(49)
ОбработкаОшибок - это и есть менеджер

Вроде нигде не спорил. Суть от этого не меняется.
В анонсах 1С написано, что в 8.3.17 "добавлена глобальная переменная ОбработкаОшибок".
Исходя из этого и решал. Конечно, всегда спасибо за взгляд под другим углом.
Все три решения действуют и действуют безотказно.

Единственное, в вашей реализации, если в коде будет встречаться
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)
- то обработка вылетит ещё до начала работы

а когда предварительно идет присвоение переменной ОбработкаОшибок через попытку - то платформа не считает это критической ошибкой и код можно использовать без завуалирования через Вычислить("ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())")
и разветвлять просто через Если Иначе
Оставьте свое сообщение