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