- •Глава 2 . Встроенный язык
- •2.1. Программные модули Виды программных модулей
- •Разделы программного модуля
- •Разделы программного модуля
- •Контекст
- •2.2. Конструкции встроенного языка
- •Условия
- •Логические выражения
- •Безусловные переходы
- •Обработка исключений
- •2.3. Процедуры и функции
- •2.4. Инструкции препроцессора
- •2.5. Типы данных
- •Объявление переменных
- •Оператор Новый
- •Приведение типов
Безусловные переходы
Иногда необходимо принудительно передать управление в определенную точку программы. Это реализуется с помощью метки и оператора Перейти. Метка может быть у любого исполняемого оператора. Она начинается со знака тильды («~»), далее идет имя метки, а затем двоеточие («:»), например:
н = 0;
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
н = н + 1;
Если н <= 10 Тогда
//пропускаем первые 10 элементов справочника
Перейти -след;
КонецЕсли;
Сообщить(Выборка.Наименование);
-след:
//возьмем следующий элемент
КонецЦикла;
С помощью оператора Перейти можно передавать управление в пределах процедуры/функции или в пределах раздела основной программы модуля. Заметьте, что этим способом нельзя выйти из процедуры или функции.
Чем меньше в вашей программе будет меток, тем лучше. Рекомендуется применять метки только для перехода в конец цикла или процедуры. Для досрочного выхода из цикла рекомендуется применять оператор Прервать, а для перехода на следующий виток цикла нужно применять оператор Продолжить. Оператор же Перейти будет полезен, если требуется выйти сразу из нескольких циклов.
Обработка исключений
«Попытка...Исключение»
Обработка исключений предназначена для перехвата ошибок (исключительных ситуаций), возникающих в процессе работы программы. Если возникла ошибка, и она не была перехвачена, то выдается системное сообщение об ошибке, и выполнение модуля прерывается.
Однако разработчик может перехватывать возникающие ошибки и обрабатывать их по своему усмотрению, например:
Попытка
СредняяЦена = СуммаВсего / Количество;
Исключение
//Возникла ошибка деления на ноль.
//Будем считать, что количество равно 1.
Количество = 1 ;
СредняяЦена = СуммаВсего;
КонецПопытки;
Чем меньше в вашей программе будет таких конструкций, тем лучше. Все потенциальные ошибки необходимо «отлавливать» по возможности еще до их возникновения. Конструкцию Попытка следует применять для внешних ошибок и при работе с базой данных, т.е. для тех ошибок, которые не являются ошибкой написания программы.
В следующем примере производится попытка записать файл, и если возникнет ошибка, то она будет перехвачена обработчиком исключений:
Попытка
ТекстФайл.Записать(ПутьКФайлу);
Исключение
Сообщить("Не удалось записать файл!");
КонецПопытки;
Внутри блока Исключение...КонецПопытки можно вызвать функцию ОписаниеОшибки, которая возвращает сообщение о возникшей ошибке в виде строки. Эту строку можно выдать в окно сообщений, записать в журнал регистрации или выполнить другие действия.
Кроме того, есть команда ВызватьИсключение, которая может применяться только внутри блока обработки исключения. Хотя программист и обработал ошибку, но он может ее пропустить (передать обработчику вышестоящего уровня), например, если она неисправима:
Попытка
СредняяЦена = СуммаВсего / Количество;
Исключение
Сообщить("Эх! Надо было проверить количество на ноль!");
Сообщить(ОписаниеОшибки());
ЗаписьЖурналаРегистрации(ОписаниеОшибки());
//хотя мы и обработали ошибку, но программу все равно прервем ВызватьИсключение;
КонецПопытки;
Обработчики исключений могут быть вложенными друг в друга. Если ошибка не обработана во внутреннем блоке Исключение...КонецПопытки, тогда она обрабатывается внешним обработчиком, а если его нет, выдается системное сообщение об ошибке.
