Многие разработчики 1С сталкиваются с ситуацией, когда при пошаговой отладке (нажатии клавиш F10 или F11) отладчик внезапно проваливается в совершенно посторонние модули. Это могут быть различные фоновые задания, проверки статусов, обновление интерфейса или обработчики ожидания. Такое поведение системы сильно отвлекает, сбивает фокус и заставляет тратить время на выход из ненужных процедур. Проанализируем ситуацию и разберем по шагам все доступные способы, как ограничить этот "белый шум" и сделать процесс отладки комфортным.
Рассмотрим самый базовый и часто используемый метод. Платформа 1С:Предприятие позволяет управлять тем, к каким типам сеансов отладчик подключается автоматически.
Если вам все же необходимо отладить конкретное фоновое задание, разберем обходной маневр: установите флажок автоподключения фоновых заданий, запустите процесс, провалитесь в нужный целевой сеанс, а затем снимите флаг. Отключите в списке предметов отладки все лишние сеансы, оставив только нужный. Таким образом, новые задания вас больше не побеспокоят, а нужный код продолжит отлаживаться.
Если вы работаете с современной конфигурацией, включающей Библиотеку стандартных подсистем (БСП) версий 2.2 и выше, выясним причину частых перехватов. Часто разработчики используют программный интерфейс БСП для выполнения процедур в фоне, например, через функцию ВыполнитьВФоне. В БСП встроен специальный механизм, который позволяет отключить этот асинхронный запуск.
Для активации этого режима выполним следующие шаги:
РежимОтладки (или /C РежимОтладки).Посмотрим на результат: в этом режиме все длительные операции будут выполняться сразу в текущем сеансе, без порождения фонового задания (за исключением строго специфичных задач). Это колоссально упрощает отладку, так как стек вызовов остается в рамках одного сеанса, а параллельные фоновые процессы из-под БСП не мешают работе.
Часто отладчик затягивает нас в процедуры, инициированные методом ПодключитьОбработчикОжидания. Это таймеры, которые срабатывают на клиенте (например, проверка новых сообщений или обновление динамических списков). Чтобы их остановить, рассмотрим использование парного метода ОтключитьОбработчикОжидания.
Синтаксис платформы выглядит так:
ОтключитьОбработчикОжидания("<ИмяПроцедуры>");
Главная сложность заключается в том, что платформа не предоставляет готового списка текущих активных обработчиков. Выясним имя процедуры по стеку вызовов (когда отладчик туда провалится) и скопируем его. Чтобы не хардкодить отключение в основном коде и не испортить типовую конфигурацию, создадим временное Расширение для отладки.
В расширении можно перехватить раздражающую процедуру с помощью аннотаций &После или &Вместо и принудительно убить таймер. Посмотрим на пример кода в расширении:
&После("ПриОткрытии")
Процедура РасшОтладка_ПриОткрытии(Отказ)
Попытка
ОтключитьОбработчикОжидания("ИмяНазойливойПроцедурыОбновления");
Исключение
// Игнорируем ошибку, если обработчик еще не был подключен
КонецПопытки;
КонецПроцедуры
Проанализируем ситуацию, когда база работает на сервере 1С:Предприятия. В этом случае регламентные задания генерируются самой службой сервера, независимо от вашего сеанса. Мы можем заблокировать их глобально.
Это гарантирует 100% защиту от запуска серверных регламентных процедур. Важно: не забудьте снять этот флажок после окончания отладки, иначе бизнес-логика предприятия (например, автоматический обмен данными) встанет.
Разберем специфику файловых баз. В файловом варианте нет отдельной службы сервера, поэтому роль инициатора регламентных заданий берет на себя одно из запущенных клиентских приложений. Это особенно мешает при отладке локально.
Чтобы запретить текущему клиенту инициировать задания, пропишем в параметры запуска информационной базы (в самом окне запуска 1С) специальный ключ:
/AllowExecuteScheduledJobs -Off
С этим ключом платформа не будет запускать регламентные потоки в фоне вашего отлаживаемого сеанса.
Если проблема локализована в конкретных "тяжелых" процедурах типовых конфигураций (например, постоянно стартует полнотекстовый поиск данных или обновление классификаторов), мы можем отключить их штатно.
Перейдите в пользовательском режиме в раздел Администрирование -> Обслуживание -> Регламентные и фоновые задания. Найдите в списке задачу, которая постоянно перехватывает отладчик, и снимите с нее флажок Включено. Это точечный и безопасный метод, который не требует изменения настроек сервера или кода.
В завершение рассмотрим современные инструменты разработки. Если вы перешли с классического Конфигуратора на 1C:EDT, у вас появляются более мощные инструменты фильтрации отладчика.
В настройках отладки EDT существует механизм Step Filter (Фильтр шагов). Он позволяет указать конкретные общие модули или префиксы модулей (например, модули подсистем БСП), которые отладчик должен полностью игнорировать при нажатии пошагового выполнения. Платформа будет выполнять код этих модулей, но визуально отладчик не будет в них останавливаться, фокусируясь только на вашем прикладном коде.
Используя комбинацию этих методов, мы сможем сделать процесс разработки и отладки максимально чистым и сэкономить массу времени и нервов.