Профессия — 1С

Рукопашный бой Карташ

Категории

Обработка исключительных ситуаций

рубрики: Язык программирования 1С | Дата: 2 Март, 2017

Как известно ничего идеального в этом мире нет, в том числе и программ. И 1С в этом плане не исключение. И бывает так, что выполнение кода завершается ошибкой. В этом случае пользователю выдается системное сообщение об ошибке из которого как правило мало что можно понять.




К тому же часто необходимо, чтобы несмотря на возникновение ошибки программа продолжила свою работу. Например, когда мы загружаем в базу 1С большой объем данных (элементы справочников, документы и т.д.) совершенно недопустимо, чтобы в случае сбоя во время загрузки одного элемента у нас остановилась вся дальнейшая загрузка. Так вот для обработки таких исключительных ситуаций предназначена конструкция языка 1С Попытка Исключение. Синтаксис ее следующий:




Попытка

	//Выполняемый код

Исключение

	//Обработка исключительной ситуации:
	//- Сообщение пользователю;
	//- Запись лога в файл;
	//- Отправка сообщения по электронной почте;
	//- Фиксация ошибки путем присвоения переменной соответствующего значения

КонецПопытки;




Рассмотрим все вышесказанное на элементарном примере. Для начала искусственно создадим ситуацию с ошибкой. Сделаем это очень просто — путем деления на ноль.




&НаКлиенте
Процедура ВыполнитьДеление(Команда)

	Частное = 1 / 0;

КонецПроцедуры

При выполнении этого кода выводится вот такое системное сообщение об ошибке:

А теперь доработаем нашу процедуру с использованием Попытки




&НаКлиенте
Процедура ВыполнитьДеление(Команда)

	Попытка

		Частное = 1 / 0;

	Исключение

		Сообщить("Произошла ошибка при попытке деления");

	КонецПопытки;

КонецПроцедуры

Снова запустим на выполнение нашу процедуру. В этот раз системное сообщение об ошибке показано не будет, а будет выведено наше собственное сообщение, которое мы прописали в исключении. В исключении можно получить дополнительную информацию об ошибке с помощью метода ОписаниеОшибки(). Вот таким образом




Сообщить("Произошла ошибка при попытке деления" + ОписаниеОшибки());

В этом случае в момент выполнения деления в окне сообщений появится следующий текст



Произошла ошибка при попытке деления{ВнешняяОбработка.ПопыткаИсключение.Форма.Форма.Форма(34)}: Деление на 0

Попытки могут быть вложенными одна в другую. То есть вполне допустимым является следующая конструкция




Попытка

	//Код

	Попытка
		//Код
	Исключение
		//Обработка исключения
	КонецПопытки;

	Попытка
		//Код
	Исключение
		//Обработка исключения
	КонецПопытки;

Исключение
	//Обработка исключения
КонецПопытки;

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

Конечно не стоит злоупотреблять использованием конструкции Попытка Исключение. По сути ее использование целесообразно в следующих случаях

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

2 комментария на «“Обработка исключительных ситуаций”»

  1. Евгений:

    Кроме функции ОписаниеОшибки() теперь доступна аналогичная по назначению, но более «продвинутая» ИнформацияОбОшибке().

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С