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