Разработка и Конфигурация · 12 мин
Почему не срабатывает точка останова в 1С и как это исправить
Разбираем, почему точка останова в 1С не срабатывает: отладка не включена, не тот клиент, серверный код, фоновые задания. Пошаговые проверки и решения.
Точка останова в конфигураторе 1С перестаёт срабатывать по ограниченному набору причин: отладка не запущена или запущена не для того сеанса, код выполняется в другом контексте (на сервере, в фоновом задании, в другом клиенте), либо сама строка никогда не исполняется из-за логики программы. Проблема почти всегда решается системной проверкой настроек, а не переустановкой платформы.
Типичная ситуация выглядит так: разработчик ставит красный круг в модуле, запускает предприятие, выполняет действие — и ничего не происходит. При этом сам код может исполняться корректно, просто отладчик его «не видит». Различать эти случаи важно, потому что методы диагностики разные.
Ниже разобраны основные причины в порядке частоты встречаемости: от банального неподключённого предмета отладки до тонкостей с HTTP-сервисами и фоновыми заданиями. Для каждой причины приведён способ проверки и исправления.
Отладка не запущена или запущена неправильно
Самая частая причина — конфигуратор открыт, точки расставлены, но сеанс предприятия запущен обычным способом, а не через отладку. Точки останова работают только когда конфигуратор находится в режиме отладки и «держит» сеанс. Запуск выполняется клавишей F5 или через меню «Отладка → Начать отладку».
Вторая разновидность ошибки — отладка запущена, но сеанс закрыт и открыт заново уже без неё. Например, разработчик перезапустил тонкий клиент вручную из ярлыка. Этот новый сеанс отладчик не контролирует, и точки останова игнорируются.
Проверить состояние просто: в конфигураторе внизу окна есть индикатор режима отладки, а в меню «Отладка» активны команды остановки и продолжения. Если команда «Начать отладку» доступна, а «Завершить» — нет, отладка не идёт.
- 1Откройте конфигуратор и поставьте точку останова в нужной строке
- 2Нажмите F5 (Отладка → Начать отладку) и дождитесь запуска клиента
- 3Выполните в клиенте действие, которое вызывает нужный код
- 4Если останов не произошёл — откройте Отладка → Подключение и проверьте список предметов отладки
Код выполняется на сервере, а серверная отладка не включена
В клиент-серверном варианте работы весь код с директивами &НаСервере, серверные модули и общие серверные модули исполняются на сервере 1С:Предприятия. Чтобы отладчик видел этот код, сервер должен быть запущен с ключом отладки. Без него точки останова в серверном коде молча игнорируются — это вторая по частоте причина проблемы.
Для службы агента сервера 1С отладка включается параметром -debug в строке запуска службы. В Windows это делается через реестр (параметр ImagePath службы агента сервера) или перерегистрацией службы утилитой ragent с нужными ключами. После изменения службу нужно перезапустить, что на рабочем сервере требует согласования — пользователи будут отключены.
Признак того, что проблема именно в этом: точки в клиентском коде (&НаКлиенте) срабатывают, а в серверном — нет. Дополнительно проверьте в конфигураторе «Сервис → Параметры → Отладка»: там должен быть выбран протокол отладки, совместимый с версией сервера (для современных платформ — отладка по TCP или HTTP в зависимости от настроек кластера).
Не тот предмет отладки: тонкий клиент, веб-клиент, фоновые задания
Один конфигуратор может отлаживать несколько сеансов, но по умолчанию подключается только тот, что запущен через F5. Если код исполняется в другом месте — в уже открытом тонком клиенте, в веб-клиенте, в сеансе другого пользователя или в фоновом задании — его нужно подключить вручную через «Отладка → Подключение».
В диалоге подключения отображаются доступные предметы отладки с указанием типа (тонкий клиент, сервер, фоновое задание) и пользователя. Если нужный сеанс в списке отсутствует, проверьте, что он запущен под той же информационной базой и что в параметрах отладки не включён фильтр по имени пользователя.
Фоновые задания и регламентные операции
Код, запущенный через ФоновыеЗадания.Выполнить() или регламентные задания, исполняется в отдельном сеансе. Такой сеанс появляется в списке предметов отладки только в момент выполнения и может «проскочить» быстрее, чем вы его подключите. Практический приём — временно добавить в начало метода цикл ожидания или вызов, дающий время подключиться, либо отлаживать логику, вызывая метод напрямую из клиента.
Веб-сервисы и HTTP-сервисы
Точки останова в модулях HTTP-сервисов и веб-сервисов требуют, чтобы сеанс обработки запроса был доступен для подключения. Для файловой базы, опубликованной на веб-сервере, отладка HTTP-сервисов часто недоступна вовсе — надёжнее отлаживать логику в клиент-серверной тестовой базе.
Проверьте ключ -debug в параметрах службы агента сервера
Проверьте F5 и список в Отладка → Подключение
Подключите предмет отладки вручную в момент выполнения
Проверьте условия, вызовы и актуальность конфигурации БД
Строка с точкой останова реально не исполняется
Отладчик может быть настроен идеально, но если поток выполнения не доходит до строки — останова не будет. Проверьте условия, ветвления и исключения: типичный случай — точка стоит внутри Если ... Тогда, условие которого всегда ложно, или после Возврат, либо в обработчике события, которое не наступает (например, «ПриСозданииНаСервере» у формы, открываемой из кэша).
Ещё одна ловушка — код вызывается не тот. В конфигурации может существовать несколько похожих модулей: общий модуль и модуль объекта, переопределённый обработчик в расширении, подписка на событие. Убедитесь, что вы ставите точку именно в тот метод, который реально вызывается. Быстро проверить помогает временный вывод сообщения или запись в журнал регистрации из этой строки.
Отдельный случай — расширения конфигурации. Если метод переопределён расширением, исполняется версия из расширения, а точка стоит в основной конфигурации. Откройте модуль в контексте расширения и поставьте точку там, при этом расширение должно быть подключено и активно в сеансе.
Настройки конфигуратора и протокол отладки
В меню «Сервис → Параметры → Отладка» задаётся способ соединения отладчика с предметами отладки. Несовпадение протокола между конфигуратором и сервером (например, сервер настроен на отладку по HTTP, а конфигуратор ищет по TCP) приводит к тому, что предметы отладки не видны. Параметры должны соответствовать настройкам кластера.
Также проверьте диапазон портов отладки: если порты закрыты файрволом между компьютером разработчика и сервером, подключение невозможно. В этом случае в списке предметов отладки серверные сеансы просто не появляются, хотя отладка на сервере включена.
Для файловых баз протокол проще: отладка работает напрямую, и если точки не срабатывают в файловом режиме — проблема почти наверняка в том, что сеанс запущен не через F5 или код не исполняется.
Маршрут диагностики
Частые ошибки и как их избежать
Опыт показывает, что большинство обращений с «не работает точка останова» сводится к нескольким повторяющимся промахам. Их список ниже помогает проверить себя до того, как углубляться в настройки сервера.
Обратите внимание на последний пункт: точки останова можно ставить только на исполняемые операторы. Строки с объявлениями переменных, комментариями, директивами компиляции и заголовками процедур не являются исполняемыми — конфигуратор обычно сам переносит точку на ближайшую допустимую строку, но при редактировании кода точка может оказаться «повисшей».
Когда подключиться к нужному сеансу сложно (фоновое задание, внешний вызов), удобнее временно заменить отладку логированием: запись в журнал регистрации с ключевыми значениями переменных часто быстрее показывает, исполняется ли код и с какими данными, чем попытки поймать момент для подключения отладчика.
Проверка результата и когда обращаться к администратору
После исправления настроек проверьте результат контрольным прогоном: поставьте точку в заведомо исполняемой строке (например, в начале обработчика команды формы), запустите отладку и выполните действие. Останов на точке подтверждает, что механизм работает; дальше переносите точки в проблемный код.
Как проверить, что отладка работает
Активны команды остановки и продолжения отладки
Доступна только команда «Начать отладку»
Нужный сеанс виден и отмечен как подключённый
Сеанс отсутствует или не подключён
Останов происходит при выполнении действия
Останова нет даже в простом обработчике
Конфигурация обновлена, изменений не требуется
Есть необновлённые изменения (диалог при F5)
Если базовые проверки пройдены, а серверные точки по-прежнему не срабатывают, дальнейшие действия требуют прав администратора: изменение параметров службы агента сервера, настройка портов и протокола кластера. Самостоятельно менять эти настройки на рабочем сервере не стоит — ошибка в строке запуска службы может остановить работу всего кластера.
Что важно запомнить
В большинстве случаев точка останова не срабатывает из-за неподключённого сеанса отладки или отсутствия отладки на сервере. Порядок действий: проверить запуск через F5, обновить конфигурацию БД, убедиться что код реально исполняется, подключить нужный предмет отладки, при необходимости — включить отладку на сервере силами администратора.
Частые вопросы
Точка останова стала полой (с пустым центром) — что это значит?
Полая точка означает, что она не привязана к исполняемому коду текущего сеанса: либо отладка не запущена, либо конфигурация БД отличается от редактируемой, либо модуль относится к неподключённому предмету отладки. Обновите конфигурацию БД и проверьте подключение сеанса.
Можно ли отладить код у конкретного пользователя на рабочей базе?
Технически да: через «Отладка → Подключение» можно подключиться к сеансу другого пользователя, если отладка на сервере включена и у вас есть права. На практике это рискованно: останов на точке заморозит сеанс пользователя. Безопаснее воспроизводить проблему на копии базы.
Почему точка не срабатывает в модуле внешней обработки?
Отладчик работает с тем экземпляром обработки, который открыт в сеансе. Если вы редактируете файл обработки, а в предприятии открыта старая версия из другого каталога — точки не сработают. Откройте обработку в конфигураторе и запустите её через «Файл → Открыть» в отлаживаемом сеансе.
Точки срабатывают, но переменные показывают не те значения, что в коде?
Это признак расхождения редактируемой конфигурации и конфигурации базы данных: отлаживается старая версия модуля, а смотрите вы новую. Обновите конфигурацию БД (F7) и перезапустите отладку — нумерация строк и значения выровняются.
Не срабатывает точка в подписке на событие — в чём причина?
Сначала убедитесь, что подписка активна и событие реально наступает (например, запись объекта происходит именно тем способом, на который подписка настроена). Если код подписки серверный — нужна включённая отладка на сервере. Также проверьте, не отключена ли подписка в свойствах или через функциональные опции.
Работает ли отладка в мобильном клиенте и мобильной платформе?
Да, но с ограничениями: мобильный клиент подключается как отдельный предмет отладки через список подключения, а для мобильной платформы требуется публикация и специальная настройка связи с конфигуратором. Схема диагностики та же — проверять видимость сеанса в списке предметов отладки.