Каждый разработчик 1С рано или поздно сталкивается с ситуацией, когда установленная точка останова в конфигураторе игнорируется системой. Особенно часто это происходит при работе с процедурами и функциями в общих модулях. В этой статье мы подробно разберем, почему так происходит, проанализируем основные причины — от простых логических ошибок до сложных сетевых настроек — и выясним, как заставить отладчик работать корректно.
Прежде чем погружаться в глубокие настройки платформы, нам необходимо убедиться в самом очевидном: а выполняется ли этот код вообще? Рассмотрим ситуацию, с которой столкнулся автор темы. Иногда мы устанавливаем точку останова в процедуре, ожидая её вызова, но программа идет по другому пути. Проанализируем цепочку вызовов. Если процедура общего модуля вызывается из другой процедуры, которая сама не выполняется из-за условия Если ... Тогда, то и точка останова внутри не сработает.
Для проверки мы можем использовать простую вставку кода перед проблемным участком:
Сообщить("Проверка входа в процедуру: " + ТекущаяДата());
Если после запуска системы сообщение в окне сообщений не появилось, значит, проблема не в отладчике, а в логике программы. Код просто не доходит до нужной точки. Если же сообщение выводится, а точка останова игнорируется — переходим к техническим настройкам.
Разберем одну из самых частых причин: клиентское приложение или фоновое задание не подключено к конфигуратору как предмет отладки. Даже в файловом варианте это критически важно. Проверим настройки подключения по шагам:
В файловом режиме фоновые задания запускаются отдельным процессом. Если флаг "Автоподключение фоновых заданий" не установлен, отладка внутри них работать не будет, даже если вы вызываете их из основного сеанса.
Проанализируем свойства самого общего модуля. В 1С 8.3 общие модули имеют набор флагов, определяющих, где будет исполняться код. Рассмотрим наиболее критичные комбинации:
Экспортная, находится в серверном модуле и вы пытаетесь вызвать её с клиента, без этого флага вызов не произойдет.Проверим, чтобы контекст вызова соответствовал настройкам модуля. Для надежности при разработке часто устанавливают флаги Клиент (управляемое приложение) и Сервер одновременно, если логика модуля это позволяет.
Выясним, как влияет на отладку динамическое обновление конфигурации. В среде разработчиков его часто называют "демоническим". При таком обновлении база данных обновляется без перезапуска пользователей, что часто приводит к рассинхронизации кеша. Конфигуратор "думает", что код выглядит одним образом, а исполняемый сеанс в памяти использует старую версию метаданных. В итоге точка останова может стоять на 10-й строке, которая в реальности стала 15-й, или вообще исчезла.
Чтобы исключить влияние кеша, выполним следующие действия:
%LOCALAPPDATA%\1cv8 и %APPDATA%\1cv8. Нужно удалить папки с длинными буквенно-цифровыми идентификаторами вашей базы.Посмотрим на современный способ решения проблем с отладкой — переход на HTTP-отладку. Традиционный протокол TCP часто блокируется антивирусами, брандмауэрами или просто нестабильно работает при наличии нескольких сетевых интерфейсов. HTTP-отладка работает через специальный сервис отладки и считается более надежной.
Чтобы переключиться на HTTP-отладку (в актуальных версиях платформы 8.3):
localhost для локальной машины).Как отмечают опытные разработчики, переход на HTTP часто "лечит" необъяснимые глюки, когда точки останова перестают срабатывать без видимых причин.
Иногда решение бывает до смешного простым. В панели инструментов конфигуратора есть кнопка Пропускать все точки останова (выглядит как синяя стрелка с перечеркнутым красным кругом). Если вы случайно нажали её или использовали горячую клавишу, ни одна точка останова в системе не сработает. Проверьте состояние этой кнопки — она должна быть отжата.
Если ваша процедура в общем модуле вызывается через COM-соединение или Внешнее соединение, стандартная отладка не сработает. Эти сеансы не считаются интерактивными. Для их отладки необходимо:
Сообщить() или запись в Журнал регистрации.Разберем еще один момент — Условные точки останова. Если вы нажали правой кнопкой на точку и выбрали "Условие", проверьте правильность написания выражения. Если в условии допущена ошибка (например, обращение к несуществующей переменной) или условие возвращает Ложь, остановки не произойдет. Попробуйте временно отключить все условия, чтобы убедиться в работоспособности самого механизма отладки.
Подводя итог, если точка останова не срабатывает, рекомендуем действовать по алгоритму: проверка фактического вызова кода через Сообщить(), проверка окна "Подключение предметов отладки", очистка кеша и, в качестве финального средства, переход на протокол HTTP-отладки. Совокупность этих мер позволяет решить 99% проблем с отладкой в общих модулях 1С.