К статье
Практический материал

Разработка и Конфигурация · 11 мин

1С: почему не работает точка останова и как исправить

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

Точка останова в конфигураторе 1С перестаёт срабатывать по ограниченному набору причин: не включена отладка в сеансе, код выполняется не в том клиентском или серверном контексте, конфигурация в режиме отладки не совпадает с открытой в конфигураторе, либо строка с точкой вообще не выполняется бизнес-логикой. Все эти ситуации диагностируются за несколько минут, если проверять их в правильном порядке.

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

Материал ориентирован на платформу 8.3 и управляемые формы, где большинство проблем с точками останова и возникает. Отдельно разобраны случаи с фоновыми заданиями, внешними обработками и отладкой через HTTP, поскольку там действуют дополнительные ограничения.

Проверьте, запущена ли отладка и подключён ли сеанс

Главное условие срабатывания точки останова — активный сеанс отладки. В конфигураторе откройте меню «Отладка» и проверьте, что отладка запущена (команда «Начать отладку» или клавиша F5). Если вы запустили предприятие отдельно, без конфигуратора, отладчик к нему не подключится автоматически — нужно явное подключение.

Для проверки откройте «Отладка → Подключение». В списке доступных предметов отладки должны отображаться активные сеансы. Если список пуст, значит, база запущена без разрешения отладки, либо сеанс работает в режиме, который не виден отладчику. Флажки «Искать предметы отладки на локальном компьютере» и «Искать предметы отладки на удалённых компьютерах» должны быть установлены в соответствии с тем, где работает база.

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

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

Убедитесь, что код с точкой действительно выполняется

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

Для проверки поставьте точку на первую строку процедуры или добавьте временный вызов Сообщить("процедура вызвана") в начало. Если сообщение не появляется — проблема в логике вызова, а не в отладчике. Проверьте, подписан ли обработчик на событие, не переопределён ли он в расширении с аннотацией «Вместо», не отключён ли программно.

Отдельный случай — директивы компиляции. Код внутри #Если Сервер Тогда или в процедуре с директивой &НаСервере не выполнится на клиенте, и наоборот. Точка, поставленная в клиентском контексте на серверную процедуру, физически не может сработать в клиентском сеансе — смотрите раздел про серверную отладку.

Отладка серверного кода в клиент-серверном режиме

В клиент-серверном варианте работы серверный код выполняется на сервере 1С:Предприятия, и по умолчанию отладка на сервере может быть выключена. Это одна из самых частых причин «нерабочей» точки останова в процедурах с директивой &НаСервере, в модулях менеджеров и общих серверных модулях.

Разрешение отладки задаётся параметром запуска сервера 1С. Для службы агента сервера нужен ключ -debug в строке запуска (и при необходимости -debugServerAddr с адресом сервера отладки). После изменения параметров службу агента сервера необходимо перезапустить — без перезапуска ключ не применится.

bash
"C:\Program Files\1cv8\<версия>\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\srvinfo" -debug

Есть нюанс с протоколом отладки: современные версии платформы по умолчанию используют отладку по HTTP, а в конфигураторе и на сервере протоколы должны совпадать. Если на сервере включён HTTP-протокол отладки, а конфигуратор настроен на TCP (или наоборот), предметы отладки не увидят друг друга. Проверьте соответствие в «Сервис → Параметры → Отладка» конфигуратора и в параметрах сервера.

Точка не работает в расширении или внешней обработке

Расширения конфигурации отлаживаются, но с условиями: расширение должно быть подключено к текущему сеансу, а его код — загружен в конфигуратор. Если вы изменили расширение и не обновили конфигурацию базы данных, отлаживается старая версия, и точки в новых строках не сработают или «уедут» на другие строки.

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

Внешние обработки и отчёты отлаживаются только если они открыты в том же сеансе, что подключён к отладчику, и файл обработки открыт в конфигураторе именно с того пути, из которого она запущена. Если вы правите копию файла в другом каталоге, точки в ней не сработают — отладчик сопоставляет код по источнику.

Типичные ошибки при отладке
01
Правка кода без обновления конфигурации базы данных — отлаживается старая версия, точки не совпадают со строками
02
Точка в процедуре расширения, подключённого с аннотацией «Вместо» в другом расширении — исходный обработчик не вызывается
03
Запуск предприятия ярлыком вместо F5 из конфигуратора — сеанс не подключён к отладчику
04
Отладка копии внешней обработки из другого каталога — отладчик не сопоставляет код
05
Ожидание срабатывания точки в фоновом задании без включения отладки фоновых заданий

Фоновые задания, веб-клиент и другие особые случаи

Фоновые задания и регламентные операции

Код, выполняемый в фоновом задании, — это отдельный сеанс, который к отладчику не подключается автоматически. В настройках подключения нужно включить тип предмета отладки «Фоновое задание» и установить флажок автоматического подключения новых фоновых заданий. После этого при старте фонового задания оно появится в списке подключённых, и точки в его коде начнут срабатывать.

Веб-клиент и мобильный клиент

Для отладки веб-клиента в конфигураторе должен быть включён соответствующий тип предмета отладки, а сам веб-клиент запущен с параметром, разрешающим отладку. На практике проще перенести проверяемую логику в тонкий клиент, если она не завязана на специфику браузера: клиентский код формы в большинстве случаев ведёт себя одинаково.

HTTP-сервисы и веб-сервисы

Сеансы HTTP-сервисов короткоживущие: они создаются на время обращения и завершаются сразу после. Чтобы успеть их отладить, включите автоматическое подключение сеансов HTTP-сервисов в настройках отладки и поставьте точку заранее, до отправки запроса. Точка останова в обработчике сервиса сработает только при фактическом входящем запросе.

Маршрут решения

Как выбрать действие по симптому

Точка стоит, но сеанс никогда не останавливается ни на одной точкеПроверьте, запущена ли отладка и виден ли сеанс в «Отладка → Подключение»
Клиентские точки срабатывают, а серверные — нетВключите отладку на сервере (ключ -debug) и тип «Сервер» в настройках подключения
Точка подсвечена как недостижимая или «съехала»Обновите конфигурацию базы данных (F7) и перезапустите отладку
Точка в фоновом задании не срабатываетВключите автоматическое подключение фоновых заданий в настройках отладки
Точка в обработчике формы не срабатываетПроверьте, не перекрыт ли обработчик расширением и вызывается ли событие вообще

Как проверить, что проблема решена

Надёжный способ убедиться, что отладка работает, — поставить контрольную точку в заведомо выполняемом месте: например, в обработчике «ПриОткрытии» формы, которую вы сейчас откроете. Если сеанс остановился — отладчик подключён корректно, и дальше можно точечно разбираться с конкретной процедурой.

Если контрольная точка сработала, а целевая — нет, причина в логике выполнения: условие не выполняется, обработчик не вызывается, код перекрыт расширением. Используйте «Отладка → Стек вызовов» после остановки, чтобы увидеть, каким путём пришло выполнение, и найдите место, где оно расходится с ожиданиями.

Когда точки останова недоступны в принципе (например, продуктивный сервер без права на перезапуск), используйте альтернативы: журнал регистрации с записью ключевых значений, вывод через Сообщить() на клиенте, технологический журнал на сервере. Это медленнее, но не требует включения отладки и не останавливает работу пользователей.

Контрольные точки

Как проверить результат

Контрольная точка в обработчике открытия формы
Норма

Сеанс останавливается, виден стек вызовов

Тревожный признак

Точка игнорируется — отладка не подключена

Строка с точкой в исполняемом коде
Норма

Точка отображается сплошным красным кружком

Тревожный признак

Точка пустая/серая — код не загружен или версия не совпадает

Список предметов отладки
Норма

Сеанс виден с нужными типами (клиент, сервер)

Тревожный признак

Список пуст или нет сервера — проверяйте -debug и протокол

Поведение после F7 и перезапуска
Норма

Точки совпадают с актуальными строками кода

Тревожный признак

Точки «съехали» — конфигурация БД не обновлена

Частые вопросы

Почему точка останова отображается пустым кружком?

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

Можно ли отлаживать код на продуктивном сервере?

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

Почему точка в модуле проведения документа не срабатывает?

Чаще всего потому, что проведение выполняется на сервере, а серверный контекст не подключён к отладчику, либо документ проводится фоновым заданием при отложенном проведении. Проверьте тип предметов отладки, включите отладку фоновых заданий и убедитесь, что вы проводите документ именно из подключённого сеанса.

Точка стоит в общем модуле, но отладчик её не видит. Что делать?

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

Срабатывает только первая точка, дальше отладка «зависает». В чём причина?

Это не зависание, а нормальное поведение: сеанс остановлен и ждёт команды. Нажмите F5 (продолжить), F10 (шаг через) или F11 (шаг в). Если после продолжения сеанс «висит» без остановок — следующие точки находятся в коде, который не выполняется, либо в другом контексте (сервер, фоновое задание).

Работает ли точка останова при отладке через HTTP?

Да, но конфигуратор и сервер должны использовать один и тот же протокол отладки. Если на сервере включён HTTP-протокол, а в конфигураторе выбран TCP (или наоборот), предметы отладки не подключатся. Проверьте соответствие настроек в «Сервис → Параметры → Отладка» и параметрах запуска сервера.

Итог

Что важно запомнить

Неработающая точка останова почти всегда означает одно из трёх: сеанс не подключён к отладчику, код выполняется в другом контексте (сервер, фоновое задание), либо строка с точкой не выполняется логикой программы. Проверяйте в этом порядке: подключение → контекст → достижимость строки, и не забывайте обновлять конфигурацию базы данных после правок.