Оператор программной обработки исключительных ситуаций
Синтаксис
Оператор Попытка
имеет следующий синтаксис:
Попытка //потенциально ошибочные операторы Исключение //операторы обработки исключительной ситуации [ВызватьИсключение;] КонецПопытки;
А также альтернативный англоязычный синтаксис:
Try //unstable compute Except //catch operators [Raise;] EndTry;
Описание
Оператор Попытка
контролирует выполнение операторов программы, отслеживая возможные ошибочные (исключительные) ситуации и выполняя их обработку.
Оператор начинается с ключевого слова Попытка
и заканчивается ключевым словом КонецПопытки
, после которого обязательно следует разделитель операторов ; (точка с запятой) (см. подробнее главу «Знакомство с программными модулями»). После ключевого слова Попытка
и до ключевого слова Исключение
размещается блок потенциально ошибочных операторов, для которых наиболее вероятна ошибка времени выполнения. После ключевого слова Исключение
и до ключевого слова КонецПопытки
располагаются операторы обработки исключительной ситуации.
Если в процессе выполнения любого оператора из блока потенциально ошибочных операторов (включая вызовы процедур и функций любого уровня вложенности) возникнет исключительная ситуация, выполнение этого оператора немедленно прекращается, а управление передается первому оператору, расположенному за ключевым словом Исключение
. Если же блок потенциально ошибочных операторов отработал без ошибок, операторы обработки исключительной ситуации пропускаются, а управление передается первому оператору после ключевого слова КонецПопытки
.
Конструкции Попытка ... КонецПопытки
могут быть вложенными. При этом, если возникнет исключительная ситуация, ее обработка выполняется ближайшим блоком операторов Исключение ... КонецПопытки
. Чтобы передать управление операторам обработки исключений на уровень выше, существует специальный оператор ВызватьИсключение. Если операторы обработки исключений более верхнего уровня будут найдены, управление передается им. В противном случае, выполнение программы прекращается с выдачей первоначальной ошибки.
Для доступа к описанию ошибки, приведшей к исключительной ситуации, во встроенном языке есть специальная функция ОписаниеОшибки(). Ее, как и оператор ВызватьИсключение
, следует использовать только внутри блока операторов обработки исключения Исключение ... КонецПопытки
Следует отметить, что пользовательские исключения не поддерживаются.
Пример использования
Пример кода с использованием оператора Попытка
//в документ добавлен новый реквизит табличной части <Цена> //теперь необходимо заполнить цены во всех документах ДокументыМенеджер = СоздатьОбъект("Документ.РеализацияТМЦ"); ДокументыМенеджер.ВыбратьДокументы(ДатаНачала, ДатаОкончания); Пока ДокументыМенеджер.ПолучитьДокумент() = 1 Цикл Попытка ДокументОбъект = СоздатьОбъект("Документ.РеализацияТМЦ"); ДокументОбъект.НайтиДокумент(ДокументыМенеджер.ТекущийДокумент()); //ошибка в обработке одного документа не должна приводить к прекращению всей обработки ДокументОбъект.ВыбратьСтроки(); Пока ДокументОбъект.ПолучитьСтроку() = 1 Цикл ДокументОбъект.Цена = ДокументОбъект.Сумма / ДокументОбъект.Количество; КонецЦикла; ДокументОбъект.Записать(); Исключение //информация обо всех ошибках выводится в окно сообщений Сообщить("" + ДокументОбъект + ": " + ОписаниеОшибки(), "!!!"); КонецПопытки; КонецЦикла;