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

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

Отладчик 1С: как работать с кодом пошагово

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

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

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

Работа с отладчиком сводится к четырём навыкам: включить режим отладки, поставить точку останова, управлять пошаговым выполнением и анализировать значения. Ниже каждый навык разобран с конкретными действиями и горячими клавишами.

Как включить режим отладки

Запуск отладки выполняется из конфигуратора: меню «Отладка → Начать отладку» или клавиша F5. Конфигуратор откроет сеанс 1С:Предприятия, и этот сеанс будет связан с отладчиком. Если предприятие уже запущено, можно подключиться к нему через «Отладка → Подключение» — в списке появятся доступные сеансы, выберите нужный и нажмите «Подключить».

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

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

Точки останова: установка и управление

Точка останова ставится кликом мыши по серой полосе слева от номера строки в модуле или клавишей F9 на выбранной строке. Красный кружок означает активную точку. Повторное нажатие F9 точку снимает. Убрать все точки разом можно через «Отладка → Отключить все точки останова».

Ставить точку можно только на исполняемые строки — на объявление переменной, комментарий или пустую строку она не встанет. Если кружок не появляется, проверьте, что курсор стоит на строке с оператором.

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

Когда цикл выполняется тысячи раз, а ошибка возникает на одной конкретной записи, обычная точка неудобна. Через «Отладка → Точка останова с условием» или контекстное меню точки задаётся условие, например Строка.Номенклатура = НужнаяНоменклатура. Остановка произойдёт только когда выражение истинно. Там же настраивается остановка по количеству прохождений точки.

Остановка по ошибке

Если программа падает с исключением, а где именно — непонятно, включите «Отладка → Остановка по ошибке». Отладчик прервёт выполнение в момент возникновения исключения, и стек вызовов покажет цепочку процедур, приведшую к ошибке. Это самый быстрый способ найти место сбоя в чужом коде.

Пошаговое выполнение кода

Когда выполнение остановилось на точке, строка подсвечивается, и дальше код идёт под вашим контролем. Основные команды:

  • F10 — Шаг через. Выполняет текущую строку, не заходя внутрь вызываемых процедур и функций. Используйте, когда вызов заведомо корректен.
  • F11 — Шаг в. Заходит внутрь вызываемой процедуры или функции. Нужен, когда подозреваете ошибку именно в вызываемом коде.
  • Shift+F11 — Шаг из. Довыполняет текущую процедуру и останавливается в вызвавшем её коде. Спасает, когда зашли слишком глубоко.
  • F5 — Продолжить. Выполнение идёт дальше до следующей точки останова или до конца.
  • Shift+F5 — Остановить. Прерывает отладку и завершает выполнение кода.

Практический приём: на длинной процедуре не шагайте с самого начала. Поставьте точку перед подозрительным фрагментом, нажмите F5, а дальше идите по F10/F11. Это экономит основную часть времени отладки.

Полезна и команда «Идти до курсора» (контекстное меню): поставьте курсор на нужную строку ниже, и код выполнится до неё без пошагового прохода. Удобно для выхода из длинных циклов.

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

Просмотр значений: табло, выражения, стек вызовов

Табло (Shift+F9) — окно, где вы сами перечисляете переменные и выражения, а отладчик показывает их текущие значения. Добавьте туда ключевые переменные перед циклом и наблюдайте, как они меняются на каждом шаге. Значения объектов (справочников, документов, таблиц значений) раскрываются деревом — можно посмотреть реквизиты и табличные части.

Вычислить выражение (Ctrl+F9) выполняет произвольное выражение в контексте остановленного кода. Можно не только прочитать значение, но и вызвать функцию, например проверить результат запроса с другими параметрами. Осторожно: выражение реально выполняется, и если в нём есть изменение данных, оно произойдёт.

Стек вызовов (Ctrl+Alt+C или через меню «Отладка») показывает цепочку процедур от точки входа до текущей строки. Двойной клик по уровню стека переносит просмотр в тот модуль — можно увидеть, с какими параметрами процедура была вызвана. Это незаменимо, когда ошибка в общем модуле, а вызывают его из десятка мест.

Локальные переменные текущей процедуры видны в окне «Локальные переменные» — их не нужно добавлять в табло вручную. Для быстрого взгляда достаточно навести курсор мыши на переменную в коде: значение появится во всплывающей подсказке.

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

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

Остановка на точке
Норма

Выполнение прервалось, строка подсвечена, переменные доступны

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

Код прошёл мимо — точка в неисполняемой ветке или отладка сервера не включена

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

В табло видны ожидаемые типы и данные

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

«Неопределено» там, где ожидалось значение — проверьте присвоение выше по коду

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

Ошибка не воспроизводится, результат операции корректен

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

Исправлено одно место, но ошибка всплывает в другом сценарии — проверьте все вызовы

Отладка в клиент-серверном режиме и фоновых заданиях

В клиент-серверной базе код делится на клиентский и серверный. Клиентская часть отлаживается без ограничений, серверная — только при запущенном с ключом -debug сервере. Признак проблемы: точки в клиентских модулях срабатывают, а в серверных — игнорируются. Решение — перезапуск службы агента сервера с параметром отладки на тестовом контуре.

Фоновые задания не подключаются к отладчику автоматически. В настройках отладки отметьте предмет «Фоновые задания», либо в момент запуска задания откройте «Отладка → Подключение» и подключитесь к появившемуся сеансу фонового задания. Для регламентных заданий удобно временно вызывать их код напрямую из обработки — тогда он выполняется в вашем сеансе и отлаживается как обычно.

Отладка HTTP-сервисов и веб-сервисов также требует подключения к их сеансам через список подключений. Сеанс появляется в момент обращения к сервису, поэтому сначала поставьте точку, затем отправьте запрос и быстро подключитесь.

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

Частые проблемы и FAQ

Большинство трудностей с отладчиком сводятся к трём причинам: не включён режим отладки на сервере, точка стоит в ветке кода, которая не выполняется, или сеанс не подключён к конфигуратору. Проверяйте их в первую очередь, прежде чем искать сложные объяснения.

Почему точка останова не срабатывает?

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

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

Редактировать текст модуля можно, но изменения не применятся к текущему выполнению. Чтобы проверить исправление, остановите отладку (Shift+F5) и запустите её заново — сеанс перезапустится с обновлённым кодом.

Как посмотреть содержимое таблицы значений или запроса?

Добавьте переменную в табло (Shift+F9) и раскройте её деревом — у таблицы значений видны строки и колонки. Для результата запроса удобно вычислить выражение Запрос.Выполнить().Выгрузить() и просмотреть полученную таблицу.

Как отладить код, который выполняется только у другого пользователя?

Подключитесь к его сеансу через «Отладка → Подключение», предварительно включив в настройках отладку нужных типов сеансов. Учтите, что остановка на точке «заморозит» сеанс пользователя — предупредите его или воспроизведите сценарий под его учётной записью на тестовой базе.

Чем отладчик лучше вывода сообщений через Сообщить()?

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

Работает ли отладка в мобильном клиенте или веб-клиенте?

Да, оба типа клиентов поддерживаются как предметы отладки. Веб-клиент и мобильный клиент подключаются через список подключений, если соответствующий тип сеанса включён в настройках отладки конфигуратора.

Итог

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

Отладка начинается с F5 и точки останова по F9. Шагайте F10/F11, значения смотрите в табло (Shift+F9) и через «Вычислить выражение» (Ctrl+F9), цепочку вызовов — в стеке. Для сервера нужен режим -debug, для фоновых заданий — отдельное подключение. Отлаживайтесь на копии базы, а не на рабочем контуре.