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