В языке «1С:Предприятия» для обработки исключений использовалась конструкция Попытка – Исключение – КонецПопытки. Сама обработка ошибок времени выполнения выполнялась в блоке операторов Исключение – КонецПопытки. При этом не предусматривалась возможность обработки собственных исключений. Например:
Процедура МояПроцедура()
Попытка
Файл = новый ЧтениеТекста("C:\test\test.txt");
ТекстФайла = Файл.Прочитать();
Исключение
ОбработатьИсключение(ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
Процедура ОбработатьИсключение(Инфо)
//...
КонецПроцедуры
Теперь в языке «Элемента» для обработки исключений предназначена специальная конструкция попытка – поймать. Здесь вместо ключевого слова Исключение используется поймать. При этом можно поймать и обработать отдельно все описанные вами ранее типы исключений, а также обработать все остальные типы исключений, для которых не нашлось обработчика (т. к. все собственные типы исключений являются наследниками базового типа Исключение).
Кроме этого конструкция имеет дополнительный блок вконце. В этом блоке можно поместить код, который должен выполнить какие-то действия вне зависимости от того, удачно или неудачно завершился блок попытка. Блок вконце выполняется даже в том случае, если в блоках попытка и поймать используются инструкции возврат, прервать или продолжить.
Например, если ранее вы определили собственные типы исключений: ИсключениеНеверныйФорматФайла, ТипИсключения1, ТипИсключения2, то обработка ошибочных ситуаций может выглядеть следующим образом:
@Сервер
исключение ИсключениеНеверныйФорматФайла
пер ИмяФайла: Строка
;
@Сервер
исключение ТипИсключения1
пер ИмяФайла: Строка
;
@Сервер
исключение ТипИсключения2
пер ИмяФайла: Строка
;
@Сервер
метод МойМетод()
попытка
// безопасный код
пер Файл = новый Файл("C:\\test\\test.txt")
исп Поток = Файл.ОткрытьПотокЧтения()
пер ТекстФайла = Поток.ПрочитатьКакСтроку()
поймать Искл1: ИсключениеНеверныйФорматФайла
// обработка исключения типа ИсключениеНеверныйФорматФайла
ОбработатьИсключение(Искл1)
поймать Искл2: ТипИсключения1| ТипИсключения2
// обработка исключений с типом ТипИсключения1 или ТипИсключения2
поймать Искл3: Исключение
// обработка других исключений
вконце
// завершающая секция
;
;
@Сервер
метод ОбработатьИсключение(Искл: ИсключениеНеверныйФорматФайла)
//...
;
В результате работы данной конструкции если в тексте модуля, отмеченного комментарием «// безопасный код», произойдет ошибка, приводящая к выбрасыванию исключения, то будет определен тип исключения. Для него будет подобран подходящий обработчик исключений (тот, в котором тип исключения обработчика совпадает с типом обрабатываемого исключения), расположенный после конструкции поймать ИмяПеременной: ТипИсключения.
В обработчик для типа Исключение управление будет передаваться для всех исключений, которые не были перехвачены ранее. Это произойдет потому, что тип Исключение является базовым типом для любого исключения.
Надо заметить, что, поскольку работа с файлами возможна только на сервере, приведенный выше пример должен выполняться в серверной процедуре с аннотацией @Сервер. И, соответственно, типы ваших исключений должны быть описаны с такой же аннотацией. Например:
@Сервер
исключение ИсключениеНеверныйФорматФайла
пер ИмяФайла: Строка
;