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

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

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

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

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

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

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

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

Откройте конфигуратор и перейдите в меню «Сервис → Параметры». На вкладке «Запуск 1С:Предприятия» найдите группу настроек отладки. В современных версиях платформы по умолчанию используется отладка по протоколу HTTP — именно этот вариант рекомендуется, устаревший протокол TCP оставлен для совместимости.

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

Проверьте также права: у пользователя, под которым запускается сеанс, должно быть право «Режим отладки» (роль с соответствующим правом). Без него конфигуратор не сможет подключиться к сеансу даже при корректно настроенном сервере.

Запуск сеанса под отладкой

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

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

Признак успешного подключения — в конфигураторе активны кнопки пошагового выполнения, а в меню «Отладка» доступны команды продолжения и останова. Если предметов отладки в списке нет, чаще всего причина в том, что сеанс запущен без разрешения отладки или сервер стартовал без ключа -debug.

Точки останова: как ставить и какие бывают

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

Бывают точки останова с условием: остановка произойдёт, только когда выражение истинно. Это удобно в циклах — например, остановиться только когда Номенклатура.Код = "000123", а не на каждой итерации из тысячи. Условие задаётся в свойствах точки (правый клик по точке → «Точка останова с условием»).

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

Порядок действий: от ошибки до её строки
  1. 1
    Включите остановку по ошибке: Отладка → Остановка по ошибке, отметьте остановку и на ошибках в Попытка...Исключение
  2. 2
    Запустите сеанс под отладкой (F5) или подключитесь к сеансу пользователя
  3. 3
    Воспроизведите действие, которое приводит к ошибке
  4. 4
    Когда отладчик остановится, изучите стек вызовов и значения переменных в табло
  5. 5
    Исправьте код, перезапустите отладку и проверьте, что ошибка исчезла

Пошаговое выполнение и стек вызовов

Когда выполнение остановлено, по коду можно двигаться пошагово. Клавиша F11 («Шагнуть в») заходит внутрь вызываемой процедуры или функции, F10 («Шагнуть через») выполняет текущую строку целиком и переходит к следующей, Shift+F11 («Шагнуть из») довыполняет текущую процедуру и останавливается в вызвавшем её коде. F5 продолжает выполнение до следующей точки останова.

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

Если нужно пропустить часть кода, можно переставить текущую точку выполнения: установите курсор на нужную строку и выберите «Отладка → Перейти к текущей строке» (Ctrl+F10 в ряде версий). Используйте это осторожно: пропуск присваиваний или открытия транзакций может привести к некорректному состоянию данных внутри сеанса отладки.

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

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

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

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

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

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

Код, выполняющийся на сервере (процедуры с директивой &НаСервере, обработчики проведения), отлаживается так же, но требует, чтобы отладка была разрешена на сервере — об этом сказано выше. В клиент-серверном варианте без ключа -debug у агента сервера серверные точки останова работать не будут, при этом клиентские будут — это частый источник путаницы.

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

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

Маршрут решения

Как выбрать действие

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

Типичные ошибки при работе с отладчиком

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

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

Третья ошибка — оставленные точки останова и включённая остановка по ошибке в рабочей базе. Сеанс пользователя «зависает» на невидимой ему остановке, а разработчик уже ушёл. После завершения работы снимайте все точки (Ctrl+Shift+F9) и отключайте остановку по ошибке.

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

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

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

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

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

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

Повторный запуск сценария после исправления
Норма

Сценарий выполняется до конца, результат совпадает с ожидаемым

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

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

Журнал регистрации после теста
Норма

Нет новых сообщений об ошибках по отлаживаемому коду

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

Ошибки продолжают записываться, возможно, из фоновых заданий

Точки останова после завершения работы
Норма

Все точки сняты, остановка по ошибке отключена

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

Активные точки остались в коде рабочей базы

Итог

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

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

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

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

Серая точка означает, что данный экземпляр кода недоступен текущим подключённым предметам отладки. Причины: модуль компилируется в другом контексте (проверьте директивы &НаСервере/&НаКлиенте), код выполняется в фоновом задании или сеансе другого пользователя, к которому вы не подключились, либо сервер запущен без разрешения отладки.

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

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

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

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

Что делать, если конфигуратор пишет, что отладка недоступна?

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

Как отладить код, который выполняется только при обмене данными или по расписанию?

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

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

Отлаживаемый сеанс выполняет ту версию кода, которая была загружена при его старте. Чтобы изменения вступили в силу, сохраните конфигурацию, обновите конфигурацию базы данных (F7) и перезапустите сеанс под отладкой.