Разработка и Конфигурация · 10 мин
Точка останова в 1С: как использовать для отладки кода
Как поставить точку останова в 1С, запустить отладку, пошагово выполнить код, посмотреть значения переменных и найти ошибку. Практическая инструкция для разработчика.
Точка останова — основной инструмент отладки в конфигураторе 1С. Она останавливает выполнение программы на заданной строке кода, позволяя посмотреть значения переменных, пройти код по шагам и понять, где именно логика расходится с ожиданиями. Без точек останова поиск ошибок превращается в перебор догадок и вывод сообщений, что занимает в разы больше времени.
Механизм работает одинаково в большинстве конфигураций: вы открываете модуль в конфигураторе, ставите маркер на нужной строке, запускаете сеанс в режиме отладки и воспроизводите проблемную ситуацию в пользовательском окне. Как только выполнение доходит до отмеченной строки, управление передаётся конфигуратору.
Ниже разобран практический порядок работы: установка точек, подключение предметов отладки, пошаговое выполнение, просмотр значений и типичные ошибки, из-за которых отладка «не срабатывает».
Что такое точка останова и когда она нужна
Точка останова (breakpoint) — это метка на строке кода встроенного языка 1С. Когда отладчик доходит до такой строки, выполнение приостанавливается до исполнения самой строки, и разработчик получает полный доступ к текущему контексту: переменным, параметрам, стеку вызовов.
Точки останова оправданы, когда нужно понять, почему процедура возвращает неожиданный результат, почему условие не срабатывает, какие данные приходят в обработчик события или в каком порядке выполняются вызовы. Для одноразовой проверки простого значения иногда быстрее использовать Сообщить(), но как только логика сложнее двух-трёх строк, отладчик эффективнее.
Как поставить точку останова в конфигураторе
Откройте нужный модуль: модуль объекта, формы, общий модуль или модуль менеджера. Найдите строку, на которой выполнение должно остановиться, и нажмите F9 либо кликните по серой области слева от номера строки. Появится красный маркер — точка установлена. Повторное нажатие F9 снимает её.
Ставить точку можно только на исполняемые строки: операторы, вызовы процедур, обращения к переменным. На строках с комментариями, пустых строках и заголовках процедур точка не установится. Если маркер не появляется — проверьте, что выбранная строка содержит исполняемый код.
Полезные горячие клавиши при установке:
- F9 — поставить или снять точку останова на текущей строке;
- Ctrl+Shift+F9 — снять все точки останова в конфигурации;
- меню «Отладка — Точка останова» — альтернатива клавише F9.
- 1Откройте нужный модуль в конфигураторе и найдите проблемный участок кода
- 2Поставьте точку останова клавишей F9 на исполняемой строке
- 3Запустите отладку через F5 или меню «Отладка — Начать отладку»
- 4В открывшемся пользовательском сеансе выполните действие, вызывающее этот код
- 5Дождитесь остановки на точке и проанализируйте значения переменных
Запуск отладки и подключение предметов отладки
Установленная точка сама по себе ничего не делает — нужен запущенный сеанс в режиме отладки. Нажмите F5 или выберите «Отладка — Начать отладку»: конфигуратор запустит клиентское приложение, подключённое к отладчику. Если сеанс уже запущен без отладки, используйте «Отладка — Подключение» и выберите нужный предмет отладки из списка.
Важный нюанс: в клиент-серверном режиме серверный код выполняется на сервере, и его отладка должна быть разрешена. Если точки в серверных процедурах игнорируются, проверьте, что сервер 1С запущен с ключом отладки (для агента сервера это параметр -debug), а в настройках отладки конфигуратора включён поиск предметов отладки на сервере. В файловом режиме такой проблемы нет — весь код отлаживается в одном процессе.
Также проверьте настройку «Отладка — Настройка — Отладка по протоколу»: в современных версиях платформы используется протокол HTTP, и при смене версии платформы иногда требуется перезапуск сервера с корректными параметрами отладки.
Пошаговое выполнение кода после остановки
Когда выполнение остановилось на точке, строка подсвечивается, и дальше код выполняется только по вашей команде. Основные клавиши пошагового выполнения:
- F11 — шаг с заходом: выполняет текущую строку, а если это вызов процедуры — заходит внутрь неё;
- F10 — шаг через: выполняет строку целиком, не заходя в вызываемые процедуры;
- Shift+F11 — шаг наружу: выполняет текущую процедуру до конца и останавливается в вызвавшем её коде;
- F5 — продолжить выполнение до следующей точки останова или до конца;
- Shift+F5 — остановить отладку полностью.
Типичный приём: на входе в подозрительный участок идите по F10, а на конкретной функции, которая возвращает неверное значение, нажмите F11, чтобы провалиться внутрь. Если случайно зашли слишком глубоко — Shift+F11 вернёт вас на уровень выше без потери контекста.
Просмотр значений переменных: табло, вычисление выражений, стек вызовов
Остановка на точке имеет смысл только если вы смотрите данные. Быстрый способ — навести курсор на переменную: появится всплывающая подсказка со значением. Для постоянного наблюдения выделите переменную и нажмите Shift+F9 («Вычислить выражение») — значение попадёт в табло (Отладка — Табло), где будет обновляться на каждом шаге.
В табло можно вписывать не только имена переменных, но и произвольные выражения встроенного языка: ТаблицаТоваров.Количество(), Запрос.Выполнить().Выгрузить(), обращения к свойствам объектов. Это позволяет проверять гипотезы прямо во время остановки, не меняя код.
Стек вызовов (Отладка — Стек вызовов) показывает цепочку процедур, которая привела к текущей строке. Это незаменимо, когда один и тот же общий модуль вызывается из разных мест и нужно понять, откуда пришёл конкретный вызов. Клик по уровню стека переключает контекст просмотра переменных.
Условные точки останова и остановка по ошибке
Если код выполняется в цикле тысячи раз, а проблема возникает на одном конкретном элементе, обычная точка неудобна. Используйте точку останова с условием: правый клик по маркеру — «Точка останова с условием» — и задайте выражение, например Строка.Номенклатура = ИскомаяНоменклатура. Остановка произойдёт только когда условие истинно.
Отдельный полезный режим — «Остановка по ошибке» в настройках отладки. Когда он включён, выполнение прерывается в момент возникновения исключения, даже если точек нет. Это позволяет увидеть состояние данных именно в момент сбоя, а не после него, когда контекст уже потерян.
Как выбрать действие
Почему точка останова не срабатывает: типичные причины
Самая частая ситуация: точка стоит, отладка запущена, но остановки нет. Причины почти всегда из короткого списка. Во-первых, код просто не выполняется — проверьте, что действие пользователя действительно вызывает эту процедуру (возможно, срабатывает другой обработчик или условие отсекает вызов). Во-вторых, сеанс не подключён к отладчику — убедитесь, что клиент запущен через F5, а не отдельно.
В-третьих, конфигурация базы данных отличается от конфигурации, открытой в конфигураторе: вы поставили точку в новой версии модуля, но база работает на старой. Обновите конфигурацию базы данных (F7). В-четвёртых, для серверного кода в клиент-серверном варианте сервер не запущен в режиме отладки.
Проверка результата после отладки
После того как причина ошибки найдена и код исправлен, не ограничивайтесь одним проходом отладчика. Снимите все точки останова (Ctrl+Shift+F9), обновите конфигурацию базы данных и повторите сценарий целиком в обычном режиме: убедитесь, что результат корректен и побочные данные не пострадали. Если ошибка была в расчёте или проведении, перепроведите затронутые документы на тестовой копии.
Что важно запомнить
Точка останова ставится клавишей F9 на исполняемой строке, отладка запускается через F5, код проходится клавишами F10/F11, значения смотрятся в табло (Shift+F9). Для серверного кода нужен сервер в режиме отладки, а на рабочей базе отлаживаться нельзя.
Частые вопросы
Можно ли поставить точку останова в режиме «Предприятие» без конфигуратора?
Нет. Точки останова устанавливаются только в конфигураторе, где доступен исходный код модулей. Из режима «Предприятие» можно лишь подключиться к уже запущенной отладке через внешний отладчик, но сама установка точек всегда выполняется в конфигураторе.
Почему точка останова отображается с вопросительным знаком или неактивна?
Такой маркер означает, что отладчик не может связать точку с исполняемым кодом: строка неисполняемая, модуль не загружен в текущем контексте или конфигурация базы данных не совпадает с открытой в конфигураторе. Обновите конфигурацию базы данных и проверьте, что код реально достижим в данном сеансе.
Как отладить код, который выполняется в фоновом задании?
Через «Отладка — Подключение»: в списке предметов отладки появятся сеансы фоновых заданий, если отладка на сервере разрешена. Выберите нужный сеанс и подключитесь — точки в модулях, выполняемых фоновым заданием, начнут срабатывать. В файловом режиме фоновые задания также доступны в списке подключения.
Чем отличается точка останова с условием от обычной?
Обычная точка останавливает выполнение при каждом прохождении строки. Точка с условием срабатывает только когда заданное выражение истинно — это экономит время в циклах и обработчиках, которые вызываются многократно, а проблема проявляется лишь при определённых данных.
Замедляет ли отладка работу системы?
Да, заметно: подключённый отладчик добавляет накладные расходы на каждую строку кода, а остановка на точке блокирует выполнение до команды разработчика. Поэтому отладку используют на тестовых базах, а в продуктиве применяют только в крайнем случае и на минимальное время.
Можно ли сохранить набор точек останова между сеансами работы?
Точки останова сохраняются в настройках конфигуратора и остаются после его перезапуска, пока вы не снимете их вручную (Ctrl+Shift+F9 снимает все). Однако при обновлении конфигурации с серьёзными изменениями модулей часть точек может «съехать» на другие строки — проверяйте их расположение после обновления.