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

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

Почему точка останова в 1С становится серой и как это исправить

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

Разработчик ставит точку останова в конфигураторе 1С, запускает отладку — а вместо красного кружка видит серый значок, и выполнение не останавливается. Это одна из самых частых ситуаций при отладке прикладных решений, и у неё всегда есть конкретная техническая причина.

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

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

Что означает серая точка останова в конфигураторе

Красная точка останова — активный маркер: платформа нашла соответствующую строку в скомпилированном модуле и остановит на ней выполнение. Серая точка — «осиротевший» маркер: строка в редакторе есть, но исполняемого кода, к которому её можно привязать, в текущем сеансе отладки нет.

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

Такое поведение не является ошибкой платформы. Это индикатор, который подсказывает: искать проблему нужно не в самой строке кода, а в том, как и где этот код исполняется.

Причина 1: код выполняется в другом контексте (клиент или сервер)

Самая распространённая причина в управляемом приложении. Процедура с директивой &НаСервере исполняется на сервере 1С, а отладчик по умолчанию часто подключается только к клиентскому процессу. Точка в серверной процедуре при этом отображается серым.

Обратная ситуация встречается реже, но тоже возможна: код с директивой &НаКлиенте не остановится, если отладчик подключён только к серверному контексту.

Как определить контекст процедуры

Посмотрите на директиву компиляции перед объявлением процедуры: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Для общих модулей контекст задаётся флажками в свойствах модуля: «Клиент (управляемое приложение)», «Сервер», «Внешнее соединение» и другие.

Если общий модуль имеет только флажок «Сервер», а отладка сервера не настроена — все точки в нём будут серыми, даже если модуль точно вызывается.

Точка серая сразу при установкеМодуль не скомпилирован в этом контексте

Директиву компиляции и флажки общего модуля

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

Стек вызовов и предметы отладки

Серые точки только в серверных модуляхНе настроена отладка сервера

Параметр -debug у агента сервера 1С

Серые точки в фоновом заданииФоновое задание — отдельный сеанс

Подключение предметов отладки в конфигураторе

Причина 2: отладка на сервере не включена

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

Для Windows служба агента сервера запускается с параметром -debug в строке запуска. В Linux параметр отладки указывается при запуске процесса агента. После изменения параметров службу необходимо перезапустить — это важно учитывать, если сервер рабочий и на нём работают пользователи.

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

Причина 3: отладка запрещена в настройках информационной базы

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

Дополнительно проверьте настройки самого конфигуратора: меню «Сервис» → «Параметры» → закладка отладки. Там задаётся используемый протокол отладки (по TCP или через сервер) и режим подключения. При несовпадении протокола с настройками сервера подключение к серверным предметам отладки не установится.

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

Причина 4: код выполняется в другом сеансе или процессе

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

Откройте «Отладка» → «Подключение» и посмотрите список доступных предметов отладки. Нужный сеанс фонового задания может появляться там на короткое время — для длинных операций проще включить автоматическое подключение новых предметов отладки в настройках.

Для отладки регламентных заданий удобно временно запускать ту же процедуру интерактивно из внешней обработки — так код исполнится в вашем сеансе, и точки заработают без дополнительной настройки.

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

Как выбрать действие

Точка серая в процедуре &НаСервереПроверьте режим запуска сервера и разрешение отладки в кластере
Серые точки только в коде фонового заданияПодключите сеанс фонового задания через Отладка → Подключение
Точки серые во всём общем модулеПроверьте флажки контекста в свойствах модуля
Точка красная, но выполнение не останавливаетсяУбедитесь, что код вообще вызывается — поставьте точку на вызывающую строку
Все точки серые после обновления конфигурацииПерезапустите сеанс отладки, чтобы код перекомпилировался

Причина 5: модуль изменён, а сеанс не перезапущен

Если вы отредактировали модуль после запуска отладки, исполняемый код в памяти сеанса не совпадает с текстом в редакторе. Точки на изменённых строках становятся серыми или «съезжают» на другие строки.

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

Похожая ситуация возникает при работе с расширениями конфигурации: если расширение не применено к базе или сеанс запущен без него, точки в модулях расширения будут серыми.

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

После каждого изменения настроек выполняйте контрольную проверку: поставьте точку останова на первой строке заведомо вызываемой процедуры и выполните действие в пользовательском режиме. Если точка стала красной и выполнение остановилось — привязка восстановлена.

Если точка красная, но остановки нет, проблема уже не в отображении, а в логике: код не вызывается, условие не выполняется или вызывается другой экземпляр метода (например, переопределённый в расширении).

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

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

Цвет точки после перезапуска отладки
Норма

Красная точка на исполняемой строке

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

Серая точка — контекст или отладка сервера не настроены

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

Видны и клиентский, и серверный сеансы

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

Присутствует только клиентский сеанс

Остановка на точке
Норма

Выполнение прерывается, доступны переменные

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

Код проходит мимо — проверяйте логику вызова

Типичные ошибки
01
Искать ошибку в коде, когда точка серая из-за неподключённого серверного контекста — теряется время на ненужный рефакторинг
02
Забыть перезапустить службу сервера после добавления параметра -debug — настройка не применяется
03
Ставить точку в процедуре регламентного задания и ждать остановки без подключения сеанса фонового задания
04
Редактировать модуль во время сеанса отладки и не перезапускать его — точки съезжают и вводят в заблуждение

Частые вопросы о серых точках останова

Почему точка серая только в одном общем модуле, а в остальных работает?

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

Точка останова серая в файловой базе — в чём причина?

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

Можно ли отлаживать код на рабочем сервере без остановки работы пользователей?

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

Почему точка красная, но отладчик на ней не останавливается?

Значит, привязка есть, но строка не исполняется: условие выше по коду не выполняется, процедура не вызывается, или выполняется другая версия метода — например, из расширения конфигурации. Поставьте точку на вызывающую строку и пройдите по шагам.

Влияет ли режим совместимости конфигурации на работу точек останова?

Напрямую — нет. Режим совместимости влияет на доступность механизмов платформы и поведение кода, но механизм отладки работает одинаково. Однако косвенно влияние возможно: например, в режиме совместимости со старыми версиями может использоваться обычное приложение, где контексты и настройки отличаются.

Что делать, если серые точки появились после обновления платформы?

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

Итог

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

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