Работа с отладчиком в Конфигураторе 1С 8.3

· 9 мин

Содержание

Отладчик встроен в Конфигуратор: ставите точку останова на строку кода (клавиша 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С:Предприятия. Отладчик остановится на строках обработки наравне с кодом основной конфигурации.

Табло и «Вычислить выражение»: смотрим значения переменных

Главный вопрос при отладке — что сейчас лежит в переменной. Три инструмента:

  1. Всплывающая подсказка. Наведите курсор на имя переменной в остановленном коде — платформа покажет её текущее значение. Самый быстрый способ для простых типов.
  2. Табло. Откройте Отладка → Табло. Это окно, куда вы перетаскиваете или вписываете интересующие переменные и выражения — их значения обновляются на каждом шаге. Удобно держать под наблюдением 5–10 величин разом.
  3. Вычислить выражение (Shift+F9). Отдельное окно, где можно набрать любое выражение на встроенном языке и получить результат в текущем контексте: СуммаДокумента * 1.2, Массив.Количество(), обращение к реквизиту объекта.

Для составных значений (структуры, таблицы значений, выборки) и в табло, и в «Вычислить выражение» есть разворачивание по «плюсику»: видно каждую колонку, каждую строку, каждый элемент коллекции.

Табло помнит выражения между сеансами отладки — один раз настроили набор наблюдаемых переменных, и он остаётся.

Стек вызовов: откуда код пришёл в эту процедуру

Остановились в процедуре и не понимаете, кто её вызвал и с какими данными? Откройте Отладка → Стек вызовов. Это список всех вложенных вызовов снизу вверх: самая нижняя строка — точка, где вы стоите, выше — процедура, которая её вызвала, ещё выше — та, что вызвала первую.

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

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

Частая связка — стек плюс остановка по ошибке. Исключение остановило код на нижней строке стека, вы поднимаетесь на уровень выше и видите, что в вызывающую процедуру уже пришёл пустой параметр. Значит, проверять нужно не место падения, а то, кто передал туда некорректные данные. Без стека эту цепочку пришлось бы собирать логами и записью в журнал регистрации.

Отладка кода на сервере и в фоновых заданиях

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

Порядок действий для клиент-серверной базы:

  1. Убедитесь, что сервер запущен с разрешённой отладкой (параметр задаётся при настройке службы агента сервера или в параметрах кластера — уточните у администратора сервера, если доступа к консоли нет).
  2. В Конфигураторе выберите тот же протокол отладки, что настроен на сервере (Сервис → Параметры → Запуск → Отладка).
  3. Откройте Отладка → Подключение и присоедините серверный предмет отладки.

При работе по протоколу HTTP обмен Конфигуратора с отлаживаемыми процессами идёт через отдельный компонент — сервер отладки. В файловом режиме он поднимается автоматически вместе с сеансом. В клиент-серверном его запускают на стороне сервера 1С, и адрес этого сервера отладки указывается в настройках подключения Конфигуратора. Если адрес или протокол не совпадают, список предметов отладки останется пустым.

Фоновые и регламентные задания — отдельные серверные сеансы, которые появляются и исчезают сами. Ловить их обычным подключением неудобно, поэтому включите автоматическое подключение к предметам типа «Фоновое задание» — Конфигуратор присоединится к заданию в момент старта и остановится на вашей точке.

Настройка отладки клиент-серверной базы
Выполнено: 0 / 5

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

Замер производительности: находим медленные строки

Отладчик умеет не только ловить ошибки, но и показывать, где код тормозит. Включите Отладка → Замер производительности, выполните нужное действие в 1С:Предприятии, затем остановите замер. Платформа покажет таблицу: сколько раз выполнилась каждая строка и сколько суммарно заняла.

Сортируете по времени — и сразу видно узкое место. Чаще всего это запрос в цикле или обращение к реквизиту ссылки, которое платформа вынуждена догружать из базы по одной записи.

Замер работает и в файловом, и в клиент-серверном режиме, но учитывает только время на той стороне, к которой вы подключены как к предмету отладки.

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

Если точки останова «серые» и не срабатывают — почти всегда дело в подключении, а не в коде. Разберите по симптому:

Диагностика: выберите симптом

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

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

Можно ли отлаживать код без Конфигуратора?
Да, у платформы есть отдельная среда разработки 1С:EDT со своим отладчиком на базе Eclipse. Принцип тот же — точки останова, шаги, просмотр переменных, — но интерфейс и горячие клавиши отличаются от Конфигуратора.
Чем условная точка останова лучше обычной?
Обычная останавливает код на каждом проходе строки, условная — только когда истинно ваше выражение. В цикле на тысячу элементов это разница между тысячей нажатий F5 и одной точной остановкой на нужной итерации.
Почему значение переменной в табло не меняется после шага?
Жёлтая стрелка показывает строку, которая ещё не выполнена. Если на ней присваивание, новое значение появится только после следующего шага (F11 или F10), когда строка отработает.
Как поймать строку, на которой вылетает ошибка, не расставляя точки?
Включите Отладка → Остановка по ошибке и повторите действие. Отладчик встанет ровно там, где выбрасывается исключение, и вы увидите контекст в табло и стеке вызовов.
В чём разница отладки файловой и клиент-серверной базы?
В файловой отладка работает сразу после запуска из Конфигуратора. В клиент-серверной нужно отдельно разрешить отладку на сервере и подключиться к серверному предмету отладки — иначе серверный код ловиться не будет.