Отладчик в 1С 8.3: точки останова, шаги и проверка значений
Содержание
Отладчик в 1С — это встроенный в Конфигуратор инструмент, который останавливает выполнение кода на нужной строке и показывает значения переменных в этот момент. Запускают его из Конфигуратора клавишей F5 (Отладка → Начать отладку), точку останова ставят клавишей F9, по коду идут F10 и F11. Этого хватает, чтобы понять, где и почему программа ведёт себя не так, как ожидалось.
Способов работать с отладчиком несколько. Для своего кода в файловой базе достаточно запустить отладку из Конфигуратора. Для серверного кода в клиент-серверной базе сначала включают отладку на сервере. Для фоновых заданий и чужих сеансов нужно подключение к предметам отладки. Всё это работает в платформе 1С:Предприятие 8.3 и одинаково для любой конфигурации: БП, ЗУП, УТ или вашей собственной.
Как запустить отладку в 1С и что видно на экране
Самый простой вариант — запуск из Конфигуратора. Откройте базу в Конфигураторе и выберите Отладка → Начать отладку. Платформа предложит клиент: тонкий, толстый или веб-клиент. Обычно берут тонкий клиент, потому что именно в нём работают пользователи.
Клиент запускается уже подключённым к отладчику. Теперь любая точка останова в клиентском коде сработает сразу.
Перед запуском сохраните изменения и обновите конфигурацию базы данных (F7). Если основная конфигурация отличается от конфигурации базы, отладчик остановится на старом коде, а номера строк не совпадут с тем, что вы видите в модуле.
Окна отладчика
Во время остановки работают окна из меню Отладка:
- 📌 Табло (
Ctrl+Alt+W) — список выражений, за которыми вы следите. Значения обновляются на каждом шаге. - 📋 Локальные — все локальные переменные текущей процедуры, без ручного ввода.
- 🧮 Вычислить выражение (
Shift+F9) — разовое вычисление любого выражения, в том числе вызов функции. - 🧭 Стек вызовов (
Ctrl+Alt+C) — цепочка процедур, которая привела к текущей строке. - 🔴 Точки останова (
Ctrl+Alt+B) — список всех точек с условиями и флажками включения.
Как остановить и завершить отладку
Shift+F5 завершает сеанс отладки: отладчик отключается, клиентское приложение закрывается. Если код ушёл в долгий цикл, Отладка → Прервать (Ctrl+Break) остановит выполнение на текущей строке. Так легко найти место, где программа «висит».
Точки останова и пошаговое выполнение кода
Точка останова — это отметка на строке модуля. Дойдя до неё, программа замирает, а управление получает Конфигуратор.
Поставить и снять точку
- Откройте модуль и встаньте на нужную строку.
- Нажмите
F9или дважды щёлкните по серому полю слева от строки. Появится красный кружок. - Повторное нажатие
F9снимает точку. - Убрать сразу все точки —
Ctrl+Shift+F9.
Точку можно не удалять, а временно выключить в окне Точки останова: снимите флажок. Это удобно, когда точек много, а нужна только часть.
💡 Ставьте точку на строку с исполняемым кодом. На пустой строке, комментарии или строке с Процедура она не сработает либо сместится.
Шаги по коду
| Клавиша | Команда | Что делает |
|---|---|---|
F11 | Шагнуть в | Заходит внутрь вызываемой процедуры или функции |
F10 | Шагнуть через | Выполняет вызов целиком и переходит на следующую строку |
Shift+F11 | Шагнуть из | Дорабатывает текущую процедуру и возвращается к месту вызова |
Shift+F10 | Идти до курсора | Выполняет код до строки, где стоит курсор |
F5 | Продолжить | Выполняет код до следующей точки останова |
Рабочий приём: сначала идите через F10, а на подозрительном вызове нажимайте F11. Так вы не утонете в типовых процедурах БСП, которые вызываются почти на каждой строке.
Значения переменных: табло, локальные и вычисление выражений
Когда код остановлен, наведите курсор на переменную в модуле — появится подсказка с её значением. Для простых типов этого достаточно. Для таблиц, структур и объектов нужно табло.
Работа с табло
- Выделите переменную или выражение в модуле.
- Нажмите
Shift+F9и в окне выражения нажмите кнопку добавления в табло. Или откройте табло и введите выражение вручную. - Разверните значение плюсом: у объекта видны реквизиты, у таблицы значений — строки и колонки.
В табло можно писать не только имена переменных. Подойдут выражения вроде Объект.Товары.Итог("Сумма") или ТаблицаДанных.Количество(). Это быстрый способ проверить итог без печати отчёта.
Что важно помнить о контексте
Значения видны только в контексте текущей строки. Если код остановлен на клиенте, серверные переменные недоступны, и наоборот. Переменная модуля формы видна, пока выполняется код этой формы.
Ещё один нюанс: вычисление выражения выполняет код по-настоящему. Если в Вычислить выражение вызвать функцию, которая пишет в базу, запись произойдёт. Не вызывайте в табло и окне вычисления методы Записать(), Провести() и Удалить() в рабочей базе.
Стек вызовов: откуда пришёл код
Ошибка часто видна в одной процедуре, а её причина — в той, что её вызвала. Окно Стек вызовов (Ctrl+Alt+C) показывает цепочку: верхняя строка — где вы стоите сейчас, ниже — кто вызвал.
Как пользоваться стеком:
- Остановитесь на точке или по ошибке.
- Откройте
Стек вызовов. - Дважды щёлкните по строке ниже текущей — откроется модуль вызывающей процедуры на строке вызова.
- Табло и окно
Локальныепереключатся на контекст этой процедуры. Видно, с какими параметрами её вызвали.
Так можно найти, например, какая подписка на событие или какой обработчик формы вызвал проведение документа с неверными данными.
Навигация по модулям
Для перехода по коду в Конфигураторе есть удобные команды:
- 🔎
F12— перейти к определению процедуры или функции, на имени которой стоит курсор. - ↩️
Ctrl+-(минус) — вернуться к предыдущему месту в коде. - 🔍
Ctrl+Fи глобальный поискCtrl+Shift+F— найти, где ещё вызывается процедура.
Глобальный поиск по всей конфигурации помогает понять, в каких модулях стоит поставить точки, ещё до начала отладки.
Условные точки останова и вывод в лог без остановки
Если точка стоит внутри цикла на 5 000 строк, обычная остановка бесполезна: нужна одна конкретная итерация. Для этого есть точка с условием.
Как поставить условие
- Встаньте на строку и выберите
Отладка → Точка останова с условием(Alt+Shift+F9). - Введите выражение на встроенном языке, которое возвращает Истина или Ложь.
- Нажмите «ОК». Кружок станет с отметкой условия.
Примеры условий:
СтрокаТЧ.Номенклатура.Наименование = "Бумага А4"
СтрокаТЧ.Сумма < 0
Счетчик = 4217
Отладчик проверяет условие каждый раз, когда доходит до строки, и останавливается только при истинном значении. На большом цикле это заметно замедляет выполнение, но всё равно быстрее, чем нажимать F5 тысячи раз.
Лог без остановки
Иногда остановка мешает: например, нужно увидеть порядок вызовов в обработчике, который реагирует на активизацию строки. Тогда помогает приём с условием, которое всегда ложно, но по пути пишет данные.
Создайте во временной процедуре или в общем модуле отладочную функцию:
Функция ОтладкаЗаписать(Текст) Экспорт
ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Информация, , , Текст);
Возврат Ложь;
КонецФункции
В условии точки укажите вызов этой функции с нужным текстом. Точка никогда не сработает, а журнал регистрации наберёт записи с вашим текстом. Для клиентского кода вместо записи в журнал используют Сообщить().
Отладочную функцию удалите до передачи конфигурации пользователям. Если она останется в общем модуле поставки, при следующем обновлении её придётся разбирать при сравнении конфигураций.
Отладка сервера, фоновых заданий и запросов
В файловой базе серверный код выполняется в том же процессе, что и клиент, и точки в серверных процедурах срабатывают сразу. В клиент-серверной базе код с директивой &НаСервере работает в рабочих процессах кластера, и там отладку надо разрешить отдельно.
Включить отладку на сервере 1С
Сервер 1С запускают с ключом -debug. Для этого его добавляют в строку запуска службы агента сервера ragent.exe, после чего службу перезапускают. Для отладки по протоколу HTTP используют -debug -http; по умолчанию сервер отладки слушает адрес http://localhost:1550.
Перезапуск службы сервера 1С обрывает сеансы всех пользователей. Делайте это вне рабочего времени и только на тестовом сервере.
Предметы отладки
После включения серверной отладки:
- В Конфигураторе выберите
Отладка → Подключение. - В окне предметов отладки нажмите «Автоматическое подключение» и отметьте нужные типы: сервер, тонкий клиент, фоновое задание.
- Запустите клиент и выполните действие — точки в серверном коде начнут срабатывать.
Через этот же список подключаются к уже открытому сеансу пользователя, если он запущен с разрешённой отладкой. Фоновые задания и регламентные задания отлаживают только так: у них нет своего окна, которое можно запустить по F5.
💡 Быстрый способ отладить код фонового задания — временно вызвать ту же процедуру напрямую из обработки, без запуска в фоне. Код выполнится в обычном серверном вызове, и точки сработают без настройки автоподключения.
Как отлаживать запросы
Сам текст запроса отладчик не выполняет по шагам, но даёт всё нужное, чтобы найти ошибку:
- Поставьте точку на строку после
Запрос.Выполнить()или на строку с вызовом. - В табло посмотрите
Запрос.Текст— это итоговый текст со всеми подставленными частями. - Проверьте
Запрос.Параметры: часто ошибка в том, что параметр не передан или передан не того типа. - В окне
Вычислить выражениевыполнитеЗапрос.Выполнить().Выгрузить()и разверните результат как таблицу значений.
Если запрос использует временные таблицы, их содержимое видно через менеджер временных таблиц: коллекция МенеджерВременныхТаблиц.Таблицы в актуальных версиях платформы позволяет открыть данные каждой таблицы прямо в отладчике.
Текст запроса удобно скопировать из табло в консоль запросов, подставить параметры и разбирать отдельно.
Замер производительности
Для поиска медленных мест есть Отладка → Замер производительности. Включите его, выполните действие в клиенте и выключите. Конфигуратор покажет, сколько раз выполнилась каждая строка и какую долю времени она заняла. Строки с наибольшей долей и есть узкие места.
Остановка по ошибке
Когда пользователь видит сообщение вроде Поле объекта не обнаружено или Деление на 0, строку легко найти без точек останова. Включите Отладка → Остановка по ошибке.
После этого отладчик сам останавливается на строке, где возникло исключение. В настройках можно указать, останавливаться ли на ошибках внутри Попытка … Исключение, и ограничить остановку текстом ошибки. Второе особенно полезно: в типовых конфигурациях исключения внутри попыток возникают постоянно, и без фильтра отладчик будет останавливаться на каждом.
Ошибки, которые чаще всего допускают при отладке
- 🏭 Отладка в рабочей базе. Остановка на точке в серверном коде внутри транзакции держит блокировки. Пока вы смотрите табло, другие пользователи ждут и получают ошибки блокировки. Отлаживайте на копии базы.
- 🔁 Точка в цикле без условия. Сотни нажатий
F5и потерянная нужная итерация. Сразу ставьте условие. - 🧩 Точка не в том модуле. У формы документа может быть несколько форм, а код проведения живёт в модуле объекта, а не в модуле формы. Через стек вызовов проверьте, какой модуль реально выполняется.
- 🧪 Вызов изменяющих методов из табло. Записанный из окна вычисления объект сохраняется в базе по-настоящему.
- 📝 Забытый отладочный код.
Сообщить()и временные функции логирования, оставленные в модулях, попадают к пользователям. Перед сохранением поиском поОтладкапроверьте, что всё убрано. - ⏳ Долгая остановка в серверном вызове. При стоянии на точке в серверном коде клиент ждёт ответа. Если держать его долго, можно получить разрыв соединения и потерять сеанс отладки.
Можно ли отлаживать код без доступа к Конфигуратору?
Можно ли отлаживать типовую конфигурацию на поддержке?
Можно ли изменить значение переменной во время остановки?
F7).Отладка в веб-клиенте отличается?
Отладка → Начать отладку → Веб-клиент. Для опубликованной на веб-сервере базы отладку нужно разрешить и в публикации, и на сервере 1С.