Настройка обработки ошибок 1с
В 8.3.17 появился механизм перехвата и обработки ошибок, происходящих с платформой и её сервисами. Подробно описано тут. Встроенный интерфейс позволяет указать общие настройки и персональные для пользователей. Так вот пользовательские мне представляются не вполне удобно организованными, в связи с чем предлагаю эту обработку.
Умеет: прочитать пользователей ИБ (в связке с пользователями БД или без них, с группировкой по смысловым справочникам БСП или в плоском виде), показать их настройки, изменить их настройки, в т.ч. групповым образом. Простой интерфейс, минимум трудозатрат по указанию шаблонов "текстов для ошибок" пользователям, если их много. Для каждой категории ошибок.
Влияет, разумеется, только на вновь запускаемые сеансы, т.е. сначала настраиваем, потом запускаем пользователей.
Ну и немножко забавного:
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 категории ошибки разделены на возвращаемые всегда и НЕ всегда (например, КатегорияОшибкиДляПользователя не вернёт ничего, связанного с выполнением команд встроенного языка).
12. В обычных формах не работает от слова "совсем", хотя событие в модуле обычного приложения объявляется и делается. Но упс.
13. У штатной кнопки "Вставить параметр" в окне правки шаблона текста для ошибки - очень забавная подсказка)
И ещё много кривых недоделочек, как всегда)
Вещь малонужная и редко используемая, но, может, кому-либо пригодится.
Название reperr образовалось от report и error, произносится как рэпер.
Проект живет на GitHub.
Какие задачи решает reperr?
Как пользоваться?
Рассмотрим один из вариантов: допустим, что в роли баг-трекера выступает Jira. Также имеется некая информационная база, ошибки в которой решено перехватывать и отправлять баг-трекер.
Для начала необходимо создать и настроить служебную учетную запись Jira, от имени который reperr будет регистрировать ошибки. Для этой учетной записи потребуется создать токен. Он требуется для доступа к Jira API.
Токен генерируется тут:
В следующем окне нужно перейти в раздел "Безопасность":
Полученный токен нужно сохранить, он потребуется на одном из следующих шагов.
Затем нужно скопировать исходники проекта на ту машину, на которой он будет работать. Можно клонировать репозиторий или скачать архив из релизов.
Следующий шаг: указать в файле `src/appsettings.json` реквизиты подключения к вашему экземпляру Jira и обязательные параметры, например, задачи какого типа и с каким приоритетом создавать.
Вставить в браузер URL, ведущий к Jira API и дописать к нему issuetype, priority или status соответственно.
Из примера выше:
Ответы Jira API будут содержать исчерпывающую информацию.
После установки параметров нужно запустить проект. Сделать это можно по-разному: в докере и неправильным способом напрямую на OneScript.Web.
Я настоятельно рекомендую запускать правильным способом. Для этого в каталоге проекта нужно выполнить команду:
Само собой, движок docker и docker-compose должны быть установлены.
После запуска имеет смысл проверить, что веб-интерфейс открывается в обычном браузере.
Да нет никаких дашбордов) Но они когда-нибудь появятся!
Далее нужно указать в информационной базе ссылку на reperr, а также изменить другие параметры регистрации ошибок, если это требуется. Для применения настроек 1С попросит перезапустить текущий сеанс.
Окно с настройками открывается из меню "Функции для технического специалиста" -> "Стандартные" -> "Управления настройками обработки ошибок":
Можно считать, что первоначальная настройка выполнена. Чтобы проверить работоспособность того, что мы настроили, воспроизведем какую-нибудь ошибку. Самое простое - написать внешнюю обработку с обращением к чему-нибудь несуществующему.
Что произойдет, если ошибка возникнет много раз и у нескольких пользователей? Неужели в трекере появится много одинаковых задач?
Это поведение будет зависеть от выбранной точки интеграции. Если точка интеграции - Jira или Redmine, то не появится. В RabbitMQ и Sentry отправляется каждый отчет.
Проверим, как выглядит результат в Jira. На скриншоте ниже видно, что создана задача REP-53, со стеком и скриншотом. Если при отправке ошибки из 1С прикрепить произвольный файл, то и он отобразится во вложениях.
Опыт эксплуатации и особенности
Решение стабильно работает как в Windows, так и в Linux, дает минимальную нагрузку, работает без сбоев месяцами.
На какие особенности следует обратить внимание:
Решение будет полезным как службе поддержки, так и конечным пользователям. В контуре тестирования \ разработки оно тоже пригодится.
Всем, кто уже перешел на 8.3.17 или 8.3.18, можно смело пользоваться. Я буду очень благодарен за обратную связь, новые идеи, и, конечно, пул-реквесты.
Технические подробности
Этот раздел привожу для тех, кому интересны внутренности приложения.
reperr разработан на документации к платформе. Другие публикации (первая, вторая) на IS хорошо дополняют документацию, поэтому повторяться не буду.
Ядро reperr выполняет три функции:
- получает информацию об ошибках, которые возникают в подключенных базах
- запрашивает прикладную часть о необходимости регистрации ошибки
- получает, распаковывает и сохраняет в локальном каталоге отчеты об ошибках (архивы с report.json, скриншотами и другими файлами, которые прикрепил пользователь)
"Прикладная" часть отвечает за:
- отображение информации в веб-интерфейсе
- сохранение информации о возникших ошибках и отчетов по этим ошибкам во внутреннем формате
- вычисление "отпечатков" ошибок
- принятие решения об отправке ошибки
- отправку ошибок в точку интеграции
Архитектура проекта далека от идеальной, но уже сейчас позволяет относительно быстро реализовать свою точку интеграции. Для этого нужно:
- создать свой класс и реализовать в нем методы программного интерфейса
- добавить свой ключ в файл настроек appsettings.json
- немного дополнить класс, который обрабатывает файл настроек.
Если тема окажется актуальной и интересной, я могу создать отдельную публикацию на тему подключения новых точек интеграции, на примере СППР. Какой issue наберет большее количество лайков, на том и сделаю.
PS: в недрах проекта спрятана пасхалка. Ее не так уж сложно найти, нужно совсем немного постараться. Поверьте, это стоит того)
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Реализовано в версии 8.3.17.1091
Платформа иногда показывает ошибки, непонятные пользователю – ошибки SDBL, ошибки встроенного языка, ошибки в запросе и т.п. Это затрудняет работу пользователей.
Мы работаем над улучшением этой ситуации. Вот что мы хотим дать различным целевым группам, работающим с нашими продуктами:
Прикладные разработчики: мы хотим дать прикладным разработчикам возможность обрабатывать все ошибки, возникающие в приложении, и показывать пользователям полезную для них информацию.
ИТ-отделы компаний клиентов, а также компании, осуществляющие внедрения продуктов 1С: им мы хотим дать возможность быстрого получения информации об ошибках и возможность проинформировать пользователя о том, куда обращаться для решения проблемы.
Чтобы реализовать вышеперечисленное мы сделали в платформе ряд нововведений. Перечислим, для каких целевых групп они предназначены.
Для всех
Мы разделили ошибки по категориям:
Как категоризация ошибок будет полезна различным целевым группам – смотрите ниже.
Для конечных пользователей
Для прикладных разработчиков
У объекта ИнформацияОбОшибке есть метод ЯвляетсяОшибкойКатегории(). Одна ошибка может одновременно принадлежать к нескольким категориям.
Разработчики конфигураций получают возможность (например, исходя из категории ошибки) менять текст и форму отображения ошибки, показываемые пользователю, а также получают возможность отправки информации об ошибке (например, на сервис техподдержки).
У глобального контекста добавлено свойство ОбработкаОшибок нового типа МенеджерОбработкиОшибок. МенеджерОбработкиОшибок предоставляет доступ к функциям для обработки ошибок. В частности, у него есть методы:
ПредставлениеОшибкиДляПользователя() - возвращает текст ошибки, понятный пользователю (в виде форматированной строки).
Сервис регистрации ошибок – внешний по отношению к платформе компонент, представляющий собой набор НТТР-сервисов с определенными интерфейсами и может быть реализован с помощью любой подходящей технологии. В состав платформы «1С:Предприятие» версии 8.3.17 войдет пример реализации сервиса регистрации ошибок на платформе «1С:Предприятие».
Для администраторов
Как было сказано выше, разработчик может программно отрабатывать обработку ошибок (писать код обработки отображения) в режиме конфигуратора.
Форма «Управление настройками ошибок»:
Также есть возможность отправлять отчеты об аварийном завершении работы приложения в сервис регистрации ошибок платформы фирмы 1С.
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Планируется в версии 8.3.21
В версии 8.3.21 мы сделали ряд доработок, призванных сделать взаимодействие системы с пользователем более удобным для пользователя.
Помощь пользователю при ошибке при входе в систему
Если ошибка произошла при входе в систему, пользователю можно будет показать дополнительную информацию, которая сможет помочь ему решить возникшую проблему:
Ссылка на ресурс с информацией (например, на сайт, где описаны способы решения возникшей проблемы)
Ошибки, возникающие при входе в систему – одни из самых непростых в обработке. Такие ошибки, в частности, могут возникать из-за недоступности сервера 1С, и, значит, в этот момент с сервера нельзя получить данные о том, какую информацию показать пользователю. Поэтому описанную выше информацию можно записать для каждой базы в файл списка баз *.v8i – при неудачном входе в систему информация будет считана из этого файла (при доступности файла) и показана пользователю.
Есть варианты работы, когда файлы *.v8i недоступны – работа в облаке, удалённая работа и т.п. Поэтому эту информацию также можно настроить через стандартную обработку «Управление настройками отображения ошибок» (параметры «Текст помощи» и «Навигационная ссылка помощи») и сохранить в инфобазе. Если с клиента уже был ранее осуществлен успешный вход в систему – эти параметры считываются с сервера и кэшируется на клиенте.
Если клиент успешно связался с сервером и считал актуальные значения параметров «Текст помощи» и «Навигационная ссылка помощи», но далее при работе системы возникли проблемы при соединении с сервером – в диалоге попытки повторного подключения будут использованы последние считанные значения параметров.
Обратите внимание! Информация, записанная в файле *.v8i, и настройки параметров «Текст помощи» и «Навигационная ссылка помощи» - независимы друг от друга. В случае, если доступен файл *.v8i, но недоступен сервер 1С и на клиенте нет закэшированных значений параметров «Текст помощи» и «Навигационная ссылка помощи» – пользователю будет показана информация из файла *.v8i, в противном случае – информация из параметров «Текст помощи» и «Навигационная ссылка помощи».
Настройки подключения к базе
В файл списка баз (*.v8i) в свойства базы добавляется параметры:
StartupErrorHelpText (строка) – текст, отображаемый в диалоге ошибки до начала сеанса или диалоге попытки повторного подключения
StartupErrorHelpURL (строка) – ссылка на ресурс с информацией
Тонкий клиент
Проверьте сетевое соединение
Проверьте, что параметры подключения указаны верно
Если проблема возникла уже после начала работы с системой - на форме повтора попытки соединения с сервером отображаемый текст будет таким же, как и на таблице вверху, а полный текст можно посмотреть, нажав на ссылку «Показать подробности…».
Веб-клиент
При невозможности связаться с веб-сервером в браузере будет отображена страница с информацией об ошибке подключения, текстом, заданный в настройках, и текстом, полученным из запроса на адрес сервиса информации (т.е. фактически с той же информацией, что и в тонком клиенте):
Это будет работать при соблюдении нескольких условий:
На веб-сервер уже был осуществлен удачный вход из браузера (для кэширования на клиенте страницы, показывающей информацию об ошибке)
Браузер должен поддерживать технологию service-workers
Про сервер обработки ошибок при запуске
Выше мы упомянули параметр «Адрес сервиса обработки ошибок при запуске».
Если этот параметр задан, то при ошибках запуска по этому адресу клиент 1С сделает запрос дополнительной информации. А по этому адресу можно настроить веб-сервер, который будет отдавать более подробную информацию о текущей ситуации - информировать пользователей при возникновении неожиданных аварийных ситуаций и / или недоступности сервера и т.п. Например, можно отобразить пользователю текст “Мы уже работаем над проблемой. Работа сервера возобновится после 14:00”.
Для поддержки это сценария можно реализовывать совсем простой вариант: просто положить JSON-файл в папку и настроить веб-сервер (Apache, nginx, IIS) на отдачу этого файла. При возникновении проблем на сервере можно вписать в этот файл необходимый текст (userMessage) и настроить время, до которого этот текст будет отображаться на форме (в нашем примере – до 14:00).
Можно реализовывать и более сложные сценарии – например, отправлять информацию об ошибках при входе в систему на внутренний сервис техподдержки организации.
Отчет об ошибке
При формировании отчета об аварийном завершении добавляется возможность показа окна “О программе”.
Платформа иногда показывает ошибки, непонятные пользователю – ошибки SDBL, ошибки встроенного языка, ошибки в запросе и т.п. Это затрудняет работу пользователей.
Фирма 1С работает над улучшением этой ситуации. Вот что 1С хочет дать различным целевым группам, работающим с её продуктами:
Чтобы реализовать вышеперечисленное в 1С сделали в платформе ряд нововведений. Перечислим, для каких целевых групп они предназначены.
- НарушениеПравДоступа
- ОшибкаДоступаКЛокальномуФайлу
- ОшибкаСети
- ОшибкаРаботыСПринтером
- ОшибкаКомпиляцииВстроенногоЯзыка
- ОшибкаВоВремяВыполненияВстроенногоЯзыка
- ОшибкаИспользованияВстроенногоЯзыка
- ИсключениеВызванноеИзВстроенногоЯзыка
- ОшибкаСистемыВзаимодействия
- ОшибкаНастроекКомпоновкиДанных
- ОшибкаСеанса
- ОшибкаХранимыхДанных
- ПрочаяОшибка
У объекта ИнформацияОбОшибке есть метод ЯвляетсяОшибкойКатегории() . Одна ошибка может одновременно принадлежать к нескольким категориям.
Разработчики конфигураций получают возможность (например, исходя из категории ошибки) менять текст и форму отображения ошибки, показываемые пользователю, а также получают возможность отправки информации об ошибке (например, на сервис техподдержки).
У глобального контекста добавлено свойство ОбработкаОшибок нового типа МенеджерОбработкиОшибок. МенеджерОбработкиОшибок предоставляет доступ к функциям для обработки ошибок. В частности, у него есть методы:
1. ПредставлениеОшибкиДляПользователя () - возвращает текст ошибки, понятный пользователю (в виде форматированной строки).
Читайте также: