Как настроить и использовать отладчик кода в 1С

· 9 мин

Содержание

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

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

Как включить режим отладки и запустить сеанс

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

Сначала разрешите отладку при запуске. Откройте Сервис → Параметры, перейдите на вкладку Запуск 1С:Предприятия и включите флажок Устанавливать режим разрешения отладки при запуске. На вкладке Отладка при необходимости выбирается протокол — HTTP (современный, по умолчанию) или TCP/IP (устаревший). Для обычной отладки в файловой базе менять протокол не нужно.

Дальше есть два способа начать сеанс:

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

В файловой базе всё работает «из коробки»: запуск по F5 сразу даёт рабочий отладчик. Сложности начинаются только в клиент-серверном варианте, где отладку надо дополнительно разрешить на сервере.

Перед запуском отладки проверьте
Выполнено: 0 / 4

Точки останова: обычные, условные и по ошибке

Точка останова — это метка на строке, на которой выполнение приостановится. Поставить и снять её можно клавишей F9 или щелчком по левому полю (служебной области) редактора модуля. Отмеченная строка подсвечивается, слева появляется красный кружок.

Три вида точек пригодятся в разных ситуациях:

  • 🔴 Обычная — срабатывает каждый раз, когда выполнение доходит до строки. Клавиша F9.
  • 🟡 Условная — срабатывает, только когда истинно заданное условие. Щёлкните точку правой кнопкой и задайте условие, например Контрагент.Наименование = "ООО Ромашка". Удобно, когда цикл проходит тысячу раз, а проблема — на одной записи.
  • ⚠️ Остановка по ошибке — выполните Отладка → Остановка по ошибке. Отладчик будет вставать на той строке, где возникает исключение. Можно ограничить фильтром по тексту ошибки, чтобы ловить только нужные.

Чтобы снять сразу все точки, нажмите Ctrl+Shift+F9. Это спасает, когда за время разбора их накопилось два десятка по разным модулям.

Точка на строке объявления переменной или на пустой строке может не сработать. Ставьте её на строку, где реально что-то выполняется — присваивание, вызов метода, условие.

Пошаговое выполнение: шаг через, шаг внутрь, шаг из

Когда отладчик остановился, вы ведёте выполнение вручную — строка за строкой. Главное — различать три «шага»:

  • Шагнуть через (F10) — выполнить текущую строку целиком. Если в строке вызывается процедура, она отработает за один шаг, внутрь вы не провалитесь.
  • Шагнуть внутрь (F11) — зайти внутрь вызываемой процедуры или функции и продолжить отладку уже там. Так ищут ошибку, спрятанную в общем модуле.
  • Шагнуть из (Shift+F11) — досрочно доработать текущую процедуру до конца и вернуться в то место, откуда её вызвали.

Чтобы просто «отпустить» выполнение до следующей точки останова, нажмите F5. Полностью завершить сеанс — Shift+F5.

ДействиеКлавиша
Поставить / снять точку остановаF9
Начать отладку / продолжить до следующей точкиF5
Шагнуть через строку (не заходя в процедуру)F10
Шагнуть внутрь процедурыF11
Выйти из текущей процедурыShift+F11
Вычислить выражениеShift+F9
Завершить отладкуShift+F5

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

Частая ошибка новичков — жать F11 на каждой строке. Тогда вы проваливаетесь во все системные и типовые процедуры подряд и быстро теряете нить. Правило простое: F10 — пока идёте по своему коду, F11 — только когда точно нужно заглянуть внутрь конкретного вызова, Shift+F11 — чтобы быстро выбраться обратно, если провалились не туда.

Просмотр значений переменных и вычисление выражений

Пока выполнение на паузе, значения доступны несколькими способами.

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

Для постоянного наблюдения используйте табло: Отладка → Табло. В него добавляют выражения, которые хочется держать перед глазами — отдельные переменные, реквизиты объекта, вызовы функций. Значения в табло обновляются на каждом шаге, поэтому видно, как меняется величина от строки к строке.

Когда нужно проверить более сложное выражение, вызовите Вычислить выражение (Shift+F9). Здесь можно ввести любой код на встроенном языке — например, Документ.СуммаДокумента * 1.2 или вызов функции общего модуля — и сразу увидеть результат. Через это же окно значение переменной можно изменить на ходу и продолжить выполнение с подставленным значением — удобно, чтобы проверить гипотезу, не правя код.

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

Коллекции удобно смотреть в развёрнутом виде. Наведите курсор на таблицу значений или структуру, раскройте подсказку — и увидите строки с их реквизитами. Так сразу понятно, пустая коллекция или в ней не те данные, а это половина ошибок в типовом коде: запрос вернул не то, что ожидали, и дальше по тексту всё «ломается» уже из-за пустого результата.

Стек вызовов: как понять, откуда пришло управление

Когда отладчик остановился глубоко внутри общего модуля, часто не ясно: а кто вообще вызвал эту процедуру? На это отвечает стек вызовов — Отладка → Стек вызовов.

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

Это главный инструмент, когда ошибка возникает в универсальной процедуре, а вызывают её из десятка мест. По стеку сразу видно, какой именно сценарий привёл к сбою.

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

Это место, где новички чаще всего спотыкаются. Код с директивой &НаСервере, &НаСервереБезКонтекста, модули менеджеров и общие серверные модули выполняются не на клиенте, а на сервере 1С:Предприятия. Если подключён только клиент, точка останова в серверном коде не сработает — выполнение туда уйдёт, но отладчик его «не увидит».

Чтобы ловить серверный код, в сеансе должен быть подключён соответствующий предмет отладки. Откройте Отладка → Подключение — в диалоге перечислены доступные предметы:

  • 🖥️ тонкий и толстый клиент;
  • ⚙️ сервер 1С:Предприятия;
  • ⏱️ фоновое и регламентное задание;
  • 🌐 веб-сервис и HTTP-сервис;
  • 🔗 внешнее соединение.

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

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

Останавливать службу сервера 1С, чтобы «просто включить отладку», не нужно и опасно: это оборвёт сеансы всех работающих пользователей. Разрешение отладки задаётся при настройке агента; меняйте его согласованно и в нерабочее время.

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

Отладчик помогает не только с логическими ошибками, но и с тормозами. Когда обработка «думает» несколько минут, а понять причину на глаз невозможно, пригодится Отладка → Замер производительности.

Порядок простой:

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

Строки сортируются по времени, поэтому самые «дорогие» участки видны сразу. Частая находка — запрос или обращение к базе внутри цикла: строка выполняется тысячи раз и даёт почти всё время обработки.

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

Почему отладчик не останавливается на точках

Самая частая жалоба — точки стоят, а выполнение их «проскакивает». Причин немного, и все проверяются за минуту.

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

Ещё одна тонкость: точка на строке объявления переменных или на строке Процедура … без исполняемого кода часто пропускается. Перенесите её на первую «рабочую» строку.

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

Чем отладка в Конфигураторе отличается от 1C:EDT?
Принцип один и тот же — точки останова, шаги, табло, стек вызовов. В 1C:EDT интерфейс отладки ближе к привычному в средах разработки, но набор возможностей сопоставим. Для большинства задач по типовым конфигурациям хватает Конфигуратора.
Можно ли отлаживать код у пользователя в рабочей базе?
Да, через Отладка → Подключение к уже запущенному приложению, если в базе разрешена отладка. Помните, что остановка на точке замораживает сеанс пользователя до тех пор, пока вы не продолжите выполнение.
Как поймать ошибку, которая возникает не всегда?
Используйте условную точку останова (правый клик по точке → условие) или остановку по ошибке (Отладка → Остановка по ошибке). Второй вариант сам поставит выполнение на той строке, где выбрасывается исключение.
Можно ли менять значение переменной во время отладки?
Да. Откройте Вычислить выражение (Shift+F9), введите присваивание и примените — выполнение продолжится с новым значением. Это способ проверить гипотезу, не трогая исходный код.
Почему точка останова помечена серой и не срабатывает?
Модуль не записан в конфигурацию после изменения либо версия кода в базе отличается от открытой в Конфигураторе. Сохраните модуль (F7) и перезапустите сеанс отладки.