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

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

Как установить точку останова в 1С

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

Точка останова — базовый инструмент отладки в 1С, который останавливает выполнение кода на заданной строке и позволяет посмотреть значения переменных, стек вызовов и состояние объектов. Без неё поиск ошибок в модуле документа или обработке превращается в перебор сообщений «Сообщить()», что медленно и ненадёжно.

Установить точку останова можно несколькими способами: кликом по левому полю редактора модуля, клавишей F9, через меню «Отладка». При этом важно понимать, где именно исполняется код — на клиенте или на сервере, — потому что от этого зависит, сработает точка или будет проигнорирована.

Ниже разобраны все практические сценарии: от простой установки точки до условных точек останова, отладки серверного кода, фоновых заданий и веб-клиента, а также типичные причины, почему отладчик «проскакивает» нужное место.

Что такое точка останова и когда она нужна

Точка останова (breakpoint) — это отметка на строке кода, при достижении которой платформа приостанавливает выполнение и передаёт управление конфигуратору. В момент останова можно открыть табло (Shift+F9), вычислить произвольное выражение, посмотреть стек вызовов и пошагово пройти код дальше.

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

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

Как поставить точку останова в конфигураторе

Откройте конфигуратор, найдите нужный объект (документ, справочник, общий модуль, обработка) и откройте его модуль. Прокрутите код до строки, на которой хотите остановиться. Установить точку можно тремя способами:

  • кликнуть левой кнопкой мыши по серой вертикальной полосе слева от номера строки;
  • поставить курсор на строку и нажать F9;
  • выбрать в меню «Отладка» пункт «Точка останова».

Признак успешной установки — красный кружок на поле слева от строки. Повторное нажатие F9 или клик по маркеру снимает точку. Чтобы убрать все точки разом, используйте сочетание Ctrl+Shift+F9 или пункт «Отключить все точки останова» в меню «Отладка».

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

Порядок действий
  1. 1
    Откройте модуль объекта в конфигураторе
  2. 2
    Поставьте курсор на исполняемую строку и нажмите F9
  3. 3
    Запустите отладку клавишей F5 и войдите в режим 1С:Предприятие
  4. 4
    Выполните действие, которое вызывает отлаживаемый код
  5. 5
    При останове изучите переменные через табло (Shift+F9) и продолжите выполнение (F5, F10, F11)

Условные точки останова и точки с условием срабатывания

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

Чтобы задать условие, кликните правой кнопкой по красному маркеру точки и выберите «Условие останова» (или используйте соответствующий пункт контекстного меню). В открывшемся окне введите выражение на встроенном языке, например Строка.Номенклатура = ИскомаяНоменклатура или Счетчик > 100. Отладчик остановится только когда выражение примет значение Истина.

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

Отладка серверного кода: почему точка не срабатывает

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

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

Для клиент-серверной базы нужно запустить сервер 1С с ключом отладки. Для службы агента сервера это параметр -debug в строке запуска; удобнее всего задать его через реестр в параметре ImagePath службы «Агент сервера 1С:Предприятия» или через оснастку, затем перезапустить службу. После этого в конфигураторе откройте «Отладка → Подключение» и убедитесь, что серверные предметы отладки видны и подключены.

Отладка фоновых заданий, веб-клиента и внешних соединений

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

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

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

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

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

Точка не срабатывает в клиентской процедуреПроверьте, что отладка запущена (F5) и действие действительно вызывает этот код
Точка не срабатывает в серверной процедуреПроверьте, запущен ли сервер с ключом -debug и подключён ли серверный предмет отладки
Код выполняется в фоновом заданииПодключите сеанс фонового задания через Отладка → Подключение
Работаете в веб-клиентеВключите автоматическое подключение веб-клиента в настройках отладки

Навигация после останова и анализ значений

Когда точка сработала, строка подсвечивается, и дальнейшее выполнение управляется клавишами: F10 — шаг через (выполнить строку, не заходя внутрь вызываемых процедур), F11 — шаг в (войти в вызов), Shift+F11 — выполнить до выхода из текущей процедуры, F5 — продолжить до следующей точки или конца.

Для просмотра значений используйте табло (Shift+F9): введите выражение — переменную, обращение к свойству, вызов функции — и конфигуратор покажет текущее значение. Выражение можно вычислить и немедленно через «Вычислить выражение» (Shift+F9 в некоторых версиях открывает именно это окно). Стек вызовов (Ctrl+Alt+C или через меню «Отладка») показывает цепочку процедур, приведшую к текущей точке, — это незаменимо, когда непонятно, кто вызвал обработчик.

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

Типичные ошибки
01
Точка поставлена на строку комментария или объявления — отладчик её игнорирует
02
Отлаживается серверный код без включённой отладки на сервере — точка визуально есть, но никогда не срабатывает
03
Открыт модуль из другой базы или копии конфигурации — редактируется не тот код, который выполняется
04
Фоновое задание завершается до подключения — нужно подключать сеанс заранее или добавить задержку
05
Условие точки останова ссылается на недоступную переменную — точка молча не срабатывает

Проверка результата и завершение отладки

После того как причина ошибки найдена, удалите точки останова: Ctrl+Shift+F9 снимает все точки во всех открытых модулях. Завершите сеанс отладки через «Отладка → Завершить» или просто закройте предприятие, запущенное из конфигуратора.

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

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

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

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

Красный кружок на поле слева от исполняемой строки

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

Маркер не появляется — строка неисполняемая или модуль открыт только для чтения

Срабатывание при отладке
Норма

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

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

Код выполняется мимо — проверить подключение предметов отладки

Состояние сервера после работ
Норма

Ключ -debug убран, служба перезапущена

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

Отладка осталась включённой на рабочем сервере

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

Можно ли поставить точку останова без конфигуратора?

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

Почему точка останова отображается, но код проходит мимо?

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

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

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

Сохраняются ли точки останова после закрытия конфигуратора?

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

Чем точка останова отличается от сообщения Сообщить()?

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

Опасна ли отладка на рабочей базе?

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

Итог

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

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