1С:Предприятие 8 имеет единую стратегию обработки исключительных ситуаций (исключений). Исключение может быть вызвано платформой или оператором ВызватьИсключение встроенного языка. Платформа может вызывать исключения по самым разным поводам. Это может быть ошибка доступа к файлу, если выполняется файловая операция, может быть ошибка выполнения встроенного языка, может быть ошибка блокировки данных при одновременной работе пользователей, может быть установка параметра Отказ в обработчике записи документа и т.д.
Все исключения делятся на восстановимые и невосстановимые. Восстановимые, это те исключения, после которых 1С:Предприятие может продолжать работу. После невосстановимых исключений работа системы не может быть продолжена. К восстановимым исключениям, относятся, например, ошибки блокировки данных, ошибки выполнения встроенного языка. Невосстановимыми являются, например, такие исключения, как ошибка компиляции модуля или внутренняя ошибка 1С:Предприятия. Есть и определенные ситуации, при которых исключение может стать невосстановимым. Например, если ошибка выполнения встроенного языка произошла в ходе инициализации модуля (а не при выполнении процедуры или функции), то после такой ошибки система не может продолжать работу, так как объект, которому принадлежит модуль, фактически, оказался неинициализированным.
Наличие невосстановимых исключений обусловлено тем, что система автоматизации экономической деятельность работает обычно с достаточно ответственными задачами. Если при работе произошел серьезный сбой, то продолжать работу с риском внести в информационную базу искаженные данные является нецелесообразным.
Если исключение вызвано в ходе выполнения модуля, то работа модуля прекращается. Однако существует возможность обработать исключение оператором "Попытка – Исключение". Это предоставляет возможность для восстановимых ошибок обработать исключение. При этом можно вызвать его повторно (оператором ВызватьИсключение) или не вызывать. Текст сообщения об ошибке можно получить функцией ОписаниеОшибки(). Например, это позволяет отобразить ошибку, но проигнорировать исключение.
Следует заметить, что имеется возможность получить только читабельное сообщение об ошибке, которое можно вывести пользователю. Не существует возможности определить причину ошибки. Анализировать для этих целей текст ошибки неправильно, так как он может выдаваться на разных языках и может в дальнейшем меняться. Таким образом, стратегию обработки исключений в модулях нужно строить исходя из того, что все исключения обрабатываются одинаково.
Исключения, которые не обработаны во встроенном языке, система обрабатывает самостоятельно. Обработка заключается в отображении исключения в специальном окне. Сначала выдается краткое сообщение, но существует возможность получить более подробную информацию, нажав кнопку "Подробно". В появившемся окне может быть отображено несколько причин, в соответствии с тем какие действия исходно привели к исключению и какие действия из-за этого были отменены далее.
В некоторых случаях из окна подробного просмотра существует возможность перейти к просмотру ошибки встроенного языка в конфигураторе. Если у текущего пользователя нет административных прав, то необходимо будет аутентифицироваться другому пользователю.
Кроме того, при системной обработке исключений делается запись в журнал регистрации, если режим записи журнала установлен для данной информационной базы.
После просмотра исключения работа системы может быть завершена или продолжена в зависимости от того, является исключение восстановимым или нет.
Существует очень небольшое количество ситуаций, когда 1С:Предприятие не может никак обработать и отобразить ошибку. В этих случаях работа может аварийно завершиться без сообщений или с сообщением, выдаваемым операционной системой.
Заметим, что реализованная в системе стратегия работы с исключениями ориентирована на то, что разработчик в большинстве случаев не обрабатывает исключения во встроенном языке. Независимо от характера исключения система автоматически завершит текущее действие и отобразит ошибку в стандартном окне. Если исключение восстановимое, то работа будет продолжена и пользователь сможет повторить вызванное действие, например, снова нажав кнопку "Записать" в форме документа. Если исключение невосстановимое, то работа системы будет завершена.
Целесообразность повторения действия после восстановимого исключения в большинстве случаев понятна из текста сообщения. Например, очевидно, что если в сообщении говорится про блокировку, то действие можно повторить.
Важно понимать, что в системе существует единый механизм обработки исключений для обработки ошибок платформы, конфигурации и действий пользователя. Следует рассматривать платформу и конфигурацию как целостное приложение со сквозной системой обработки исключений. В общем случае невозможно разделить ошибки на те, которые допущены разработчиком конфигурации и те, которые обусловлены неверными действиями пользователя. Одно и то же исключение может иметь и ту, и другую причину. Например, исключение вызывается, если не заполнены обязательные измерения регистра. Они могут быть не заполнены потому, что разработчик неверно написал код в модуле, а могут быть не заполнены, потому, что записи регистра вводил пользователь в форме и он оставил соответствующие поля пустыми. Стандартный механизм работы с исключениями позволяет не делать в форме специальных проверок этих измерений и предоставить системе возможность самой выдать сообщение пользователю об ошибке.
Таким образом, рекомендуется без необходимости не обрабатывать исключения в модулях и не дублировать те проверки, которые делает система и сама генерирует по ним исключения, а предоставить системе возможность отработать их стандартным способом.
Рекомендуется также ознакомиться с разделами:
• Почему в режиме 1С:Предприятие прикладное решение завершает работу, если обнаружена синтаксическая ошибка в вызываемом модуле?
• Ошибки базы данных и транзакции
• Бесконечная рекурсия