При написании кода в системе BAS иногда возникает необходимость в программной обработке ожидаемых ошибок, возникающих при выполнении прикладного кода в системе BAS (исключений в дальнейшем).
В целом система все равно реагирует на возникновение исключений, независимо от источника их возникновения. Сами исключения могут быть вызваны платформой или оператором «ВызватьИсключение» встроенной речи. Причин возникновения исключений много. Однако все они делятся на восстановительные та невосстановимые исключения.
Невозобновимые исключения – это ошибки, после которых дальнейшая работа системы невозможна. Это может быть как в случае, когда система не может автоматически обработать ошибку, так и в случае, когда есть серьезный сбой в работе программы, что приводит к риску искажения данных в информационной базе. К таким исключениям относятся:
- внутренние ошибки выполнения платформы;
- ошибки работы СУБД;
- ошибки компиляции модулей;
- критический сбой при инициализации объектов.
Такие исключения невозможно перехватить или как-то повлиять на дальнейшую их обработку.
Восстановительные исключения – это ошибки, после которых система может продолжать работу. К ним относятся:
- ошибки выполнения кода встроенного языка;
- ошибки блокировки данных (при одновременной работе нескольких пользователей);
- ошибки записи объектов;
- ошибки выполнения запросов;
- арифметические ошибки;
- ошибки типов данных;
- ошибки при работе с файлами.
Большинство из них являются ошибками времени выполнения, которые в большинстве своем могут быть перехвачены и обработаны оператором. «Попытка Исключение».
Пример. Предположим, что в модуле формы обработки мы планируем обработать данные документа «Этап производства» и записать изменения в документ. Для этого необходимо заблокировать документ на момент обработки во избежание возможности изменения документа в информационной базе за время обработки. В случае, если этот документ уже заблокирован другим пользователем, возникнет ошибка времени выполнения, которую мы перехватим программным способом. После чего прекратим выполнение модуля и выведем уведомление об ошибке (рис. 1).

Рис. 1. Сообщение об ошибке выполнения модуля формы
Для этого в модуле формы обработки, в процедуре на сервере с открытым контекстом разместим следующий код:

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