Новое отображение ошибок в 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)

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

 

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4608    dsdred    53    

73

Как готовить и есть массивы

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

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

24.01.2024    5307    YA_418728146    25    

64

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6434    dsdred    36    

112

1С-ная магия

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

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

06.10.2023    18501    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12108    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8847    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6288    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    16011    SeiOkami    31    

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

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

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

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

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

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

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

Этот код выполняется на клиенте. При этом ошибки может вообще не быть - его можно выполнить в любой момент.
Однако, если в настройках базы не будет указано обязательное прикладывание скрина, то в архиве его не будет.
simon_simon; +1 Ответить
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 3423 07.10.21 15:17 Сейчас в теме
(27) я как-то написал этот метод. Но он работает только при настройке "прикладывать скриншот":
29. simon_simon 1 07.10.21 15:35 Сейчас в теме
(28)Выходит, что мои попытки установить это свойство программно ни к чему не привели. Немного странное поведение платформы, как мне кажется. Хотя возможно программно я что-то делаю не так.
30. SeiOkami 3423 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 3423 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 647 25.03.21 15:38 Сейчас в теме
А как сделать так, чтобы все осталось как было? Т.е. чтобы не открывался отчет, а если ошибки были, то в стандартных старых "ошибочных" формочках. Программно можно сделать?
23. kraynev-navi 647 26.03.21 09:33 Сейчас в теме
(22) как-то так:

Настройки = ОбработкаОшибок.ПолучитьОбщиеНастройки();
Настройки.ВариантОтображенияСообщения=ВариантОтображенияСообщенияОбОши­бке.ПодробноеПредставлениеОшибки;
ОбработкаОшибок.УстановитьОбщиеНастройки(Настройки);
24. Yashazz 4709 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 4709 23.07.21 10:09 Сейчас в теме
(25) В обычном приложении оно вообще не работает. Обработчик события есть, в модуле можно типа вроде как добавить, только он игнорируется. Наплевали на все старые конфы, короче говоря.
gubanoff; +1 Ответить
36. buzzzard 51 29.10.21 17:40 Сейчас в теме
Возможно ли как-то дополнить информацию, отправляемую как отчет об ошибке, информацией из контекста, в котором произошла ошибка?
Допустим ошибка произошла в управляемой форме, в контексте сервера, и хочется отправить в отчете об ошибке значения некоторых переменных.
Перепробовал все свои идеи и пока мне кажется, что это в принципе невозможно.
Так ли это? Никто не пробовал?
37. SeiOkami 3423 29.10.21 18:45 Сейчас в теме
(36)
Можно использовать "ДополнительныеДанные"
ОтчетОбОшибке.ДополнительныеДанные = Новый Структура("ТЕСТ", "А");
Прикрепленные файлы:
38. buzzzard 51 29.10.21 22:25 Сейчас в теме
(37) Я не зря написал, что ошибка происходит в управляемой форме в контексте сервера.
ОтчетОбОшике
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
39. SeiOkami 3423 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 Ответить
Оставьте свое сообщение