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

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

Как пользоваться отладчиком в 1С

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

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

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

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

Как включить отладку и запустить сеанс

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

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

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

Точки останова: как остановить код в нужном месте

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

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

Кроме обычных точек есть точки останова с условием: выполнение остановится, только если условие истинно. Это незаменимо в циклах — например, остановиться на итерации, где СтрокаТаблицы.Количество = 0, вместо того чтобы вручную проходить сотни строк. Условие задаётся через контекстное меню точки останова.

  • F9 — поставить или снять точку останова на текущей строке;
  • Ctrl+Shift+F9 — снять все точки останова разом;
  • точка с условием — остановка только при выполнении заданного выражения;
  • отключённая точка (серая) — сохранена, но временно не срабатывает.

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

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

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

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

Полезный приём — «Идти до курсора». Если внутри длинного цикла нужно перепрыгнуть на строку после его завершения, поставьте курсор туда и нажмите Ctrl+F10 вместо того, чтобы ставить временную точку останова.

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

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

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

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

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

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

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

Отладка серверного кода, фоновых заданий и веб-сервисов

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

Фоновые задания

Код, запущенный через ФоновыеЗадания.Выполнить(), выполняется в отдельном сеансе и в отладчик не попадает автоматически. Чтобы его отладить, откройте «Отладка → Подключение», дождитесь появления сеанса фонового задания в списке и подключите его вручную. Точки останова в отлаживаемом методе нужно поставить заранее. Альтернатива на этапе разработки — временно вызвать метод напрямую, без фонового задания, и отладить как обычный код.

Веб-сервисы и HTTP-сервисы

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

Остановка по ошибке и полезные приёмы

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

Ещё несколько приёмов, которые экономят время:

  • Изменение значения на лету — в табло или окне вычисления можно присвоить переменной новое значение и продолжить выполнение, проверяя гипотезу без перезапуска;
  • Точка останова в модуле формы на событии — например, на ПередЗаписью, чтобы поймать момент сохранения объекта;
  • Отладка под другим пользователем — через параметры запуска, если ошибка зависит от прав или настроек конкретной учётной записи;
  • Сообщить() как дополнение — для журналируемых процессов, где остановка невозможна, вывод промежуточных значений остаётся рабочим вариантом, но не заменяет отладчик.
Типичные ошибки
01
Точка останова в серверном коде не срабатывает — сервер запущен без ключа -debug или серверный предмет отладки не подключён
02
Разработчик жмёт F10 на вызове проблемной функции и проскакивает её — нужно F11, чтобы зайти внутрь
03
Отладка изменяющего кода ведётся прямо в рабочей базе — риск незавершённых транзакций и блокировок
04
Точки останова расставлены в десятке мест сразу — выполнение останавливается постоянно, картина размывается; лучше 1–2 точки и пошаговый проход
05
Попытка отладить фоновое задание без ручного подключения его сеанса — код выполняется мимо отладчика

Как проверить, что проблема решена

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

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

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

Значения переменных на ключевых шагах
Норма

Соответствуют ожидаемым на каждом шаге расчёта

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

Значение корректно только в конце, но искажено в середине — дефект маскируется

Поведение на граничных данных
Норма

Пустые и нулевые данные обрабатываются без исключений

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

Ошибка всплывает на пустой таблице или незаполненном реквизите

Стек вызовов при повторном запуске
Норма

Код проходит ожидаемую ветку условий

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

Выполнение уходит в ветку обработки исключения — первопричина не устранена

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

Итог

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

Отладчик 1С запускается из конфигуратора клавишей F5, управление ведётся клавишами F9 (точка останова), F10/F11 (шаги) и Shift+F9 (табло). Для серверного кода нужен запуск сервера с отладкой, для фоновых заданий — ручное подключение сеанса. Останавливайтесь перед проблемным участком, смотрите значения в табло и стек вызовов, а изменяющий данные код отлаживайте только на копии базы.

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

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

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

Чем отличается табло от окна «Вычислить выражение»?

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

Можно ли отлаживать код в рабочей базе, где работают пользователи?

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

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

Запустите отладку через «Отладка → Параметры запуска», указав этого пользователя, и воспроизведите его действия. Так вы увидите, как на поведение влияют его права, функциональные опции и персональные настройки. Если ошибка связана с данными, которые видит только он — например, конкретным документом — остановитесь на входе в обработку и проверьте входные значения через табло.

Что делать, если отладчик останавливается, но значения переменных недоступны?

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