Тип: МенеджерОбработкиОшибок. Используется для настройки обработки ошибок.
Полное описание, параметры и ограничения
Глобальный контекст.ОбработкаОшибок (Global context.ErrorProcessing)
Глобальный контекст (Global context)
ОбработкаОшибок (ErrorProcessing)
Доступен, начиная с версии 8.3.17.
Использование:
Только чтение.
Описание:
Тип: МенеджерОбработкиОшибок.
Используется для настройки обработки ошибок.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
МенеджерОбработкиОшибок
Использование в версии:
Доступен, начиная с версии 8.3.17.
Методическая информация
Практические примеры
Настоящий отказ учебной карточке: категория, технический разбор и пользовательский диалог
Полная собственная форма считает3×250=750, реально перехватывает отказ количеству4 при остатке3, сравнивает типы четырех представлений и по отдельной кнопке показывает стандартный диалог без формирования отчета.
Где и как запускать
Полный модуль ОбщаяФорма.СтендОшибки85 собственной новой пустой конфигурации; desktop managed client и server guard, runtime0.
Подготовка
Создайте новую пустую файловую базу платформы8.5.1.1343 с конфигурацией УчебныеПредставленияОшибок85, русский язык, управляемое приложение. Предметных объектов, регистров, подписок, заданий и расширений нет; рабочие УТ/УНФ/КА/БП не подходят.
В Общие → Общие формы создайте управляемую форму СтендОшибки85. Два реквизита: Итог85 Строка неограниченной длины, Разбор85 Строка неограниченной длины. Выведите оба многострочными полями только для просмотра.
Создайте команды УспешныйРасчет85, РазобратьСвойОтказ85, ПоказатьСвоюОшибку85, назначьте одноименные процедуры и добавьте кнопки. ПриСозданииНаСервере свяжите с одноименным обработчиком. Вставьте весь код на уровне модуля формы.
Откройте ОбщаяФорма.СтендОшибки85 своей учебной командой в настольном тонком или толстом управляемом клиенте. Веб-клиент не подходит всему уроку: ПодробноеПредставлениеОшибки и ПредставлениеОшибкиДляПользователя native не доступны web.
Никаких собственных настроек обработки/шаблонов/отправки отчетов не устанавливайте. Используются штатные настройки своей новой базы. Не добавляйте SMTP/URL/службу приема отчета или глобальный обработчик отображения ошибок.
Сначала нажмите успешный расчет, затем разбор отказа и только потом отдельную кнопку диалога. Полученная ИнформацияОбОшибке остается клиентской переменной формы, не сериализуется на сервер и не берется от неизвестного ИсходныйОбъект.
В этом уроке только вымышленные3книги/250рублей. Подробный технический текст может содержать имя вашего собственного модуля и номер строки; показывайте его лишь в своем стенде, не публикуйте снимки с рабочими ошибками.
&НаКлиенте
Перем СвояОшибка85;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьСвойПустойСтенд();
Итог85 = "Сначала успешный расчет; затем отказ превышению своего учебного остатка";
Разбор85 = "";
КонецПроцедуры
&НаКлиенте
Процедура УспешныйРасчет85(Команда)
ПроверитьНаСервере85();
СвояОшибка85 = Неопределено;
Разбор85 = "";
Итог = РассчитатьСвоюКарточку85(3, 3, 250);
Если Итог <> 750 Тогда
ВызватьИсключение "Три собственные книги по250 должны дать750";
КонецЕсли;
Итог85 = "Собственная карточка:3×250=750. Ошибки нет, списание и запись не выполнялись";
КонецПроцедуры
&НаКлиенте
Процедура РазобратьСвойОтказ85(Команда)
ПроверитьНаСервере85();
СвояОшибка85 = Неопределено;
Разбор85 = "";
Итог85 = "Учебная проверка еще не закончена";
Попытка
РассчитатьСвоюКарточку85(4, 3, 250);
Исключение
СвояОшибка85 = ИнформацияОбОшибке();
КонецПопытки;
Если ТипЗнч(СвояОшибка85) <> Тип("ИнформацияОбОшибке") Тогда
ВызватьИсключение "Нужна настоящая перехваченная ошибка, не строка или структура";
КонецЕсли;
Категория = ОбработкаОшибок.КатегорияОшибкиДляПользователя(СвояОшибка85);
Если Категория <> КатегорияОшибки.ИсключениеВызванноеИзВстроенногоЯзыка Тогда
ВызватьИсключение "Собственный ВызватьИсключение должен иметь свою documented категорию";
КонецЕсли;
Краткое = ОбработкаОшибок.КраткоеПредставлениеОшибки(СвояОшибка85);
Подробное = ОбработкаОшибок.ПодробноеПредставлениеОшибки(СвояОшибка85);
Представление = ОбработкаОшибок.ПредставлениеОшибкиДляПользователя(СвояОшибка85);
Сообщение = ОбработкаОшибок.СообщениеОбОшибкеДляПользователя(СвояОшибка85);
Если ТипЗнч(Краткое) <> Тип("Строка") Или ТипЗнч(Подробное) <> Тип("Строка")
Или ТипЗнч(Представление) <> Тип("ФорматированнаяСтрока")
Или ТипЗнч(Сообщение) <> Тип("ФорматированнаяСтрока") Тогда
ВызватьИсключение "Нужно отличать технические строки от formatted пользовательских сообщений";
КонецЕсли;
Если ПустаяСтрока(Краткое) Или ПустаяСтрока(Подробное)
Или ПустаяСтрока(Строка(Представление)) Или ПустаяСтрока(Строка(Сообщение)) Тогда
ВызватьИсключение "Представления собственной реальной ошибки не должны быть пустыми";
КонецЕсли;
Разбор85 = "Категория: " + Строка(Категория)
+ Символы.ПС + "Краткая техническая строка: " + Краткое
+ Символы.ПС + "Подробная техническая строка: " + Подробное
+ Символы.ПС + "Представление для пользователя, plain readback: " + Строка(Представление)
+ Символы.ПС + "Рекомендованное сообщение, plain readback: " + Строка(Сообщение);
Итог85 = "Реальный отказ: запрошено4, доступно3. Категория/четыре представления проверены; запись и отправка отчета отсутствуют";
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСвоюОшибку85(Команда)
ПроверитьНаСервере85();
Если ТипЗнч(СвояОшибка85) <> Тип("ИнформацияОбОшибке") Тогда
ВызватьИсключение "Сначала РазобратьСвойОтказ85; чужую ошибку не показываем";
КонецЕсли;
ОбработкаОшибок.ПоказатьИнформациюОбОшибке(СвояОшибка85,
"В учебном остатке только3 книги;4 нельзя отпустить",
"Свой стенд: количество4, остаток3, цена250. Никаких документов не записано", Ложь);
КонецПроцедуры
&НаКлиенте
Функция РассчитатьСвоюКарточку85(Количество, Остаток, Цена)
Если ТипЗнч(Количество) <> Тип("Число") Или ТипЗнч(Остаток) <> Тип("Число")
Или ТипЗнч(Цена) <> Тип("Число") Тогда
ВызватьИсключение "Карточка принимает только числа";
КонецЕсли;
Если Количество <> Цел(Количество) Или Остаток <> Цел(Остаток)
Или Количество <= 0 Или Остаток < 0 Или Цена < 0 Тогда
ВызватьИсключение "Нужны целые количества и неотрицательная цена";
КонецЕсли;
Если Количество > Остаток Тогда
ВызватьИсключение "Учебная книга: запрос4 превышает свой остаток3; никаких записей нет";
КонецЕсли;
Возврат Количество * Цена;
КонецФункции
&НаСервере
Процедура ПроверитьНаСервере85()
ПроверитьСвойПустойСтенд();
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Серверный guard проверяет пустую собственную конфигурацию перед каждым опытом. РассчитатьСвоюКарточку85 не читает реальную номенклатуру и не записывает складские данные.
Положительный путь с3/3/250 возвращает750. Новая успешная команда удаляет старую ошибку из переменной формы, чтобы кнопка диалога не показала прежний отказ как текущий.
Для отрицательного пути передаем4/3/250 в ту же настоящую функцию. ВызватьИсключение действительно исполняет языковое исключение; внутри Исключение сохраняется штатный ИнформацияОбОшибке(), а не произвольная строка.
КатегорияОшибкиДляПользователя определяет пользовательскую категорию. Для явного ВызватьИсключение ожидается ИсключениеВызванноеИзВстроенногоЯзыка, а не ВсеОшибки и не техническая категория компиляции.
КраткоеПредставлениеОшибки и ПодробноеПредставлениеОшибки возвращают Строка. Предположение, что подробная строка всегда содержит дословно краткую, не требуется; проверяются native типы и непустота.
ПредставлениеОшибкиДляПользователя и СообщениеОбОшибкеДляПользователя возвращают ФорматированнаяСтрока. Преобразование Строка(...) в учебном разборе показывает plain текст, но не сохраняет кликабельное оформление.
Представление и рекомендованное сообщение имеют разные назначения; текущие штатные настройки могут дать одинаковый видимый текст. Код не требует искусственно разных строк и не подменяет параметры класса ошибки.
Отдельная команда передает исходную настоящую ошибку и явную понятную строку пользователю в первый documented overload ПоказатьИнформациюОбОшибке. Четвертый аргумент Ложь запрещает формирование отчета этим вызовом.
Текст пользовательского диалога объясняет исправление количества, подробный технический разбор остается в отдельном учебном поле. Это не метод обезличивания произвольных рабочих ошибок и не аудит всей политики отправки отчетов.
Как проверить результат
УспешныйРасчет85: результат750, Разбор85 пуст, диалог собственной ошибки запрещен до отрицательного опыта.
РазобратьСвойОтказ85: получен native ИнформацияОбОшибке, категория явного языкового исключения, две непустые Строка и две непустые ФорматированнаяСтрока.
ПоказатьСвоюОшибку85 после отказа: ожидается стандартное окно платформы с вашим понятным сообщением и дополнительной строкой. Никакой автоматической отправки или формирования отчета этим вызовом нет.
Закройте диалог, нажмите успешный расчет снова: прежняя ошибка удалена из переменной. Повторное показание без нового отказа должно быть отвергнуто.
В своей копии вызовите расчет с дробным количеством, отрицательной ценой или строкой вместо числа: отвергаются до умножения. Этот дополнительный тест не заменяет основной4>3.
Никаких реальных документов, складских движений, писем, файлов, отчетов или записей настроек этот полный модуль не делает.
Ожидаемый результат
Ожидаемый ручной результат:750 на корректной карточке; настоящий отказ4>3; категория и native типы представлений проверены; стандартный локальный диалог открывается только по отдельной кнопке. Runtime1С здесь не выполнялся.
На что обратить внимание
Подробный текст может включать технические пути, имена модулей и стек. Пользовательское представление не гарантирует удаления секретов из чужой ошибки. Для production нужна отдельная согласованная политика.
Четвертый аргумент Ложь относится к конкретному вызову диалога. Он не является общей настройкой запрета фоновых отчетов во всей системе и не доказывает сетевой режим ОС.
МенеджерОбработкиОшибок получен через readonly глобальное ОбработкаОшибок. Его нельзя создавать неизвестным конструктором или заменять присваиванием глобального свойства.
ПоказатьИнформациюОбОшибке клиентский; серверный вызов недопустим. Для web нельзя переносить весь код: два из использованных методов там отсутствуют.
ИнформацияОбОшибке берется внутри блока Исключение непосредственно после ожидаемого собственного отказа. Статические проверки не подтверждают внешний вид диалога или точный текст установленного интерфейса.
В уроке нет обработчика ОбработкаОтображенияОшибки с ТребуетсяЗавершениеСеансаИстина: не обещается, что произвольный критический диалог не перезапустит другой сеанс.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отправить учебный отчёт только в свой заранее настроенный сервис
Полный пример отправки проверяет собственную конфигурацию, совпадение адреса, режим вопроса пользователю и запрет чувствительных категорий. Успех вызова не выдаётся за приём отчёта сервисом.
Где и как запускать
Полный модуль собственной управляемой формы: клиентская команда и клиентская функция создания контролируемого отчёта. В последнем уроке есть также серверная проверка политики.
Подготовка
Используйте собственную пустую учебную базу УчебнаяКонфигурацияСинтаксиса и отдельного учебного пользователя. Создайте управляемую обработку с командой ВыполнитьПример. Полный код каждого урока вставляйте в отдельную копию модуля формы.
Запускайте в тонком клиенте Windows или поддерживаемом толстом клиенте. Здесь не пример мобильного сервера: методы записи/отправки отчёта по справке клиентские.
Создаётся только контролируемое исключение с учебным сообщением. Не провоцируйте аварийное завершение 1С и не подменяйте его реальной рабочей ошибкой, содержащей персональные данные.
Отчёт автоматически использует настройки пользователя. До опыта вручную настройте в собственной базе запрет включения имени пользователя, сведений базы, подробного текста, системной информации и снимков. Просматривайте интерактивный отчёт перед сохранением/отправкой; сам конструктор не является анонимизацией.
Это необязательное упражнение с реальной сетью. Выполняйте только если вы самостоятельно подготовили и проверили принадлежащий вам учебный сервис приёма отчётов платформы. Не используйте чужой URL, рабочую поддержку, случайный HTTP-обработчик или фиктивный домен.
В собственной форме создайте строковые реквизиты УчебныйАдресСервиса и ПодтверждениеОтправки с полями ввода; изначально оба пустые. Настройки адреса/политики выставьте вручную только своему учебному пользователю. Общие дополнительные сведения должны быть пустыми.
Для чтения общих настроек учебный пользователь должен иметь Администрирование данных. Код не меняет политику, не обходит отказ в доступе и не включает привилегированный режим.
Перед запуском введите адрес своего сервиса и точную фразу ОТПРАВИТЬ УЧЕБНЫЙ ОТЧЕТ В МОЙ СЕРВИС. В открывшейся форме просмотрите все категории, адресата и окончательно подтвердите либо отмените. Отдельно проверьте журнал собственного получателя.
&НаКлиенте
Процедура ВыполнитьПример(Команда)
Если ПодтверждениеОтправки <> "ОТПРАВИТЬ УЧЕБНЫЙ ОТЧЕТ В МОЙ СЕРВИС" Тогда
ВызватьИсключение "Нужно явное подтверждение учебной отправки";
КонецЕсли;
Если ПустаяСтрока(УчебныйАдресСервиса) Тогда
ВызватьИсключение "Укажите адрес своего заранее настроенного учебного сервиса";
КонецЕсли;
ПроверитьСвойУчебныйСервисНаСервере(УчебныйАдресСервиса);
Отчет = СоздатьСобственныйУчебныйОтчет();
Отчет.Описание = "Собственный учебный отчёт: книга guide-book, количество 3";
Отчет.ДополнительныеДанные = Новый Структура("Ключ,Количество", "guide-book", 3);
Если Отчет.ДополнительныеФайлы.Количество() <> 0 Тогда
ВызватьИсключение "Есть неожиданные вложения; отправка запрещена";
КонецЕсли;
ПодтверждениеОтправки = "";
Отчет.Отправить(Истина);
Сообщить("Метод вернул управление. Это не подтверждение согласия, сетевой доставки или принятия отчёта сервисом");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСвойУчебныйСервисНаСервере(ОжидаемыйАдрес)
Настройки = ОбработкаОшибок.ПолучитьНастройкиПользователя();
Общие = ОбработкаОшибок.ПолучитьОбщиеНастройки();
Если Настройки.АдресСервисаОбработкиОшибок <> ОжидаемыйАдрес Тогда
ВызватьИсключение "Адрес текущего пользователя не совпал с вашим учебным сервисом; наследование здесь запрещено";
КонецЕсли;
Если Настройки.ОтправлятьОтчетНаКлиенте <> РежимОтправкиИнформацииОбОшибке.СпрашиватьПользователя Тогда
ВызватьИсключение "Для упражнения требуется режим СпрашиватьПользователя";
КонецЕсли;
Запрет = РежимОтправкиИнформацииОбОшибке.НеОтправлять;
Если Настройки.ВключатьИмяПользователяВОтчетНаКлиенте <> Запрет
Или Настройки.ВключатьПодробныйТекстОшибкиВОтчетНаКлиенте <> Запрет
Или Настройки.ВключатьСведенияОбИнформационнойБазеВОтчетНаКлиенте <> Запрет
Или Настройки.ВключатьИнформациюОСистемеВОтчетНаКлиенте <> Запрет
Или Настройки.ВключатьСнимокОконВОтчетНаКлиенте <> Запрет Тогда
ВызватьИсключение "Чувствительные категории не запрещены явно; отправка запрещена";
КонецЕсли;
Если Не ПустаяСтрока(Настройки.ДополнительнаяИнформацияОтчета)
Или Не ПустаяСтрока(Общие.ДополнительнаяИнформацияОтчета) Тогда
ВызватьИсключение "Дополнительная информация пользователя/общих настроек не пуста";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция СоздатьСобственныйУчебныйОтчет()
Попытка
ВызватьИсключение "Учебная ошибка проверки книги guide-book";
Исключение
Информация = ИнформацияОбОшибке();
Возврат Новый ОтчетОбОшибке(Информация);
КонецПопытки;
КонецФункцииРазбор по шагам
Клиентская команда требует непустой адрес и собственное явно введённое подтверждение. Пустое значение по умолчанию не инициирует отправку.
Серверная процедура проверяет имя своей конфигурации, точный пользовательский адрес без наследования и режим СпрашиватьПользователя. Она только читает текущие настройки.
Пять чувствительных категорий должны быть явно НеОтправлять. Авто не принимается за анонимизацию. Дополнительная строка пользователя и общих настроек обязана быть пустой.
Конструктор получает нашу контролируемую ошибку, а не реальный аварийный дамп. Проверка пустых вложений предшествует Отправить.
Отправить(Истина) открывает интерактивную форму. Метод не возвращает доказательство доставки; запрет/отсутствие адресата могут означать отсутствие действий, а отмена пользователя — отсутствие отправки.
Фраза сбрасывается перед вызовом, чтобы повторный запуск требовал нового намеренного подтверждения. Проверка настроек не защищает от их конкурентного изменения и не является полноценной системой безопасности.
Как проверить результат
При пустом адресе, неверной фразе, неподходящей политике или чужой конфигурации отправка не вызывается.
На собственном настроенном сервисе подтвердите учебный отчёт и проверьте факт приёма по его журналу. Отмена окна не должна выдаваться за доставку.
В тесте не используются рабочие сведения, снимки, вложения или токены. Сам код в данном руководстве в 1С и по сети не проверялся.
Ожидаемый результат
Подготовлен полный добровольный пример отправки с проверками и отдельным подтверждением реальной доставки.
На что обратить внимание
Реальная отправка — внешнее действие. Без своего проверенного сервиса пропустите запуск этого упражнения, сохранив пример для изучения.
Проверка имени конфигурации не доказывает владение адресатом; это обеспечивается вашей подготовкой и контролем собственного сервиса.
Не публикуйте JSON или содержимое отчёта только потому, что учебные поля безопасны: автоматические поля требуют отдельного просмотра.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.