Работа с отладчиком в Конфигураторе 1С 8.3
Содержание
Отладчик встроен в Конфигуратор: ставите точку останова на строку кода (клавиша F9), запускаете отладку (F5), и выполнение замирает на этой строке — дальше идёте по шагам клавишами F11 и F10, а значения переменных смотрите в табло. Этого набора хватает, чтобы разобрать 90% ситуаций «почему процедура делает не то».
Ниже — как подключиться к нужному сеансу, чем условная точка останова лучше обычной, как поймать место, где выскакивает ошибка, без единого брейкпоинта, и как отладить код, работающий на сервере или в фоновом задании.
Всё описано для платформы 8.3 с интерфейсом «Такси», режим работы — и файловый, и клиент-серверный.
С чего начать: включить отладку и подключиться к сеансу
В файловой базе отладка работает сразу. Откройте модуль в Конфигураторе, встаньте на строку и нажмите F5 (меню Отладка → Начать отладку) — запустится 1С:Предприятие, уже готовое к остановке на ваших точках.
Если отладка не включается, проверьте настройки запуска: Сервис → Параметры → Запуск 1С:Предприятия → Отладка. Там выбирается протокол (TCP/IP или HTTP) и ставится разрешение отладки при запуске. В современных релизах платформы по умолчанию используется протокол HTTP.
Второй способ подключиться — не стартовать сеанс из Конфигуратора, а присоединиться к уже запущенному. Для этого в самом 1С:Предприятии должна быть включена отладка: Сервис → Параметры → Система → Отладка в текущем сеансе разрешена (в клиентском приложении). После этого в Конфигураторе откройте Отладка → Подключение — появится список предметов отладки.
Предмет отладки — это конкретный запущенный процесс: тонкий клиент, толстый клиент, сервер, веб-клиент, фоновое задание, внешнее соединение. Выделяете нужный и жмёте «Подключить». Пока не подключились к предмету, точки останова в его коде не сработают.
Чтобы не ловить фоновые задания вручную, включите Отладка → Подключение → Автоматическое подключение и отметьте типы предметов — Конфигуратор сам присоединится к каждому новому процессу нужного вида.
Точки останова: обычные, условные и остановка по ошибке
Точка останова — это метка на строке, где выполнение должно замереть. Поставить и снять — клавиша F9 или двойной щелчок на левом поле редактора модуля. Снять сразу все — через меню Отладка → Удалить все точки останова.
Три вида остановки закрывают разные задачи:
- 🔴 Обычная точка останова. Код замирает каждый раз, когда доходит до строки. Подходит, когда процедура вызывается один-два раза.
- 🟡 Условная точка останова. Остановка срабатывает, только если истинно заданное выражение. Незаменима внутри цикла на тысячу итераций, когда баг вылезает на конкретном элементе. Поставьте обычную точку, затем правой кнопкой по ней → «Точка останова с условием» и впишите логическое выражение, например
Номенклатура.Код = "00-001234". - ⚫ Остановка по ошибке. Включается в меню
Отладка → Остановка по ошибке. Код останавливается ровно там, где выбрасывается исключение, — брейкпоинты расставлять не нужно. Можно сузить до конкретного текста ошибки, чтобы не ловить все подряд.
Остановка по ошибке — главный приём, когда вы видите окно «Произошла исключительная ситуация», но не понимаете, в какой строке. Включили, повторили действие — отладчик сам встал на проблемной строке.
Условие в точке останова вычисляется на каждом проходе строки. Если выражение тяжёлое (обращение к базе, запрос), отладка заметно замедлится. Пишите в условии только лёгкие проверки по уже полученным переменным.
Пошаговое выполнение: F11, F10 и продолжение
Когда код встал на точке останова, двигаться дальше можно по-разному. Разница — как отладчик ведёт себя на строке с вызовом процедуры или функции:
| Команда | Клавиша | Что делает |
|---|---|---|
| Шагнуть в | F11 | Заходит внутрь вызванной процедуры/функции |
| Шагнуть через | F10 | Выполняет вызов целиком, не заходя внутрь |
| Шагнуть из | Shift+F11 | Доигрывает текущую процедуру до конца и возвращается в вызвавшую |
| Продолжить | F5 | Бежит дальше до следующей точки останова |
Логика простая. Если строка вас не интересует (типовая функция платформы, проверенный вызов) — F10, перешагнули. Если подозреваете, что баг внутри вашей процедуры, — F11, провалились в неё. Залезли по ошибке в чужой длинный код — Shift+F11, выскочили обратно.
Жёлтая стрелка на левом поле модуля показывает текущую строку — ту, что выполнится следующей. Она ещё не выполнена: если на ней присваивание, значение переменной в табло пока старое.
Типичный разбор выглядит так. Код встал на точке в обработчике проведения. Вы жмёте F10, перешагивая вызовы типовых функций, наблюдаете в табло, как заполняется таблица движений. Доходите до строки, где сумма вдруг обнуляется, — здесь F11, провалились внутрь функции расчёта, и на следующих шагах видно, что делитель оказался нулём. Весь путь — десяток нажатий, без единой правки кода «вслепую».
Чтобы не шагать до нужного места десятком нажатий, поставьте временную точку останова на целевую строку и нажмите F5 — код добежит до неё одним прыжком.
Отладить можно не только модули конфигурации. Внешние обработки и внешние отчёты отлаживаются так же: откройте файл обработки в Конфигураторе через Файл → Открыть, поставьте точки останова в её модуле, а затем запустите эту обработку в уже отлаживаемом сеансе 1С:Предприятия. Отладчик остановится на строках обработки наравне с кодом основной конфигурации.
Табло и «Вычислить выражение»: смотрим значения переменных
Главный вопрос при отладке — что сейчас лежит в переменной. Три инструмента:
- Всплывающая подсказка. Наведите курсор на имя переменной в остановленном коде — платформа покажет её текущее значение. Самый быстрый способ для простых типов.
- Табло. Откройте
Отладка → Табло. Это окно, куда вы перетаскиваете или вписываете интересующие переменные и выражения — их значения обновляются на каждом шаге. Удобно держать под наблюдением 5–10 величин разом. - Вычислить выражение (
Shift+F9). Отдельное окно, где можно набрать любое выражение на встроенном языке и получить результат в текущем контексте:СуммаДокумента * 1.2,Массив.Количество(), обращение к реквизиту объекта.
Для составных значений (структуры, таблицы значений, выборки) и в табло, и в «Вычислить выражение» есть разворачивание по «плюсику»: видно каждую колонку, каждую строку, каждый элемент коллекции.
Табло помнит выражения между сеансами отладки — один раз настроили набор наблюдаемых переменных, и он остаётся.
Стек вызовов: откуда код пришёл в эту процедуру
Остановились в процедуре и не понимаете, кто её вызвал и с какими данными? Откройте Отладка → Стек вызовов. Это список всех вложенных вызовов снизу вверх: самая нижняя строка — точка, где вы стоите, выше — процедура, которая её вызвала, ещё выше — та, что вызвала первую.
Двойной щелчок по любой строке стека переносит вас в её контекст: курсор прыгает на нужную строку модуля, а в табло значения переменных меняются на те, что были в этой процедуре. Так вы проходите всю цепочку вызовов и находите, на каком уровне в данные закралась ошибка.
Стек особенно выручает в типовых конфигурациях, где событие документа обрастает десятком вызовов подписок и общих модулей: по стеку видно полный путь от нажатия кнопки до строки, которая упала.
Частая связка — стек плюс остановка по ошибке. Исключение остановило код на нижней строке стека, вы поднимаетесь на уровень выше и видите, что в вызывающую процедуру уже пришёл пустой параметр. Значит, проверять нужно не место падения, а то, кто передал туда некорректные данные. Без стека эту цепочку пришлось бы собирать логами и записью в журнал регистрации.
Отладка кода на сервере и в фоновых заданиях
В клиент-серверной базе часть кода выполняется на сервере (процедуры с директивой &НаСервере, регламентные операции, проведение). Чтобы до него добраться, отладка должна быть разрешена на стороне сервера, а Конфигуратор — подключён к серверному предмету отладки.
Порядок действий для клиент-серверной базы:
- Убедитесь, что сервер запущен с разрешённой отладкой (параметр задаётся при настройке службы агента сервера или в параметрах кластера — уточните у администратора сервера, если доступа к консоли нет).
- В Конфигураторе выберите тот же протокол отладки, что настроен на сервере (
Сервис → Параметры → Запуск → Отладка). - Откройте
Отладка → Подключениеи присоедините серверный предмет отладки.
При работе по протоколу HTTP обмен Конфигуратора с отлаживаемыми процессами идёт через отдельный компонент — сервер отладки. В файловом режиме он поднимается автоматически вместе с сеансом. В клиент-серверном его запускают на стороне сервера 1С, и адрес этого сервера отладки указывается в настройках подключения Конфигуратора. Если адрес или протокол не совпадают, список предметов отладки останется пустым.
Фоновые и регламентные задания — отдельные серверные сеансы, которые появляются и исчезают сами. Ловить их обычным подключением неудобно, поэтому включите автоматическое подключение к предметам типа «Фоновое задание» — Конфигуратор присоединится к заданию в момент старта и остановится на вашей точке.
Отладка на рабочем сервере тормозит сеансы всех пользователей, пока код стоит на точке останова: заблокированные данные остаются захваченными. На продуктивной базе отлаживайте только в согласованное окно, а лучше — на копии.
Замер производительности: находим медленные строки
Отладчик умеет не только ловить ошибки, но и показывать, где код тормозит. Включите Отладка → Замер производительности, выполните нужное действие в 1С:Предприятии, затем остановите замер. Платформа покажет таблицу: сколько раз выполнилась каждая строка и сколько суммарно заняла.
Сортируете по времени — и сразу видно узкое место. Чаще всего это запрос в цикле или обращение к реквизиту ссылки, которое платформа вынуждена догружать из базы по одной записи.
Замер работает и в файловом, и в клиент-серверном режиме, но учитывает только время на той стороне, к которой вы подключены как к предмету отладки.
Частые проблемы с подключением отладчика
Если точки останова «серые» и не срабатывают — почти всегда дело в подключении, а не в коде. Разберите по симптому:
Отдельный случай — расширения конфигурации . Чтобы отладка заходила в код расширения, оно должно быть подключено к той базе, к которой вы присоединились, а точка останова ставится именно в модуле расширения, а не в заимствованном модуле основной конфигурации.
Частые вопросы
Можно ли отлаживать код без Конфигуратора?
Чем условная точка останова лучше обычной?
F5 и одной точной остановкой на нужной итерации.Почему значение переменной в табло не меняется после шага?
F11 или F10), когда строка отработает.Как поймать строку, на которой вылетает ошибка, не расставляя точки?
Отладка → Остановка по ошибке и повторите действие. Отладчик встанет ровно там, где выбрасывается исключение, и вы увидите контекст в табло и стеке вызовов.