Отладчик 1С: запуск, точки останова и разбор кода по шагам

· 9 мин

Содержание

Отладчик встроен в Конфигуратор: запускаете базу кнопкой Начать отладку (клавиша F5), ставите точку останова клавишей F9 в нужной строке, и выполнение кода остановится ровно там. Дальше идёте по строкам клавишами F10 и F11 и смотрите, какие значения лежат в переменных. Так отладчик 1С помогает найти и исправить ошибку в коде, не гадая по сообщению «Поле объекта не обнаружено».

Типичная ситуация: отчёт считает не те суммы, а в запросе пять соединений и три вложенных цикла. Вывод в окно сообщений через Сообщить() быстро превращается в кашу. Отладчик показывает реальные данные в нужный момент и не требует менять код.

Статья про платформу 8.3 с интерфейсом «Такси», режим Конфигуратора. Нужны права разработчика: отладка идёт через Конфигуратор, обычный пользователь запустить её не сможет.

Подготовка: что нужно до первого запуска

Проверьте три вещи, иначе отладчик «не видит» код.

  • 🔑 Вход в Конфигуратор под пользователем с ролью, которая разрешает режим конфигурирования. В файловой базе это обычно администратор.
  • 🧩 Код должен быть в вашей конфигурации. Отладить закрытый модуль типовой конфигурации на поддержке без доступа к тексту нельзя: остановка там не сработает.
  • 🖥 Тип клиента. По умолчанию запускается тонкий клиент; для отладки веб-клиента нужен отдельный режим запуска и браузер.

Режим запуска задаётся в настройках Конфигуратора: пункт меню Сервис → Параметры, закладка запуска 1С:Предприятия. Там выберите основной режим запуска: тонкий клиент, веб-клиент или толстый клиент. От выбора зависит, какие модули попадут в отладку по умолчанию.

Если нужно отлаживать клиент-серверный вызов, держите базу и клиента в одной версии платформы. Расхождение версий — частая причина «отладка не подключается».

Запуск отладки и первые шаги

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

Порядок действий:

  1. Откройте модуль, в котором предполагаете ошибку: модуль объекта, модуль формы, общий модуль.
  2. Поставьте точку останова в строке, до которой всё ещё работает правильно.
  3. Запустите отладку и в открывшейся программе повторите действие, которое приводит к ошибке: проведите документ, сформируйте отчёт, нажмите кнопку.
  4. Когда выполнение дойдёт до точки, 1С остановится, а окно Конфигуратора выйдет на передний план. Строка подсветится жёлтой стрелкой.

Если база запущена уже сама по себе, а не из Конфигуратора, подключитесь к ней через Отладка → Подключение. Так отлаживают базу, открытую пользователем, и клиент-серверную базу . В окне настройки подключения указывают, к чему подключаться; там же есть автоматическое подключение отладчика к запускаемым клиентам.

Остановить отладку можно через Отладка → Остановить отладку (Shift+F5). Приложение при этом закроется.

Точки останова: как ставить и ими управлять

Точка останова — это отметка на строке. Дойдя до неё, платформа ставит выполнение на паузу.

Простая точка

Кликните в левое поле рядом с нужной строкой или нажмите F9 на строке. Слева появится красный кружок. Повторное нажатие снимает точку.

  • ✅ Ставьте точку на строке с исполняемым оператором: присваивание, вызов, условие.
  • ❌ Точка на комментарии, пустой строке или объявлении переменной не сработает: платформа сдвинет её или проигнорирует.

Условная точка

Бывает так, что цикл идёт по 3000 строк, а ошибка только на 2 417-й. Останавливаться 2 416 раз бессмысленно. Для таких случаев у точки останова есть условие: откройте её свойства и впишите логическое выражение, например Номенклатура = Неопределено или НомерСтроки = 2417. Платформа остановится, только когда выражение истинно.

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

Список точек

В меню Отладка есть список всех точек останова. В нём точки включают и выключают по одной, не удаляя. Это удобно, когда вы отладили один кусок и переходите к другому, но старые точки пригодятся.

Точки останова хранятся на вашем рабочем месте, а не в конфигурации. Коллега с тем же кодом ваши точки не увидит.

Пошаговое выполнение кода

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

КомандаКлавишаЧто делаетКогда нужна
Шаг в обходF10Выполняет строку целиком, вызовы процедур не раскрываетСтрока вам понятна, интересует результат
Шаг с заходомF11Заходит внутрь вызываемой процедуры или функцииПодозреваете, что ошибка в вызываемом коде
Шаг с выходомShift+F11Дорабатывает текущую процедуру и возвращается к месту вызоваЗашли глубже, чем нужно
ПродолжитьF5Выполняет код до следующей точки останова или до концаНужный фрагмент уже пройден

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

Как идти по коду

Хороший порядок такой. Встали на подозрительной строке и нажали F10: если результат не тот, вернитесь к началу этого участка и повторите, но на вызове нажмите F11. Так вы спускаетесь вглубь только там, где это нужно.

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

Стек вызовов показывает цепочку: из какой процедуры вы пришли и кто её вызвал. Окно стека вызовов включается в меню Отладка или Вид. Двойной щелчок по строке стека переносит вас в соответствующее место кода.

Анализ переменных и выражений

Остановка бесполезна, если вы не видите данных. Посмотреть их можно тремя способами.

Быстрый просмотр

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

Окно локальных переменных

Показывает все переменные текущей процедуры с их значениями и типами. Раскрывайте элементы-объекты стрелкой: так видны реквизиты документа, строки табличной части, колонки таблицы значений.

Вычисление выражения

Отдельное окно вычисления выражения принимает любой код, который возвращает значение. Вызов — через меню Отладка (есть и быстрая клавиша Shift+F9 для текущего выделения).

Примеры того, что можно вычислить:

Объект.Товары.Количество()
Выборка.Следующий()
ТаблицаЗначений.Выгрузить("Номенклатура").Количество()

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

Смотреть выражение постоянно

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

Таблицы и запросы

Таблицу значений в отладчике можно открыть в отдельном окне, как таблицу, и просмотреть строки. Для результата запроса сначала выгрузите его: Запрос.Выполнить().Выгрузить() в вычислении выражения. Саму выборку вы листать не сможете, не сдвигая курсор.

Текст запроса удобнее копировать из переменной и проверять в консоли запросов: так легче искать, в какое соединение теряются строки.

Серверный код и исключения

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

Серверные вызовы

Сделайте в серверной процедуре точку останова, запустите отладку и вызовите действие из клиента. Платформа остановится на серверной строке и покажет стек, который идёт из клиентской процедуры. При этом клиент «замирает» и ждёт: это нормально, он ждёт ответа сервера.

Клиент-серверная база , опубликованная на сервере, подключается к отладке через Отладка → Подключение. Если отладчик не останавливается на серверной точке, проверьте по порядку:

  1. Отладка запущена на тот же сервер и ту же базу, что у клиента.
  2. Модуль, где стоит точка, действительно серверный: в свойствах формы или общего модуля проверьте флаги «Сервер» и «Клиент».
  3. Версии платформы клиента и сервера совпадают.
  4. Код серверный и не помечен как выполняемый в фоновом задании: фоновые задания требуют отдельного подключения.

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

Остановка по ошибке

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

Режим бывает двух видов: остановка на любых ошибках и остановка только на тех, что не перехвачены Попыткой. Второй вариант чище: не будет остановок на ожидаемых ошибках, которые код сам обрабатывает.

Для разбора пойманной ошибки в блоке Исключение используйте:

Попытка
    ВыполнитьДействие();
Исключение
    ТекстОшибки = ОписаниеОшибки();
    ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
КонецПопытки;

Поставьте точку на строке ТекстОшибки = ... и посмотрите, что вернул ОписаниеОшибки(): в тексте будет место и причина.

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

Таблица ниже: симптом и наиболее вероятная проверка.

СимптомЧто проверить
Красный кружок точки стал серым или с вопросомКод в модуле изменился после запуска. Остановите отладку и запустите заново
Точка есть, остановки нетСтрока не исполняется: условие не выполнилось, либо модуль не тот
Отладка не подключаетсяВерсии платформы, порт, права, нет ли другой запущенной отладки
Остановка в чужом коде платформыВключена остановка по любым ошибкам; переключите на неперехваченные
Значение переменной «Не определено»Переменная ещё не получила значение: выполните строку выше
Замедление или зависание клиентаСлишком много точек с условиями в частом цикле

Как ускорить отладку

  • 📌 Ставьте точки ближе к месту ошибки, а не в начале процесса.
  • ⏱ Условные точки в циклах по тысячам строк замедляют выполнение: условие вычисляется на каждом проходе. Если цикл на 100 000 строк, условную точку лучше заменить обычной точкой внутри вложенного Если, добавленного временно.
  • 🧹 Лишние точки отключайте: пока они стоят, платформа проверяет каждую.
  • 🧪 Сложное выражение сначала проверьте в окне вычисления, потом переносите в код.

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

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

Можно ли отлаживать без Конфигуратора?
Нет. Отладка запускается из Конфигуратора или подключается к нему. Обычный пользовательский режим отладчика не содержит.
Почему не срабатывает точка останова?
Чаще всего строка не исполняется, модуль не тот, либо вы изменили код после запуска и не перезапустили отладку. Остановите отладку и запустите снова.
Как отладить веб-клиент?
Выберите веб-клиент основным режимом запуска в параметрах Конфигуратора и запустите отладку, откроется браузер. Серверный код останавливается так же, как в тонком клиенте.
Можно ли отлаживать код в типовой конфигурации на поддержке?
Если модуль открыт и вы видите его текст, поставить точку можно. Закрытый модуль без исходников отладке не поддаётся.
Можно ли отлаживать фоновые и регламентные задания?
Да, но им нужно отдельное подключение: такие задания выполняются в своих сеансах. Включите подключение отладчика к фоновым заданиям в настройках подключения.
Влияет ли отладка на данные в базе?
Сам отладчик данные не меняет. Но код, который вы выполняете по шагам или вычисляете в окне выражений, работает по-настоящему и может записать документы или справочники.