Разработка и Конфигурация · 11 мин
1С: почему не работает точка останова и как исправить
Разбираем, почему в 1С не срабатывает точка останова: не включена отладка, неверный режим, расширения, серверный код. Пошаговые решения и проверка результата.
Точка останова в конфигураторе 1С перестаёт срабатывать по ограниченному набору причин: не включена отладка в сеансе, код выполняется не в том клиентском или серверном контексте, конфигурация в режиме отладки не совпадает с открытой в конфигураторе, либо строка с точкой вообще не выполняется бизнес-логикой. Все эти ситуации диагностируются за несколько минут, если проверять их в правильном порядке.
Типичная ошибка разработчика — искать проблему в коде, хотя причина находится в настройках сеанса или в свойствах базы. Поэтому диагностику стоит начинать с самых простых и частых причин (отладка не запущена, не тот режим подключения) и только потом переходить к серверному коду, веб-клиенту и расширениям.
Материал ориентирован на платформу 8.3 и управляемые формы, где большинство проблем с точками останова и возникает. Отдельно разобраны случаи с фоновыми заданиями, внешними обработками и отладкой через HTTP, поскольку там действуют дополнительные ограничения.
Проверьте, запущена ли отладка и подключён ли сеанс
Главное условие срабатывания точки останова — активный сеанс отладки. В конфигураторе откройте меню «Отладка» и проверьте, что отладка запущена (команда «Начать отладку» или клавиша F5). Если вы запустили предприятие отдельно, без конфигуратора, отладчик к нему не подключится автоматически — нужно явное подключение.
Для проверки откройте «Отладка → Подключение». В списке доступных предметов отладки должны отображаться активные сеансы. Если список пуст, значит, база запущена без разрешения отладки, либо сеанс работает в режиме, который не виден отладчику. Флажки «Искать предметы отладки на локальном компьютере» и «Искать предметы отладки на удалённых компьютерах» должны быть установлены в соответствии с тем, где работает база.
Обратите внимание на типы предметов отладки в настройках («Отладка → Подключение → Настройка» или «Сервис → Параметры» в зависимости от версии). Если отключён тип «Сервер», серверный код отлаживаться не будет, и точки в серверных процедурах будут молча игнорироваться. Включите все типы, которые использует ваша конфигурация.
- 1Убедитесь, что отладка запущена из конфигуратора (F5), а предприятие открыто именно этим сеансом отладки
- 2Откройте «Отладка → Подключение» и проверьте, что сеанс виден в списке предметов отладки
- 3Проверьте, что в настройках подключения включены нужные типы: клиент, сервер
- 4Убедитесь, что строка с точкой реально выполняется — поставьте перед ней вызов Сообщить() или другую точку выше по коду
- 5Перезапустите отладку после изменения конфигурации базы данных
Убедитесь, что код с точкой действительно выполняется
Частая ситуация: точка стоит в ветке условия, которая не выполняется, в обработчике, который не вызывается, или в процедуре, перекрытой расширением. Отладчик здесь ни при чём — код просто не доходит до этой строки. Признак такой проблемы: точка останова отображается обычным образом, но сеанс никогда на ней не останавливается.
Для проверки поставьте точку на первую строку процедуры или добавьте временный вызов Сообщить("процедура вызвана") в начало. Если сообщение не появляется — проблема в логике вызова, а не в отладчике. Проверьте, подписан ли обработчик на событие, не переопределён ли он в расширении с аннотацией «Вместо», не отключён ли программно.
Отдельный случай — директивы компиляции. Код внутри #Если Сервер Тогда или в процедуре с директивой &НаСервере не выполнится на клиенте, и наоборот. Точка, поставленная в клиентском контексте на серверную процедуру, физически не может сработать в клиентском сеансе — смотрите раздел про серверную отладку.
Отладка серверного кода в клиент-серверном режиме
В клиент-серверном варианте работы серверный код выполняется на сервере 1С:Предприятия, и по умолчанию отладка на сервере может быть выключена. Это одна из самых частых причин «нерабочей» точки останова в процедурах с директивой &НаСервере, в модулях менеджеров и общих серверных модулях.
Разрешение отладки задаётся параметром запуска сервера 1С. Для службы агента сервера нужен ключ -debug в строке запуска (и при необходимости -debugServerAddr с адресом сервера отладки). После изменения параметров службу агента сервера необходимо перезапустить — без перезапуска ключ не применится.
"C:\Program Files\1cv8\<версия>\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\srvinfo" -debugЕсть нюанс с протоколом отладки: современные версии платформы по умолчанию используют отладку по HTTP, а в конфигураторе и на сервере протоколы должны совпадать. Если на сервере включён HTTP-протокол отладки, а конфигуратор настроен на TCP (или наоборот), предметы отладки не увидят друг друга. Проверьте соответствие в «Сервис → Параметры → Отладка» конфигуратора и в параметрах сервера.
Точка не работает в расширении или внешней обработке
Расширения конфигурации отлаживаются, но с условиями: расширение должно быть подключено к текущему сеансу, а его код — загружен в конфигуратор. Если вы изменили расширение и не обновили конфигурацию базы данных, отлаживается старая версия, и точки в новых строках не сработают или «уедут» на другие строки.
Признак рассинхронизации — точка останова подсвечивается как недостижимая или стоит на пустой строке, которой «нет» в исполняемом коде. Решение: обновите конфигурацию базы данных (F7) и перезапустите отладку. Если расширение подключено в безопасном режиме или с отключённой защитой от опасных действий — это на отладку не влияет, а вот отключённое расширение в сеансе отлаживаться не будет вовсе.
Внешние обработки и отчёты отлаживаются только если они открыты в том же сеансе, что подключён к отладчику, и файл обработки открыт в конфигураторе именно с того пути, из которого она запущена. Если вы правите копию файла в другом каталоге, точки в ней не сработают — отладчик сопоставляет код по источнику.
Фоновые задания, веб-клиент и другие особые случаи
Фоновые задания и регламентные операции
Код, выполняемый в фоновом задании, — это отдельный сеанс, который к отладчику не подключается автоматически. В настройках подключения нужно включить тип предмета отладки «Фоновое задание» и установить флажок автоматического подключения новых фоновых заданий. После этого при старте фонового задания оно появится в списке подключённых, и точки в его коде начнут срабатывать.
Веб-клиент и мобильный клиент
Для отладки веб-клиента в конфигураторе должен быть включён соответствующий тип предмета отладки, а сам веб-клиент запущен с параметром, разрешающим отладку. На практике проще перенести проверяемую логику в тонкий клиент, если она не завязана на специфику браузера: клиентский код формы в большинстве случаев ведёт себя одинаково.
HTTP-сервисы и веб-сервисы
Сеансы HTTP-сервисов короткоживущие: они создаются на время обращения и завершаются сразу после. Чтобы успеть их отладить, включите автоматическое подключение сеансов HTTP-сервисов в настройках отладки и поставьте точку заранее, до отправки запроса. Точка останова в обработчике сервиса сработает только при фактическом входящем запросе.
Как выбрать действие по симптому
Как проверить, что проблема решена
Надёжный способ убедиться, что отладка работает, — поставить контрольную точку в заведомо выполняемом месте: например, в обработчике «ПриОткрытии» формы, которую вы сейчас откроете. Если сеанс остановился — отладчик подключён корректно, и дальше можно точечно разбираться с конкретной процедурой.
Если контрольная точка сработала, а целевая — нет, причина в логике выполнения: условие не выполняется, обработчик не вызывается, код перекрыт расширением. Используйте «Отладка → Стек вызовов» после остановки, чтобы увидеть, каким путём пришло выполнение, и найдите место, где оно расходится с ожиданиями.
Когда точки останова недоступны в принципе (например, продуктивный сервер без права на перезапуск), используйте альтернативы: журнал регистрации с записью ключевых значений, вывод через Сообщить() на клиенте, технологический журнал на сервере. Это медленнее, но не требует включения отладки и не останавливает работу пользователей.
Как проверить результат
Сеанс останавливается, виден стек вызовов
Точка игнорируется — отладка не подключена
Точка отображается сплошным красным кружком
Точка пустая/серая — код не загружен или версия не совпадает
Сеанс виден с нужными типами (клиент, сервер)
Список пуст или нет сервера — проверяйте -debug и протокол
Точки совпадают с актуальными строками кода
Точки «съехали» — конфигурация БД не обновлена
Частые вопросы
Почему точка останова отображается пустым кружком?
Пустой (незакрашенный) кружок означает, что отладчик не может сопоставить точку с исполняемым кодом: либо конфигурация базы данных не обновлена после правки, либо модуль не загружен в текущем контексте. Обновите конфигурацию БД (F7), перезапустите отладку и проверьте, что строка не закомментирована и не отсечена директивой препроцессора.
Можно ли отлаживать код на продуктивном сервере?
Технически можно, но делать этого не стоит: включение отладки замедляет все сеансы, а остановка на точке блокирует выполнение серверного кода для пользователей. Безопасный путь — развернуть копию базы на тестовом сервере и воспроизвести проблему там. Если без продуктивной отладки не обойтись, используйте технологический журнал вместо точек останова.
Почему точка в модуле проведения документа не срабатывает?
Чаще всего потому, что проведение выполняется на сервере, а серверный контекст не подключён к отладчику, либо документ проводится фоновым заданием при отложенном проведении. Проверьте тип предметов отладки, включите отладку фоновых заданий и убедитесь, что вы проводите документ именно из подключённого сеанса.
Точка стоит в общем модуле, но отладчик её не видит. Что делать?
Проверьте директивы компиляции модуля: если модуль серверный, а отлаживаете вы клиентский сеанс без сервера, точка не сработает. Также убедитесь, что вызов функции реально происходит — поставьте точку на строку вызова в исходной процедуре и пройдите внутрь по F11 (шаг с заходом).
Срабатывает только первая точка, дальше отладка «зависает». В чём причина?
Это не зависание, а нормальное поведение: сеанс остановлен и ждёт команды. Нажмите F5 (продолжить), F10 (шаг через) или F11 (шаг в). Если после продолжения сеанс «висит» без остановок — следующие точки находятся в коде, который не выполняется, либо в другом контексте (сервер, фоновое задание).
Работает ли точка останова при отладке через HTTP?
Да, но конфигуратор и сервер должны использовать один и тот же протокол отладки. Если на сервере включён HTTP-протокол, а в конфигураторе выбран TCP (или наоборот), предметы отладки не подключатся. Проверьте соответствие настроек в «Сервис → Параметры → Отладка» и параметрах запуска сервера.
Что важно запомнить
Неработающая точка останова почти всегда означает одно из трёх: сеанс не подключён к отладчику, код выполняется в другом контексте (сервер, фоновое задание), либо строка с точкой не выполняется логикой программы. Проверяйте в этом порядке: подключение → контекст → достижимость строки, и не забывайте обновлять конфигурацию базы данных после правок.