Отладчик 1С: запуск, точки останова и разбор кода по шагам
Содержание
Отладчик встроен в Конфигуратор: запускаете базу кнопкой Начать отладку (клавиша F5), ставите точку останова клавишей F9 в нужной строке, и выполнение кода остановится ровно там. Дальше идёте по строкам клавишами F10 и F11 и смотрите, какие значения лежат в переменных. Так отладчик 1С помогает найти и исправить ошибку в коде, не гадая по сообщению «Поле объекта не обнаружено».
Типичная ситуация: отчёт считает не те суммы, а в запросе пять соединений и три вложенных цикла. Вывод в окно сообщений через Сообщить() быстро превращается в кашу. Отладчик показывает реальные данные в нужный момент и не требует менять код.
Статья про платформу 8.3 с интерфейсом «Такси», режим Конфигуратора. Нужны права разработчика: отладка идёт через Конфигуратор, обычный пользователь запустить её не сможет.
Подготовка: что нужно до первого запуска
Проверьте три вещи, иначе отладчик «не видит» код.
- 🔑 Вход в Конфигуратор под пользователем с ролью, которая разрешает режим конфигурирования. В файловой базе это обычно администратор.
- 🧩 Код должен быть в вашей конфигурации. Отладить закрытый модуль типовой конфигурации на поддержке без доступа к тексту нельзя: остановка там не сработает.
- 🖥 Тип клиента. По умолчанию запускается тонкий клиент; для отладки веб-клиента нужен отдельный режим запуска и браузер.
Режим запуска задаётся в настройках Конфигуратора: пункт меню Сервис → Параметры, закладка запуска 1С:Предприятия. Там выберите основной режим запуска: тонкий клиент, веб-клиент или толстый клиент. От выбора зависит, какие модули попадут в отладку по умолчанию.
Если нужно отлаживать клиент-серверный вызов, держите базу и клиента в одной версии платформы. Расхождение версий — частая причина «отладка не подключается».
Запуск отладки и первые шаги
Откройте Конфигуратор нужной базы и выберите в меню Отладка → Начать отладку. Платформа соберёт приложение, запустит 1С:Предприятие в режиме отладки и подключится к нему. Конфигуратор остаётся открытым: в нём вы будете видеть код и стек вызовов.
Порядок действий:
- Откройте модуль, в котором предполагаете ошибку: модуль объекта, модуль формы, общий модуль.
- Поставьте точку останова в строке, до которой всё ещё работает правильно.
- Запустите отладку и в открывшейся программе повторите действие, которое приводит к ошибке: проведите документ, сформируйте отчёт, нажмите кнопку.
- Когда выполнение дойдёт до точки, 1С остановится, а окно Конфигуратора выйдет на передний план. Строка подсветится жёлтой стрелкой.
Если база запущена уже сама по себе, а не из Конфигуратора, подключитесь к ней через Отладка → Подключение. Так отлаживают базу, открытую пользователем, и клиент-серверную базу
. В окне настройки подключения указывают, к чему подключаться; там же есть автоматическое подключение отладчика к запускаемым клиентам.
Остановить отладку можно через Отладка → Остановить отладку (Shift+F5). Приложение при этом закроется.
Точки останова: как ставить и ими управлять
Точка останова — это отметка на строке. Дойдя до неё, платформа ставит выполнение на паузу.
Простая точка
Кликните в левое поле рядом с нужной строкой или нажмите F9 на строке. Слева появится красный кружок. Повторное нажатие снимает точку.
- ✅ Ставьте точку на строке с исполняемым оператором: присваивание, вызов, условие.
- ❌ Точка на комментарии, пустой строке или объявлении переменной не сработает: платформа сдвинет её или проигнорирует.
Условная точка
Бывает так, что цикл идёт по 3000 строк, а ошибка только на 2 417-й. Останавливаться 2 416 раз бессмысленно. Для таких случаев у точки останова есть условие: откройте её свойства и впишите логическое выражение, например Номенклатура = Неопределено или НомерСтроки = 2417. Платформа остановится, только когда выражение истинно.
Через свойства точки также задают, сколько проходов пропустить до остановки. Точное название пункта в вашей версии смотрите в окне свойств точки: оно открывается из списка точек останова, меню Отладка.
Список точек
В меню Отладка есть список всех точек останова. В нём точки включают и выключают по одной, не удаляя. Это удобно, когда вы отладили один кусок и переходите к другому, но старые точки пригодятся.
Точки останова хранятся на вашем рабочем месте, а не в конфигурации. Коллега с тем же кодом ваши точки не увидит.
Пошаговое выполнение кода
Когда выполнение встало, вы управляете им вручную. Основные команды — в меню Отладка, у каждой есть клавиша.
| Команда | Клавиша | Что делает | Когда нужна |
|---|---|---|---|
| Шаг в обход | F10 | Выполняет строку целиком, вызовы процедур не раскрывает | Строка вам понятна, интересует результат |
| Шаг с заходом | F11 | Заходит внутрь вызываемой процедуры или функции | Подозреваете, что ошибка в вызываемом коде |
| Шаг с выходом | Shift+F11 | Дорабатывает текущую процедуру и возвращается к месту вызова | Зашли глубже, чем нужно |
| Продолжить | F5 | Выполняет код до следующей точки останова или до конца | Нужный фрагмент уже пройден |
Есть и команда «выполнить до курсора»: поставьте курсор в нужную строку, вызовите её из меню Отладка, и платформа остановится в этой строке без временной точки.
Как идти по коду
Хороший порядок такой. Встали на подозрительной строке и нажали F10: если результат не тот, вернитесь к началу этого участка и повторите, но на вызове нажмите F11. Так вы спускаетесь вглубь только там, где это нужно.
Не заходите внутрь платформенных методов и типовых библиотечных процедур без причины. Они по большей части вам недоступны, а по шагам вы будете тратить время на чужой код.
Стек вызовов показывает цепочку: из какой процедуры вы пришли и кто её вызвал. Окно стека вызовов включается в меню Отладка или Вид. Двойной щелчок по строке стека переносит вас в соответствующее место кода.
Анализ переменных и выражений
Остановка бесполезна, если вы не видите данных. Посмотреть их можно тремя способами.
Быстрый просмотр
Наведите курсор на имя переменной в тексте: во всплывающей подсказке появится значение. Для объекта подсказка покажет тип, для простого значения — само значение.
Окно локальных переменных
Показывает все переменные текущей процедуры с их значениями и типами. Раскрывайте элементы-объекты стрелкой: так видны реквизиты документа, строки табличной части, колонки таблицы значений.
Вычисление выражения
Отдельное окно вычисления выражения принимает любой код, который возвращает значение. Вызов — через меню Отладка (есть и быстрая клавиша Shift+F9 для текущего выделения).
Примеры того, что можно вычислить:
Объект.Товары.Количество()
Выборка.Следующий()
ТаблицаЗначений.Выгрузить("Номенклатура").Количество()
Вычисление выражения выполняет код по-настоящему. Вызов Следующий() у выборки сдвинет курсор, а метод, который что-то записывает, запишет это в базу. В вычислении не вызывайте методы, которые меняют данные.
Смотреть выражение постоянно
Если значение нужно отслеживать на каждом шаге, добавьте его в окно наблюдаемых выражений. Оно пересчитывается после каждого шага, и вы сразу видите, в какой строке значение сломалось. Например, Итого в цикле суммирования: вы пройдёте цикл и увидите шаг, на котором сумма вышла из ряда.
Таблицы и запросы
Таблицу значений в отладчике можно открыть в отдельном окне, как таблицу, и просмотреть строки. Для результата запроса сначала выгрузите его: Запрос.Выполнить().Выгрузить() в вычислении выражения. Саму выборку вы листать не сможете, не сдвигая курсор.
Текст запроса удобнее копировать из переменной и проверять в консоли запросов: так легче искать, в какое соединение теряются строки.
Серверный код и исключения
Клиентский код выполняется в вашем клиенте, серверный — в процессе сервера. Отладчик справляется с обоими, но настройка у них разная.
Серверные вызовы
Сделайте в серверной процедуре точку останова, запустите отладку и вызовите действие из клиента. Платформа остановится на серверной строке и покажет стек, который идёт из клиентской процедуры. При этом клиент «замирает» и ждёт: это нормально, он ждёт ответа сервера.
Клиент-серверная база
, опубликованная на сервере, подключается к отладке через Отладка → Подключение. Если отладчик не останавливается на серверной точке, проверьте по порядку:
- Отладка запущена на тот же сервер и ту же базу, что у клиента.
- Модуль, где стоит точка, действительно серверный: в свойствах формы или общего модуля проверьте флаги «Сервер» и «Клиент».
- Версии платформы клиента и сервера совпадают.
- Код серверный и не помечен как выполняемый в фоновом задании: фоновые задания требуют отдельного подключения.
Подключение отладчика к рабочей базе замедляет всех пользователей, а остановка на точке блокирует сервер для этого сеанса. Отлаживайте на копии базы. Если выбора нет, договоритесь с пользователями о времени и не оставляйте точки включёнными.
Остановка по ошибке
Не всегда понятно, где именно упало. Для этого есть режим остановки по ошибке: в меню Отладка включите остановку при возникновении исключения. Платформа встанет на строке, где возникла ошибка, и вы увидите состояние переменных в этот момент, а не после того, как исключение «проглотила» обёртка Попытка ... Исключение.
Режим бывает двух видов: остановка на любых ошибках и остановка только на тех, что не перехвачены Попыткой. Второй вариант чище: не будет остановок на ожидаемых ошибках, которые код сам обрабатывает.
Для разбора пойманной ошибки в блоке Исключение используйте:
Попытка
ВыполнитьДействие();
Исключение
ТекстОшибки = ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
КонецПопытки;
Поставьте точку на строке ТекстОшибки = ... и посмотрите, что вернул ОписаниеОшибки(): в тексте будет место и причина.
Частые проблемы с отладкой и что делать
Таблица ниже: симптом и наиболее вероятная проверка.
| Симптом | Что проверить |
|---|---|
| Красный кружок точки стал серым или с вопросом | Код в модуле изменился после запуска. Остановите отладку и запустите заново |
| Точка есть, остановки нет | Строка не исполняется: условие не выполнилось, либо модуль не тот |
| Отладка не подключается | Версии платформы, порт, права, нет ли другой запущенной отладки |
| Остановка в чужом коде платформы | Включена остановка по любым ошибкам; переключите на неперехваченные |
| Значение переменной «Не определено» | Переменная ещё не получила значение: выполните строку выше |
| Замедление или зависание клиента | Слишком много точек с условиями в частом цикле |
Как ускорить отладку
- 📌 Ставьте точки ближе к месту ошибки, а не в начале процесса.
- ⏱ Условные точки в циклах по тысячам строк замедляют выполнение: условие вычисляется на каждом проходе. Если цикл на 100 000 строк, условную точку лучше заменить обычной точкой внутри вложенного
Если, добавленного временно. - 🧹 Лишние точки отключайте: пока они стоят, платформа проверяет каждую.
- 🧪 Сложное выражение сначала проверьте в окне вычисления, потом переносите в код.
Если отладчик нужен не для одной ошибки, а чтобы понять, почему код медленный, используйте для этого замер производительности. Отладчик отвечает на вопрос «что происходит», замер — на вопрос «сколько это занимает».