Глобальный контекст.ОбработкаОшибок

Свойства · ErrorProcessing

Тип: МенеджерОбработкиОшибок. Используется для настройки обработки ошибок.

Полное описание, параметры и ограничения

Глобальный контекст.ОбработкаОшибок (Global context.ErrorProcessing)

Глобальный контекст (Global context)

ОбработкаОшибок (ErrorProcessing)

Доступен, начиная с версии 8.3.17.

Использование:
Только чтение.
Описание:
Тип: МенеджерОбработкиОшибок.
Используется для настройки обработки ошибок.
Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

См. также:
МенеджерОбработкиОшибок

Использование в версии:

Доступен, начиная с версии 8.3.17.

Методическая информация

Практические примеры

Настоящий отказ учебной карточке: категория, технический разбор и пользовательский диалог

Полная собственная форма считает3×250=750, реально перехватывает отказ количеству4 при остатке3, сравнивает типы четырех представлений и по отдельной кнопке показывает стандартный диалог без формирования отчета.

Где и как запускать

Полный модуль ОбщаяФорма.СтендОшибки85 собственной новой пустой конфигурации; desktop managed client и server guard, runtime0.

Подготовка

  1. Создайте новую пустую файловую базу платформы8.5.1.1343 с конфигурацией УчебныеПредставленияОшибок85, русский язык, управляемое приложение. Предметных объектов, регистров, подписок, заданий и расширений нет; рабочие УТ/УНФ/КА/БП не подходят.

  2. В Общие → Общие формы создайте управляемую форму СтендОшибки85. Два реквизита: Итог85 Строка неограниченной длины, Разбор85 Строка неограниченной длины. Выведите оба многострочными полями только для просмотра.

  3. Создайте команды УспешныйРасчет85, РазобратьСвойОтказ85, ПоказатьСвоюОшибку85, назначьте одноименные процедуры и добавьте кнопки. ПриСозданииНаСервере свяжите с одноименным обработчиком. Вставьте весь код на уровне модуля формы.

  4. Откройте ОбщаяФорма.СтендОшибки85 своей учебной командой в настольном тонком или толстом управляемом клиенте. Веб-клиент не подходит всему уроку: ПодробноеПредставлениеОшибки и ПредставлениеОшибкиДляПользователя native не доступны web.

  5. Никаких собственных настроек обработки/шаблонов/отправки отчетов не устанавливайте. Используются штатные настройки своей новой базы. Не добавляйте SMTP/URL/службу приема отчета или глобальный обработчик отображения ошибок.

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

  7. В этом уроке только вымышленные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 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. Серверный guard проверяет пустую собственную конфигурацию перед каждым опытом. РассчитатьСвоюКарточку85 не читает реальную номенклатуру и не записывает складские данные.

  2. Положительный путь с3/3/250 возвращает750. Новая успешная команда удаляет старую ошибку из переменной формы, чтобы кнопка диалога не показала прежний отказ как текущий.

  3. Для отрицательного пути передаем4/3/250 в ту же настоящую функцию. ВызватьИсключение действительно исполняет языковое исключение; внутри Исключение сохраняется штатный ИнформацияОбОшибке(), а не произвольная строка.

  4. КатегорияОшибкиДляПользователя определяет пользовательскую категорию. Для явного ВызватьИсключение ожидается ИсключениеВызванноеИзВстроенногоЯзыка, а не ВсеОшибки и не техническая категория компиляции.

  5. КраткоеПредставлениеОшибки и ПодробноеПредставлениеОшибки возвращают Строка. Предположение, что подробная строка всегда содержит дословно краткую, не требуется; проверяются native типы и непустота.

  6. ПредставлениеОшибкиДляПользователя и СообщениеОбОшибкеДляПользователя возвращают ФорматированнаяСтрока. Преобразование Строка(...) в учебном разборе показывает plain текст, но не сохраняет кликабельное оформление.

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

  8. Отдельная команда передает исходную настоящую ошибку и явную понятную строку пользователю в первый documented overload ПоказатьИнформациюОбОшибке. Четвертый аргумент Ложь запрещает формирование отчета этим вызовом.

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

Как проверить результат

  1. УспешныйРасчет85: результат750, Разбор85 пуст, диалог собственной ошибки запрещен до отрицательного опыта.

  2. РазобратьСвойОтказ85: получен native ИнформацияОбОшибке, категория явного языкового исключения, две непустые Строка и две непустые ФорматированнаяСтрока.

  3. ПоказатьСвоюОшибку85 после отказа: ожидается стандартное окно платформы с вашим понятным сообщением и дополнительной строкой. Никакой автоматической отправки или формирования отчета этим вызовом нет.

  4. Закройте диалог, нажмите успешный расчет снова: прежняя ошибка удалена из переменной. Повторное показание без нового отказа должно быть отвергнуто.

  5. В своей копии вызовите расчет с дробным количеством, отрицательной ценой или строкой вместо числа: отвергаются до умножения. Этот дополнительный тест не заменяет основной4>3.

  6. Никаких реальных документов, складских движений, писем, файлов, отчетов или записей настроек этот полный модуль не делает.

Ожидаемый результат

Ожидаемый ручной результат:750 на корректной карточке; настоящий отказ4>3; категория и native типы представлений проверены; стандартный локальный диалог открывается только по отдельной кнопке. Runtime1С здесь не выполнялся.

На что обратить внимание

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

  2. Четвертый аргумент Ложь относится к конкретному вызову диалога. Он не является общей настройкой запрета фоновых отчетов во всей системе и не доказывает сетевой режим ОС.

  3. МенеджерОбработкиОшибок получен через readonly глобальное ОбработкаОшибок. Его нельзя создавать неизвестным конструктором или заменять присваиванием глобального свойства.

  4. ПоказатьИнформациюОбОшибке клиентский; серверный вызов недопустим. Для web нельзя переносить весь код: два из использованных методов там отсутствуют.

  5. ИнформацияОбОшибке берется внутри блока Исключение непосредственно после ожидаемого собственного отказа. Статические проверки не подтверждают внешний вид диалога или точный текст установленного интерфейса.

  6. В уроке нет обработчика ОбработкаОтображенияОшибки с ТребуетсяЗавершениеСеансаИстина: не обещается, что произвольный критический диалог не перезапустит другой сеанс.

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

Отправить учебный отчёт только в свой заранее настроенный сервис

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

Где и как запускать

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

Подготовка

  1. Используйте собственную пустую учебную базу УчебнаяКонфигурацияСинтаксиса и отдельного учебного пользователя. Создайте управляемую обработку с командой ВыполнитьПример. Полный код каждого урока вставляйте в отдельную копию модуля формы.

  2. Запускайте в тонком клиенте Windows или поддерживаемом толстом клиенте. Здесь не пример мобильного сервера: методы записи/отправки отчёта по справке клиентские.

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

  4. Отчёт автоматически использует настройки пользователя. До опыта вручную настройте в собственной базе запрет включения имени пользователя, сведений базы, подробного текста, системной информации и снимков. Просматривайте интерактивный отчёт перед сохранением/отправкой; сам конструктор не является анонимизацией.

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

  6. В собственной форме создайте строковые реквизиты УчебныйАдресСервиса и ПодтверждениеОтправки с полями ввода; изначально оба пустые. Настройки адреса/политики выставьте вручную только своему учебному пользователю. Общие дополнительные сведения должны быть пустыми.

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

  8. Перед запуском введите адрес своего сервиса и точную фразу ОТПРАВИТЬ УЧЕБНЫЙ ОТЧЕТ В МОЙ СЕРВИС. В открывшейся форме просмотрите все категории, адресата и окончательно подтвердите либо отмените. Отдельно проверьте журнал собственного получателя.

&НаКлиенте
Процедура ВыполнитьПример(Команда)
    Если ПодтверждениеОтправки <> "ОТПРАВИТЬ УЧЕБНЫЙ ОТЧЕТ В МОЙ СЕРВИС" Тогда
        ВызватьИсключение "Нужно явное подтверждение учебной отправки";
    КонецЕсли;
    Если ПустаяСтрока(УчебныйАдресСервиса) Тогда
        ВызватьИсключение "Укажите адрес своего заранее настроенного учебного сервиса";
    КонецЕсли;
    ПроверитьСвойУчебныйСервисНаСервере(УчебныйАдресСервиса);
    Отчет = СоздатьСобственныйУчебныйОтчет();
    Отчет.Описание = "Собственный учебный отчёт: книга guide-book, количество 3";
    Отчет.ДополнительныеДанные = Новый Структура("Ключ,Количество", "guide-book", 3);
    Если Отчет.ДополнительныеФайлы.Количество() <> 0 Тогда
        ВызватьИсключение "Есть неожиданные вложения; отправка запрещена";
    КонецЕсли;
    ПодтверждениеОтправки = "";
    Отчет.Отправить(Истина);
    Сообщить("Метод вернул управление. Это не подтверждение согласия, сетевой доставки или принятия отчёта сервисом");
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьСвойУчебныйСервисНаСервере(ОжидаемыйАдрес)
    Настройки = ОбработкаОшибок.ПолучитьНастройкиПользователя();
    Общие = ОбработкаОшибок.ПолучитьОбщиеНастройки();
    Если Настройки.АдресСервисаОбработкиОшибок <> ОжидаемыйАдрес Тогда
        ВызватьИсключение "Адрес текущего пользователя не совпал с вашим учебным сервисом; наследование здесь запрещено";
    КонецЕсли;
    Если Настройки.ОтправлятьОтчетНаКлиенте <> РежимОтправкиИнформацииОбОшибке.СпрашиватьПользователя Тогда
        ВызватьИсключение "Для упражнения требуется режим СпрашиватьПользователя";
    КонецЕсли;
    Запрет = РежимОтправкиИнформацииОбОшибке.НеОтправлять;
    Если Настройки.ВключатьИмяПользователяВОтчетНаКлиенте <> Запрет
        Или Настройки.ВключатьПодробныйТекстОшибкиВОтчетНаКлиенте <> Запрет
        Или Настройки.ВключатьСведенияОбИнформационнойБазеВОтчетНаКлиенте <> Запрет
        Или Настройки.ВключатьИнформациюОСистемеВОтчетНаКлиенте <> Запрет
        Или Настройки.ВключатьСнимокОконВОтчетНаКлиенте <> Запрет Тогда
        ВызватьИсключение "Чувствительные категории не запрещены явно; отправка запрещена";
    КонецЕсли;
    Если Не ПустаяСтрока(Настройки.ДополнительнаяИнформацияОтчета)
        Или Не ПустаяСтрока(Общие.ДополнительнаяИнформацияОтчета) Тогда
        ВызватьИсключение "Дополнительная информация пользователя/общих настроек не пуста";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция СоздатьСобственныйУчебныйОтчет()
    Попытка
        ВызватьИсключение "Учебная ошибка проверки книги guide-book";
    Исключение
        Информация = ИнформацияОбОшибке();
        Возврат Новый ОтчетОбОшибке(Информация);
    КонецПопытки;
КонецФункции

Разбор по шагам

  1. Клиентская команда требует непустой адрес и собственное явно введённое подтверждение. Пустое значение по умолчанию не инициирует отправку.

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

  3. Пять чувствительных категорий должны быть явно НеОтправлять. Авто не принимается за анонимизацию. Дополнительная строка пользователя и общих настроек обязана быть пустой.

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

  5. Отправить(Истина) открывает интерактивную форму. Метод не возвращает доказательство доставки; запрет/отсутствие адресата могут означать отсутствие действий, а отмена пользователя — отсутствие отправки.

  6. Фраза сбрасывается перед вызовом, чтобы повторный запуск требовал нового намеренного подтверждения. Проверка настроек не защищает от их конкурентного изменения и не является полноценной системой безопасности.

Как проверить результат

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

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

  3. В тесте не используются рабочие сведения, снимки, вложения или токены. Сам код в данном руководстве в 1С и по сети не проверялся.

Ожидаемый результат

Подготовлен полный добровольный пример отправки с проверками и отдельным подтверждением реальной доставки.

На что обратить внимание

  1. Реальная отправка — внешнее действие. Без своего проверенного сервиса пропустите запуск этого упражнения, сохранив пример для изучения.

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

  3. Не публикуйте JSON или содержимое отчёта только потому, что учебные поля безопасны: автоматические поля требуют отдельного просмотра.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.