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

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

Точка останова в 1С: как использовать для отладки кода

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

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

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

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

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

Точка останова (breakpoint) — это метка на строке кода встроенного языка 1С. Когда отладчик доходит до такой строки, выполнение приостанавливается до исполнения самой строки, и разработчик получает полный доступ к текущему контексту: переменным, параметрам, стеку вызовов.

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

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

Откройте нужный модуль: модуль объекта, формы, общий модуль или модуль менеджера. Найдите строку, на которой выполнение должно остановиться, и нажмите F9 либо кликните по серой области слева от номера строки. Появится красный маркер — точка установлена. Повторное нажатие F9 снимает её.

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

Полезные горячие клавиши при установке:

  • F9 — поставить или снять точку останова на текущей строке;
  • Ctrl+Shift+F9 — снять все точки останова в конфигурации;
  • меню «Отладка — Точка останова» — альтернатива клавише F9.
Порядок действий
  1. 1
    Откройте нужный модуль в конфигураторе и найдите проблемный участок кода
  2. 2
    Поставьте точку останова клавишей F9 на исполняемой строке
  3. 3
    Запустите отладку через F5 или меню «Отладка — Начать отладку»
  4. 4
    В открывшемся пользовательском сеансе выполните действие, вызывающее этот код
  5. 5
    Дождитесь остановки на точке и проанализируйте значения переменных

Запуск отладки и подключение предметов отладки

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

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

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

Пошаговое выполнение кода после остановки

Когда выполнение остановилось на точке, строка подсвечивается, и дальше код выполняется только по вашей команде. Основные клавиши пошагового выполнения:

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

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

Просмотр значений переменных: табло, вычисление выражений, стек вызовов

Остановка на точке имеет смысл только если вы смотрите данные. Быстрый способ — навести курсор на переменную: появится всплывающая подсказка со значением. Для постоянного наблюдения выделите переменную и нажмите Shift+F9 («Вычислить выражение») — значение попадёт в табло (Отладка — Табло), где будет обновляться на каждом шаге.

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

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

Условные точки останова и остановка по ошибке

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

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

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

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

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

Почему точка останова не срабатывает: типичные причины

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

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

Типичные ошибки
01
Точка поставлена в конфигураторе, но конфигурация базы данных не обновлена — выполняется старый код без точки
02
Отладка серверного кода в клиент-серверном режиме без ключа -debug у агента сервера — серверные точки игнорируются
03
Проверка результата взглядом на переменную вместо табло — значение изменилось на следующем шаге, а причина потерялась
04
Отладка в рабочей базе с остановкой серверного кода — блокировка работы пользователей и риск испортить данные

Проверка результата после отладки

После того как причина ошибки найдена и код исправлен, не ограничивайтесь одним проходом отладчика. Снимите все точки останова (Ctrl+Shift+F9), обновите конфигурацию базы данных и повторите сценарий целиком в обычном режиме: убедитесь, что результат корректен и побочные данные не пострадали. Если ошибка была в расчёте или проведении, перепроведите затронутые документы на тестовой копии.

Итог

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

Точка останова ставится клавишей F9 на исполняемой строке, отладка запускается через F5, код проходится клавишами F10/F11, значения смотрятся в табло (Shift+F9). Для серверного кода нужен сервер в режиме отладки, а на рабочей базе отлаживаться нельзя.

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

Можно ли поставить точку останова в режиме «Предприятие» без конфигуратора?

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

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

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

Как отладить код, который выполняется в фоновом задании?

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

Чем отличается точка останова с условием от обычной?

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

Замедляет ли отладка работу системы?

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

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

Точки останова сохраняются в настройках конфигуратора и остаются после его перезапуска, пока вы не снимете их вручную (Ctrl+Shift+F9 снимает все). Однако при обновлении конфигурации с серьёзными изменениями модулей часть точек может «съехать» на другие строки — проверяйте их расположение после обновления.