Попытка //Некоторые действия Исключение //Действия при ошибке КонецПопытки;
Показ сообщения об ошибке
Для вывода сообщения об ошибке нужно использовать функцию ОписаниеОшибки();
Пример:
Попытка НаборЗаписей.Записать(Истина); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
Для выдачи структуированной информации об ошибке в версии 8.2 служит функция ИнформацияОбОшибке().
Инфо = ИнформацияОбОшибке(); Сообщить("Описание='" + Инфо.Описание + "'"); Сообщить("ИмяМодуля='" + Инфо.ИмяМодуля + "'"); Сообщить("НомерСтроки=" + Инфо.НомерСтроки); Сообщить("ИсходнаяСтрока='" + Инфо.ИсходнаяСтрока + "'");
Вызов исключения
В 1С:Предприятие 7.7 оператор ВызватьИсключение; служит для повторного вызова исключения из блока Исключение-КонецПопытки. Для вызова из других частей программы можно использовать внешнюю компоненту или деление на 0, например а=1/0.
В 1С:Предприятие версии 8 есть оператор ВызватьИсключение:
ВызватьИсключение "Текст сообщения об ошибке";
ОписаниеОшибки (ErrorDescription)
1C v 8.2 |
---|
Синтаксис:
ОписаниеОшибки()
Возвращаемое значение:
Возвращает описание ошибки, такое же, какое было бы выдано в окне сообщений в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла.
Описание:
Получает описание ошибки.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Примечание:
Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.
Пример:
Код 1C v 8.2 УП
Попытка
НаборЗаписей.Записать(Истина);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
1C v 8.0 — 8.1 |
---|
ОписаниеОшибки()
Возвращаемое значение:
Возвращает описание ошибки, такое же, какое было бы выдано в окне сообщений в случае отсутствия обработчика исключительной ситуации, за исключением описания модуля и строки, в которой ошибка возникла.
Описание:
Получает описание ошибки.
Примечание:
Применять данную функцию имеет смысл только внутри операторных скобок Исключение — КонецПопытки, так как в ином случае она вернет пустую строку. Помогает в выдаче диагностики при возникновении ошибок.
Пример:
Код 1C v 8.х
Попытка
НаборЗаписей.Записать(Истина);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
1C v 7.x |
---|
ОписаниеОшибки()
Назначение:
Применять данную функцию имеет смысл только в конструкции <Попытка — Исключение — КонецПопытки>, так как в иных случаях она возвращает пустую строку.
См. также:Попытка Исключение; ВызватьИсключение.
Возвращает описание ошибки времени выполнения модуля, такое же, как то, которое выдается в окне сообщений.
Параметры: нет
Разместил: E_Migachev Дата: 30.11.2009 Прочитано: 10870 |
Отображение ошибок
Механизм отображения ошибок предназначен для улучшения обратной связи пользователей с разработчиками, ускорения реакции на ошибки и улучшения поддержки. Разным целевым группам он предоставляет следующие возможности:
-
Конечные пользователи: если происходит ошибка, пользователь получает либо подсказку для исправления ошибки (если пользователь может ее исправить сам) либо получает удобный способ сообщить об ошибке специалистам (в техподдержку и т. п.).
-
Прикладные разработчики: имеют возможность обрабатывать все ошибки, возникающие в приложении, менять текст и форму отображения ошибки и показывать пользователям полезную для них информацию.
-
ИТ-отделы компаний клиентов, а также компании, осуществляющие внедрения продуктов 1С: имеют возможность быстрого получения информации об ошибках и возможность проинформировать пользователя о том, куда обращаться для решения проблемы.
Сообщение об ошибке
Сообщение об ошибке содержит иконку, соответствующую категории ошибки, текст, а также может содержать ссылку для формирования отчета об ошибке.
Декларативная настройка текста сообщения об ошибке
Специалисты по внедрению и администраторы информационных баз имеют возможность настраивать сообщения об ошибках без использования программирования. В частности, они могут добавлять в сообщения об ошибках информацию, специфическую для конкретного внедрения или для текущего этапа работы (телефоны, фамилии сотрудников и т. д.).
Отчет об ошибке
Сообщение об ошибке может содержать ссылку для автоматического формирования отчета об ошибке. Доступно как интерактивное, так и программное формирование отчета. Программно можно добавлять в отчет свои вложения и объекты. Отчет об ошибке можно сохранить на диск или отправить в сервис регистрации ошибок.
Сервис регистрации ошибок
Сервис регистрации ошибок — внешний по отношению к платформе компонент, представляющий собой набор НТТР-сервисов с определенными интерфейсами. Он может быть реализован с помощью любой подходящей технологии. Например, это может быть информационная база «1С:Предприятия» с набором HTTP-сервисов.
Если вы используете в своем программном коде конструкцию Попытка … Исключение, но при возникновении какой либо ошибки хотели бы видеть ее описание, то вам необходимо использовать встроенную функцию ОписаниеОшибки().
Пример:
Попытка
//Ваш код
Исключение
Сообщить("Произошла ошибка: " + ОписаниеОшибки());
КонецПопытки;
Таким образом при возникновении исключения, вам в сообщении будут выводится пояснения к нему.
Вконтакте
Google+
LiveJournal
Одноклассники
Мой мир
Конструкция Попытка-Исключение-КонецПопытки
Если в модуле на встроенном языке 1С будет ошибка времени выполнения, например деление на 0, то выполнение модуля будет прервано и на экран будет выведено сообщение об ошибке:
&НаКлиенте Процедура Исключение(Команда) а = 5/0; КонецПроцедуры
Ошибки времени выполнения (run time) — это ошибки во время выполнения модуля. Еще есть ошибки времени компиляции (compile time) — это ошибки во время компиляции модуля.
Для обработки ошибок времени выполнения можно использовать исключения:
&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0; Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры
Если в коде после ключевого слова Попытка будет ошибка времени выполнения, то выполнение программы перейдет на первую строку после ключевого слова Исключение. Если ошибок не будет, то код после ключевого слова Исключение даже не будет выполнен.
Конструкцию Попытка-Исключение-КонецПопытки нельзя использовать для обработки ошибок времени компиляции. Такой модуль все равно не будет скомпилирован:
&НаКлиенте Процедура Исключение(Команда) Попытка а = 5/0;+ //здесь ошибка Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры
Вызовы процедур и функций внутри попытки тоже будут обработаны:
&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() а = 5/0; КонецПроцедуры
В 1С используется единый механизм для обработки всех исключений, как исключений платформы, так и исключений конфигураций. То есть при возникновении ошибки времени выполнения платформа начинает искать ближайший оператор Исключение, относящийся к данному блоку кода. Если ошибка произошла на строке, который не был обернут в конструкцию Попытка-Исключение, но после этой строки есть такая конструкция — ошибка не будет обработана этой конструкцией. Если такой оператор найден, то ошибка будет обработана им. Если не найден, то ошибка обрабатывается платформой, выполнение модуля останавливается.
Оператор ВызватьИсключение
Попытки могут быть вложенными:
&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение Сообщить("Ошибка в процедуре"); КонецПопытки; КонецПроцедуры
Если выполнить данный код, то выйдет сообщение «Ошибка в процедуре», то есть код из первого исключения даже не будет выполнен. Чтобы выполнялся код из вышестоящего исключения нужно использовать оператор ВызватьИсключение:
&НаКлиенте Процедура Исключение(Команда) Попытка ПоделитьНаНоль(); Исключение Сообщить("Нельзя делить на 0"); КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ПоделитьНаНоль() Попытка а = 5/0; Исключение ВызватьИсключение; КонецПопытки; КонецПроцедуры
В этом случае исключение будет проброшено вверх по стеку и обработано первым блоком Попытка-Исключение.
Можно вызывать исключение из кода оператором ВызватьИсключение. Выполнение кода будет прервано, на экране будет сообщение с текстом исключения:
&НаКлиенте Процедура Исключение(Команда) ВызватьИсключение "Исключение вызванное из кода"; КонецПроцедуры
Информация об ошибке
В 1С нельзя использовать несколько блоков Исключений для разных типов ошибки. Какая бы ошибка не произошла всегда будет вызываться код после оператора Исключение. Для получения описания ошибки можно использовать метод ОписаниеОшибки():
&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры
Пример с другим типом ошибки:
&НаКлиенте Процедура Исключение(Команда) Попытка а = ПредопределенноеЗначение("Справочник.Склады.ОсновнойСклад"); //при этом такого предопределенного элемента нет Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры
Но правильней использовать метод ИнформацияОбОшибке(), который вернет объект типа ИнформацияОбОшибке:
&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод КраткоеПредставлениеОшибки() //для вывода сообщения на экран Сообщить(КраткоеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры
Метод КраткоеПредставлениеОшибки() выведет более понятное для обычного пользователя сообщение: «Деление на 0» вместо «{Обработка.Обработка1.Форма.Форма.Форма(5)
Для более полного описания ошибки можно использовать метод ПодробноеПредставлениеОшибки():
&НаКлиенте Процедура Исключение(Команда) Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //объект типа ИнформацияОбОшибке передаем //в метод ПодробноеПредставлениеОшибки() //для вывода подробного сообщения на экран Сообщить(ПодробноеПредставлениеОшибки(Инф)); КонецПопытки; КонецПроцедуры
Но правильней пользователю сообщать кратное представление, а в журнал регистрации записывать подробное представление ошибки:
&НаКлиенте Процедура Исключение(Команда) //ЗаписьЖурналаРегистрации доступно только на сервере Команда1НаСервере(); КонецПроцедуры &НаСервере Процедура Команда1НаСервере() Попытка а = 4/0; Исключение Инф = ИнформацияОбОшибке(); //сообщим пользователю Сообщить(КраткоеПредставлениеОшибки(Инф)); //и запишем в журнал регистрации ПодробнаяОшибка = ПодробноеПредставлениеОшибки(Инф); ЗаписьЖурналаРегистрации("Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ПодробнаяОшибка); КонецПопытки; КонецПроцедуры
Приведение к нужному типу
При загрузке числовых данных из файла (например из текстового документа) в 1С часто применяется такой прием для получения числа из строки:
&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; Попытка //пробуем перевести ее в число ЧислоЧислом = Число(ЧислоСтрокой); Исключение //если не получилось ЧислоЧислом = 0; КонецПопытки; //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры
С точки зрения производительности это не совсем корректно. Правильно использовать объект ОписаниеТипов:
&НаКлиенте Процедура Исключение(Команда) //это строка с числом, допустим она была получена из файла ЧислоСтрокой = "123.45"; //создаем объект типа ОписаниеТипов с типом Число ОписаниеТипа = Новый ОписаниеТипов("Число"); //приводим строку к числу, если не получится вернет значение по умолчанию //для числа это 0 ЧислоЧислом = ОписаниеТипа.ПривестиЗначение(ЧислоСтрокой); //дальше работаем как с числом ЧислоЧислом = ЧислоЧислом + 1; Сообщить(ЧислоЧислом); КонецПроцедуры
Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки