рубрики: Язык программирования 1С | Дата: 2 марта, 2017
Как известно ничего идеального в этом мире нет, в том числе и программ. И 1С в этом плане не исключение. И бывает так, что выполнение кода завершается ошибкой. В этом случае пользователю выдается системное сообщение об ошибке из которого как правило мало что можно понять.
К тому же часто необходимо, чтобы несмотря на возникновение ошибки программа продолжила свою работу. Например, когда мы загружаем в базу 1С большой объем данных (элементы справочников, документы и т.д.) совершенно недопустимо, чтобы в случае сбоя во время загрузки одного элемента у нас остановилась вся дальнейшая загрузка. Так вот для обработки таких исключительных ситуаций предназначена конструкция языка 1С Попытка Исключение. Синтаксис ее следующий:
Попытка
//Выполняемый код
Исключение
//Обработка исключительной ситуации:
//- Сообщение пользователю;
//- Запись лога в файл;
//- Отправка сообщения по электронной почте;
//- Фиксация ошибки путем присвоения переменной соответствующего значения
КонецПопытки;
Рассмотрим все вышесказанное на элементарном примере. Для начала искусственно создадим ситуацию с ошибкой. Сделаем это очень просто — путем деления на ноль.
&НаКлиенте
Процедура ВыполнитьДеление(Команда)
Частное = 1 / 0;
КонецПроцедуры
При выполнении этого кода выводится вот такое системное сообщение об ошибке:
А теперь доработаем нашу процедуру с использованием Попытки
&НаКлиенте
Процедура ВыполнитьДеление(Команда)
Попытка
Частное = 1 / 0;
Исключение
Сообщить("Произошла ошибка при попытке деления");
КонецПопытки;
КонецПроцедуры
Снова запустим на выполнение нашу процедуру. В этот раз системное сообщение об ошибке показано не будет, а будет выведено наше собственное сообщение, которое мы прописали в исключении. В исключении можно получить дополнительную информацию об ошибке с помощью метода ОписаниеОшибки(). Вот таким образом
Сообщить("Произошла ошибка при попытке деления" + ОписаниеОшибки());
В этом случае в момент выполнения деления в окне сообщений появится следующий текст
Произошла ошибка при попытке деления{ВнешняяОбработка.ПопыткаИсключение.Форма.Форма.Форма(34)}: Деление на 0
Попытки могут быть вложенными одна в другую. То есть вполне допустимым является следующая конструкция
Попытка
//Код
Попытка
//Код
Исключение
//Обработка исключения
КонецПопытки;
Попытка
//Код
Исключение
//Обработка исключения
КонецПопытки;
Исключение
//Обработка исключения
КонецПопытки;
Это может потребоваться в случае объемного кода, когда мы хотим локализовать место возникновения ошибки.
Конечно не стоит злоупотреблять использованием конструкции Попытка Исключение. По сути ее использование целесообразно в следующих случаях
Кроме функции ОписаниеОшибки() теперь доступна аналогичная по назначению, но более «продвинутая» ИнформацияОбОшибке().
Да, все верно. Спасибо.