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