Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-методическое пособие РЭИС.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
3.85 Mб
Скачать

2.5.4. Обработка исключений

Конструкция «Попытка...Исключение»

Обработка исключений предназначена для перехвата ошибок (исключительных ситуаций), возникающих в процессе работы программы. Если возникла ошибка, и она не была перехвачена, то выдается системное сообщение об ошибке, и выполнение модуля прерывается.

Однако разработчик может перехватывать возникающие ошибки и обрабатывать их по своему усмотрению, например:

Попытка

СредняяЦена = СуммаВсего / Количество;

Исключение

//Возникла ошибка деления на ноль.

//Будем считать, что количество равно 1.

Количество = 1;

СредняяЦена = СуммаВсего;

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

Чем меньше в вашей программе будет таких конструкций, тем лучше. Все потенциальные ошибки необходимо «отлавливать» по возможности еще до их возникновения. Конструкцию Попытка следует применять для внешних ошибок и при работе с базой данных, т.е. для тех ошибок, которые не являются ошибкой написания программы.

В следующем примере производится попытка записать файл, и если возникнет ошибка, то она будет перехвачена обработчиком исключений:

Попытка

ТекстФайл.Записать(ПутьКФайлу);

Исключение

Сообщить("Не удалось записать файл!");

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

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

Кроме того, есть команда ВызватьИсключение, которая может применяться только внутри блока обработки исключения. Хотя программист и обработал ошибку, но он может ее пропустить (передать обработчику вышестоящего уровня), например, если она неисправима:

Попытка

СредняяЦена = СуммаВсего / Количество;

Исключение

Сообщить("Эх! Надо было проверить количество на ноль!");

Сообщить(ОписаниеОшибки());

ЗаписьЖурналаРегистрации(ОписаниеОшибки());

//хотя мы и обработали ошибку, но программу все равно прервем

ВызватьИсключение;

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

Обработчики исключений могут быть вложенными друг в друга. Если ошибка не обработана во внутреннем блоке Исключение...КонецПопытки, тогда она обрабатывается внешним обработчиком, а если его нет, выдается системное сообщение об ошибке.

2.5.5. Процедуры и функции

Процедуры и функции являются блоками программы, которые можно вызвать по имени из другого места, например, из другой процедуры. Процедуры и функции могут иметь параметры, которые говорят о том, какие именно действия и с какими объектами она должна сделать. Функции отличаются от процедур только тем, что имеют возвращаемое значение.

Ниже показана процедура Печать, функция ЕстьПравоИсполъзования и процедура КнопкаПечатъНажатие, которая вызывается при нажатии на кнопку «Печать»:

Процедура Печать(ТабДок)

Макет = ПолучитьМакет("Основной");

ТабДок.Вывести(Макет.ПолучитьОбласть("Бланк"));

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

Функция ЕстьПравоИспольэования(ИмяОтчета)

//возвращаемое значение функции

Возврат ПравоДоступа("Использование", Отчеты[ИмяОтчета]);

КонецФункции

Процедура КнопкаПечатьНажатие(Элемент)

Если НЕ ЕстьПравоИспользования(ИмяОтчета) Тогда

Возврат; //досрочный выход из процедуры

КонецЕсли

ТабДок = Новый ТабличныйДокумент;

Печать(ТабДок); //вызов процедуры Печать

ТабДок.Показать();

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

Параметры у процедуры и функции могут быть необязательными. Тогда их можно будет опускать при вызове. Для необязательных параметров должно быть указано значение по умолчанию, например:

//следующая процедура принимает табличный документ,

//а если ничего не передано,

//то она его создает и показывает на экране

Процедура Печать(ТабДок = Неопределено) Экспорт

Если ТабДок = Неопределено Тогда

ТабДок = Новый ТабличныйДокумент;

флПоказывать = Истина;

Иначе

флПоказывать = Ложь;

КонецЕсли;

Макет = ПолучитьМакет("Основной");

ТабДок.Вывести(Макет.ПолучитьОбласть("Бланк"));

Если флПоказывать Тогда

ТабДок.Показать();

КонецЕсли;

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

Замечание.

В 1С:Предприятии 8.0 порядок следования процедур и функций в модуле не важен. Это означает, что процедура может располагаться ниже места ее вызова, т.е. предварительное объявление процедур и функции не требуется (в версии 7.7 для этого использовалось ключевое слово Далее).

Процедуры и функции рекомендуется предварять комментариями с описанием их назначения, параметров, основных принципов работы и возвращаемого значения для функций. В редакторе модулей есть возможность свернуть процедуры и функции модуля, а также перейти на одну из них, выбрав ее из списка. Описания в виде комментариев также можно сворачивать.

Параметры процедуры или функции по умолчанию передаются по ссылке. Это означает, что изменение формального параметра внутри процедуры или функции приведет к изменению фактического параметра в том месте, где она вызывается. Чтобы гарантированно передать параметр по значению, нужно перед именем параметра вставить ключевое слово Знач.