Попытка (Try Except)

Оператор «Попытка» («Try Except») управляет выполнением модуля, основываясь на возникающих ошибочных (исключительных) ситуациях и определяет обработку этих ситуаций. В качестве ошибочных (исключительных) ситуаций воспринимаются ошибки исполнения модуля.


Синтаксис:

Попытка
    // Операторы попытки 
Исключение
    // Операторы исключения
    [ВызватьИсключение;]
    // Операторы исключения
КонецПопытки

Или

Try

    // Операторы попытки 

Except

    // Операторы исключения
    [Raise;]
    // Операторы исключения
EndTry


Альтернативный синтаксис:

Попытка
/
    // Операторы попытки 
\

Исключение
/

    // Операторы исключения
    [ВызватьИсключение;]
    // Операторы исключения
\

Или

Try
/

    // Операторы попытки 
\

Except
/

    // Операторы исключения
    [Raise;]
    // Операторы исключения
\


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

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

// Операторы попытки – исполняемый оператор или последовательность таких операторов.

Исключение (Except) – операторы, следующие за ключевым словом Исключение, выполняются, если при выполнении последовательности операторов произошла ошибка времени выполнения.

// Операторы исключения – исполняемый оператор или последовательность операторов, которые обрабатывают исключительную ситуацию.

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

КонецПопытки (EndTry) – ключевое слово, которое завершает структуру оператора обработки исключительных ситуаций.


Пример:

//Производится попытка открыть модуль.
//В случае возникновения ошибки открытия модуля выводится сообщение,
//работа функции завершается.
Функция КнопкаВыбратьСтол_ПриНажатии()
    Попытка
        МодульСпискаСтолов = ОткрытьМодуль(ИменаМодулей.Справочники.Столы.ФормаСписка);
    Исключение
        Сообщить(«Попытка открытия модуля не удалась!!!»);
        Возврат 0;
    КонецПопытки
    МодульСпискаСтолов.ДляВыбора = Истина;
    МодульСпискаСтолов.УстановитьОбработкуВыбора(ОбработкаВыбораСтола);
    МодульСпискаСтолов.ЗалОбъект = ОснЗалОбъект;
    МодульСпискаСтолов.ЭтаФорма.Показать(1);
    Возврат 1;
КонецФункции