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