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