Насколько критичны ошибки, возникающие при включенной опции «Останавливаться по ошибке» в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке и отладке в среде 1С:Предприятие многие программисты сталкиваются с тем, что при включении в конфигураторе опции «Останавливаться по ошибке» (меню Отладка — Настройка отладки), система начинает прерывать выполнение кода на участках, которые в обычном режиме работают без видимых проблем. Рассмотрим подробнее, что это за ошибки, стоит ли их бояться и нужно ли тратить время на их устранение.

Механизм работы отладчика и обработка исключений

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

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

Почему важно минимизировать использование исключений?

Многие начинающие разработчики используют Попытка...Исключение как универсальный инструмент для проверки данных. Посмотрим на классический пример некорректного подхода:


Попытка
    Сумма = Число(ВнешнийИсточник.Сумма);
Исключение
    Сумма = 0;
КонецПопытки;

В данном случае, если во внешнем источнике придет строка вместо числа, платформа сгенерирует исключение. Выясним причину, почему это плохо:

  1. Снижение производительности (Exception Overhead): Генерация исключения в 1С — это крайне ресурсоемкая операция. Система должна собрать стек вызовов, зафиксировать состояние объектов и передать управление обработчику. Если такой код выполняется внутри цикла на 10 000 итераций, время выполнения программы может увеличиться в десятки раз.
  2. Сложность отладки: Когда ваш код (или код коллег) перегружен такими «запланированными» ошибками, проводить реальную отладку становится невозможно — отладчик будет останавливаться на каждом шагу, отвлекая от поиска настоящей логической ошибки.

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


// Проверяем тип данных или возможность преобразования без генерации ошибки
Если ОбщегоНазначения.СтрокаЯвляетсяЧислом(ВнешнийИсточник.Сумма) Тогда
    Сумма = Число(ВнешнийИсточник.Сумма);
Иначе
    Сумма = 0;
КонецЕсли;

Критичность ошибок при версировании объектов

Рассмотрим ситуацию, упомянутую в обсуждении: возникновение ошибок при записи объектов в контексте версирования. В типовых конфигурациях (использующих БСП) механизм версирования часто завязан на подписки на события ПриЗаписи или ПередЗаписью.

Если при включенной галке отладчик останавливается в модулях версирования, это может сигнализировать о серьезных проблемах:

В этом случае ошибки критичны. Если вы видите, что ошибка возникает в вашем коде — ее нужно исправить. Если в типовом (от БСП или вендора) — стоит проконсультироваться с техлидером, так как иногда платформенные механизмы намеренно используют исключения для проверки прав доступа или наличия свойств, и это считается «нормальным» (хотя и не идеальным) поведением.

Проблема «пустых» исключений и целостность данных

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


Попытка
    НаборЗаписей = РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
    // ... заполнение набора ...
    НаборЗаписей.Записать();
Исключение
    // Ошибка просто игнорируется
КонецПопытки;

Выясним, что происходит в этот момент: если запись в регистр не удалась (например, из-за блокировки или нарушения уникальности), транзакция может оказаться в неопределенном состоянии. В худшем случае часть данных запишется, а часть — нет. При включенной галке отладчик покажет вам это место, и это ваш шанс предотвратить нарушение логической целостности базы данных.

Рекомендации по «Чистому коду» (Clean Code) в 1С

Проанализируем стандарты разработки, которые приняты в профессиональной среде:

  1. Всегда держите флаг «Останавливаться по ошибке» включенным во время разработки своего функционала. Это дисциплинирует и заставляет писать код, который не генерирует лишних системных прерываний.
  2. Используйте исключения только для исключительных ситуаций, которые невозможно предусмотреть программно:
    • Потеря связи с сервером или внешним API.
    • Отсутствие файла на диске (если проверка Файл.Существует() не гарантирует его доступность в момент открытия).
    • Блокировки таблиц базы данных.
  3. Настраивайте фильтры в новых версиях платформы (8.3.x): В окне настройки отладки можно указать список модулей, которые нужно игнорировать. Если вы знаете, что стандартная библиотека (БСП) «мусорит» обработанными ошибками, добавьте ее модули в исключения, чтобы сосредоточиться на своем коде.

Подводя итог: если отладчик останавливается на ошибке — это повод как минимум проанализировать это место. Если это ваш код и ошибку можно заменить условием Если...Тогда — сделайте это. Это повысит стабильность, скорость работы системы и облегчит жизнь коллегам, которые будут поддерживать ваш код в будущем.

← На главную