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

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

Как пользоваться точкой останова в 1С

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

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

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

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

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

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

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

Подготовка: включение отладки и права

Прежде чем ставить точки, убедитесь, что отладка технически возможна. У пользователя, под которым запускается сеанс, должно быть установлено право «Отладка» (назначается в свойствах роли или пользователя в конфигураторе). Для файловой базы этого обычно достаточно. Для клиент-серверной базы дополнительно требуется, чтобы сервер 1С был запущен в режиме отладки — это задается параметром запуска агента сервера (ключ -debug).

Проверить готовность можно прямо в конфигураторе: меню «Отладка» → «Начать отладку» (или клавиша F5). Если отладка недоступна, платформа выдаст сообщение об ошибке подключения. В клиент-серверном варианте также проверьте пункт «Отладка» → «Подключение»: там должны отображаться доступные предметы отладки — сеансы клиентских приложений и серверные контексты.

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

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

Откройте нужный модуль в конфигураторе: модуль объекта, модуль формы, общий модуль или модуль менеджера. Найдите строку, на которой хотите остановить выполнение. Установить точку можно тремя способами: кликнуть мышью по серой полосе слева от номера строки; поставить курсор на строку и нажать F9; использовать команду меню «Отладка» → «Точка останова». Повторное нажатие F9 или клик по кружку снимает точку.

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

Все установленные точки собраны в окне «Отладка» → «Точки останова» (комбинация Alt+F9). Здесь их можно массово отключать, не удаляя, что удобно, когда разметка нужна позже. Команда «Отключить все точки останова» пригодится, когда отладка закончена, но чистить расстановку вручную не хочется.

Порядок действий
  1. 1
    Откройте в конфигураторе модуль с подозрительным кодом
  2. 2
    Установите точку останова клавишей F9 на нужной строке
  3. 3
    Нажмите F5 — запустится клиентское приложение в режиме отладки
  4. 4
    Выполните в приложении действие, вызывающее отлаживаемый код (проведите документ, нажмите кнопку)
  5. 5
    Когда выполнение остановится на точке, изучите значения переменных
  6. 6
    Пройдите код по шагам клавишами F10/F11 или продолжите выполнение клавишей F5

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

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

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

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

Просмотр значений и пошаговое выполнение

Когда выполнение остановлено, главный инструмент — табло (окно «Отладка» → «Табло» или Ctrl+Alt+W). В него перетаскивают или вводят имена переменных и произвольные выражения, например СтрокаТаблицы.Сумма * 1.2 или Запрос.Выполнить().Выгрузить().Количество(). Табло вычисляет выражения в текущем контексте и показывает тип и значение.

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

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

Если внутри цикла на сотни строк стоит точка, не проходите каждую итерацию вручную. Поставьте на строку условную точку останова с выражением вроде НомерСтроки = 157 или сделайте точку неактивной, а рядом поставьте вторую — после цикла. Это экономит основную массу времени отладки.
ПЗ
Практическое замечание

Условные точки останова и стек вызовов

Обычная точка останавливает выполнение при каждом прохождении строки. Условная — только когда заданное выражение истинно. Чтобы задать условие, кликните правой кнопкой по установленной точке, выберите «Условие остановки» и введите выражение на встроенном языке, например ТекущийКонтрагент = Справочники.Контрагенты.НайтиПоКоду("000000042") или Сумма > 1000000. Точка с условием отображается с дополнительным значком.

Условные точки незаменимы при отладке циклов, обработок больших массивов данных и ситуаций, когда ошибка возникает только на конкретном значении. Вместо сотен нажатий F5 вы получаете остановку ровно в проблемной итерации.

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

Какой способ шага выбрать

F10 — шаг через

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

F11 — шаг в

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

Shift+F11 — шаг из

Используйте, чтобы быстро выйти из процедуры, в которую зашли случайно или которая уже проверена.

F5 — продолжить

Пропускает выполнение до следующей точки. Удобно в связке с условными точками внутри циклов.

Типичные ошибки при работе с точками останова

Самая распространенная ошибка — отладка не того сеанса. Запущено два клиентских приложения, действие выполняется в одном, а отладчик подключен к другому. Проверяйте список подключенных предметов отладки и запускайте приложение именно через F5 из конфигуратора.

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

Третья группа ошибок — изменение данных во время остановки. В табло можно не только смотреть, но и менять значения переменных. Это мощный прием для проверки гипотез, но после продолжения выполнения программа пойдет с измененными данными, что искажает картину и может записать некорректные данные в базу. Меняйте значения осознанно и только в тестовой базе.

Типичные ошибки
01
Точка стоит на неисполняемой строке (комментарий, объявление) — выполнение никогда не остановится
02
Не подключены серверные предметы отладки — точки в серверных процедурах игнорируются
03
Отладка в продуктивной базе — остановленная транзакция блокирует работу других пользователей
04
Изменение значений переменных в табло без понимания последствий — в базу записываются искаженные данные
05
Проход цикла из тысячи итераций вручную вместо использования условной точки — потеря времени
06
Забытые активные точки после отладки — неожиданные остановки при следующем сеансе отладки

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

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

После исправления отключите или удалите все точки останова через окно Alt+F9, завершите сеанс отладки (Shift+F5) и закройте отладочный экземпляр приложения. Затем проверьте исправление в обычном пользовательском режиме без отладчика: убедитесь, что документ проводится правильно, обработка выдает корректный результат и побочные сценарии не сломались.

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

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

Срабатывание точки
Норма

При выполнении действия конфигуратор получает фокус, строка подсвечена желтой стрелкой

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

Действие выполнено, остановки нет — проверяйте контекст исполнения и подключение отладки

Значения переменных
Норма

Табло показывает ожидаемые типы и значения на каждом шаге

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

Значение неопределено, имеет неожиданный тип или меняется не на той строке

Поведение после исправления
Норма

Сценарий в обычном режиме дает корректный результат без отладчика

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

Результат правильный только при остановке на точках — значит, причина не найдена

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

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

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

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

Нет, точки ставятся только на операторы встроенного языка. Чтобы отладить запрос, поставьте точку на строку после Запрос.Выполнить() и проанализируйте результат через табло, а сам текст запроса проверяйте в консоли запросов.

Сохраняются ли точки останова между сеансами конфигуратора?

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

Влияют ли точки останова на работу пользователей базы?

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

Чем отличается «Остановка по ошибке» от обычной точки останова?

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

Можно ли изменить значение переменной прямо во время остановки?

Да, в окне табло или «Вычислить выражение» можно присвоить переменной новое значение, и выполнение продолжится уже с ним. Это полезно для проверки гипотез, но делать так следует только в тестовой базе, понимая, что данные в ней могут быть искажены.

Итог

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

Точка останова ставится клавишей F9 на исполняемой строке, отладка запускается по F5, движение по коду — клавишами F10, F11 и Shift+F11. Значения смотрят в табло, цепочку вызовов — в стеке. Для циклов используйте условные точки, а все эксперименты проводите только на копии базы.