Отладчик в 1С 8.3: точки останова, шаги и проверка значений

· 10 мин

Содержание

Отладчик в 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) остановит выполнение на текущей строке. Так легко найти место, где программа «висит».

Точки останова и пошаговое выполнение кода

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

Поставить и снять точку

  1. Откройте модуль и встаньте на нужную строку.
  2. Нажмите F9 или дважды щёлкните по серому полю слева от строки. Появится красный кружок.
  3. Повторное нажатие F9 снимает точку.
  4. Убрать сразу все точки — Ctrl+Shift+F9.

Точку можно не удалять, а временно выключить в окне Точки останова: снимите флажок. Это удобно, когда точек много, а нужна только часть.

💡 Ставьте точку на строку с исполняемым кодом. На пустой строке, комментарии или строке с Процедура она не сработает либо сместится.

Шаги по коду

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

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

Значения переменных: табло, локальные и вычисление выражений

Когда код остановлен, наведите курсор на переменную в модуле — появится подсказка с её значением. Для простых типов этого достаточно. Для таблиц, структур и объектов нужно табло.

Работа с табло

  1. Выделите переменную или выражение в модуле.
  2. Нажмите Shift+F9 и в окне выражения нажмите кнопку добавления в табло. Или откройте табло и введите выражение вручную.
  3. Разверните значение плюсом: у объекта видны реквизиты, у таблицы значений — строки и колонки.

В табло можно писать не только имена переменных. Подойдут выражения вроде Объект.Товары.Итог("Сумма") или ТаблицаДанных.Количество(). Это быстрый способ проверить итог без печати отчёта.

Что важно помнить о контексте

Значения видны только в контексте текущей строки. Если код остановлен на клиенте, серверные переменные недоступны, и наоборот. Переменная модуля формы видна, пока выполняется код этой формы.

Ещё один нюанс: вычисление выражения выполняет код по-настоящему. Если в Вычислить выражение вызвать функцию, которая пишет в базу, запись произойдёт. Не вызывайте в табло и окне вычисления методы Записать(), Провести() и Удалить() в рабочей базе.

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

Ошибка часто видна в одной процедуре, а её причина — в той, что её вызвала. Окно Стек вызовов (Ctrl+Alt+C) показывает цепочку: верхняя строка — где вы стоите сейчас, ниже — кто вызвал.

Как пользоваться стеком:

  1. Остановитесь на точке или по ошибке.
  2. Откройте Стек вызовов.
  3. Дважды щёлкните по строке ниже текущей — откроется модуль вызывающей процедуры на строке вызова.
  4. Табло и окно Локальные переключатся на контекст этой процедуры. Видно, с какими параметрами её вызвали.

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

Навигация по модулям

Для перехода по коду в Конфигураторе есть удобные команды:

  • 🔎 F12 — перейти к определению процедуры или функции, на имени которой стоит курсор.
  • ↩️ Ctrl+- (минус) — вернуться к предыдущему месту в коде.
  • 🔍 Ctrl+F и глобальный поиск Ctrl+Shift+F — найти, где ещё вызывается процедура.

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

Условные точки останова и вывод в лог без остановки

Если точка стоит внутри цикла на 5 000 строк, обычная остановка бесполезна: нужна одна конкретная итерация. Для этого есть точка с условием.

Как поставить условие

  1. Встаньте на строку и выберите Отладка → Точка останова с условием (Alt+Shift+F9).
  2. Введите выражение на встроенном языке, которое возвращает Истина или Ложь.
  3. Нажмите «ОК». Кружок станет с отметкой условия.

Примеры условий:

СтрокаТЧ.Номенклатура.Наименование = "Бумага А4"
СтрокаТЧ.Сумма < 0
Счетчик = 4217

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

Лог без остановки

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

Создайте во временной процедуре или в общем модуле отладочную функцию:

Функция ОтладкаЗаписать(Текст) Экспорт
	ЗаписьЖурналаРегистрации("Отладка", УровеньЖурналаРегистрации.Информация, , , Текст);
	Возврат Ложь;
КонецФункции

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

Отладочную функцию удалите до передачи конфигурации пользователям. Если она останется в общем модуле поставки, при следующем обновлении её придётся разбирать при сравнении конфигураций.

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

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

Включить отладку на сервере 1С

Сервер 1С запускают с ключом -debug. Для этого его добавляют в строку запуска службы агента сервера ragent.exe, после чего службу перезапускают. Для отладки по протоколу HTTP используют -debug -http; по умолчанию сервер отладки слушает адрес http://localhost:1550.

Перезапуск службы сервера 1С обрывает сеансы всех пользователей. Делайте это вне рабочего времени и только на тестовом сервере.

Предметы отладки

После включения серверной отладки:

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

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

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

Как отлаживать запросы

Сам текст запроса отладчик не выполняет по шагам, но даёт всё нужное, чтобы найти ошибку:

  1. Поставьте точку на строку после Запрос.Выполнить() или на строку с вызовом.
  2. В табло посмотрите Запрос.Текст — это итоговый текст со всеми подставленными частями.
  3. Проверьте Запрос.Параметры: часто ошибка в том, что параметр не передан или передан не того типа.
  4. В окне Вычислить выражение выполните Запрос.Выполнить().Выгрузить() и разверните результат как таблицу значений.

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

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

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

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

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

Когда пользователь видит сообщение вроде Поле объекта не обнаружено или Деление на 0, строку легко найти без точек останова. Включите Отладка → Остановка по ошибке.

После этого отладчик сам останавливается на строке, где возникло исключение. В настройках можно указать, останавливаться ли на ошибках внутри Попытка … Исключение, и ограничить остановку текстом ошибки. Второе особенно полезно: в типовых конфигурациях исключения внутри попыток возникают постоянно, и без фильтра отладчик будет останавливаться на каждом.

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

Ошибки, которые чаще всего допускают при отладке

  • 🏭 Отладка в рабочей базе. Остановка на точке в серверном коде внутри транзакции держит блокировки. Пока вы смотрите табло, другие пользователи ждут и получают ошибки блокировки. Отлаживайте на копии базы.
  • 🔁 Точка в цикле без условия. Сотни нажатий F5 и потерянная нужная итерация. Сразу ставьте условие.
  • 🧩 Точка не в том модуле. У формы документа может быть несколько форм, а код проведения живёт в модуле объекта, а не в модуле формы. Через стек вызовов проверьте, какой модуль реально выполняется.
  • 🧪 Вызов изменяющих методов из табло. Записанный из окна вычисления объект сохраняется в базе по-настоящему.
  • 📝 Забытый отладочный код. Сообщить() и временные функции логирования, оставленные в модулях, попадают к пользователям. Перед сохранением поиском по Отладка проверьте, что всё убрано.
  • ⏳ Долгая остановка в серверном вызове. При стоянии на точке в серверном коде клиент ждёт ответа. Если держать его долго, можно получить разрыв соединения и потерять сеанс отладки.
Можно ли отлаживать код без доступа к Конфигуратору?
Нет. Точки останова ставят и смотрят в Конфигураторе или в 1C:Enterprise Development Tools. Пользователю без прав на конфигурирование отладчик недоступен.
Можно ли отлаживать типовую конфигурацию на поддержке?
Да. Отладка не меняет код, поэтому снимать конфигурацию с поддержки для установки точек останова не нужно.
Можно ли изменить значение переменной во время остановки?
Надёжный путь — поправить код и перезапустить отладку. Правки модуля, сделанные во время сеанса отладки, начинают работать только после сохранения и обновления конфигурации базы (F7).
Отладка в веб-клиенте отличается?
Принцип тот же: запуск через Отладка → Начать отладку → Веб-клиент. Для опубликованной на веб-сервере базы отладку нужно разрешить и в публикации, и на сервере 1С.
Как отладить обработку из внешнего файла?
Откройте внешнюю обработку в том же Конфигураторе, где запущена отладка, поставьте точки и откройте этот же файл в клиенте. Точки сработают, если путь к файлу совпадает.