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