Точки останова, шаги и Табло: как найти ошибку в коде 1С 8.3

· 10 мин

Содержание

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

Это пошаговое руководство для программистов, которые знают встроенный язык, но не используют отладчик на полную. Здесь — горячие клавиши , условные точки останова, отладка серверного кода в клиент-серверной базе, фоновых заданий и внешних обработок, а также причины, по которым точка останова «не срабатывает». Всё описано для платформы 8.3 и интерфейса «Такси»; механизм общий для всех конфигураций — БП, ЗУП, УТ и самописных.

Зачем нужен отладчик, если есть Сообщить()

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

Отладчик решает задачу без изменения модуля:

  • 🔍 останавливает код в любой точке и показывает все локальные переменные;
  • 🧭 показывает стек вызовов — цепочку процедур, которая привела в эту строку;
  • 🧮 вычисляет произвольное выражение в контексте остановки, включая выполнение запроса;
  • 🎯 останавливается только при выполнении условия, например на конкретном товаре;
  • 🚨 ловит исключение в момент возникновения, а не после того, как его перехватили.

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

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

Файловая база

В файловом варианте ничего дополнительно включать не нужно. Откройте базу в конфигураторе, затем Отладка → Начать отладку и выберите клиент: тонкий, толстый или веб-клиент. Отлаживается и клиентский, и серверный код: в файловом режиме «сервер» работает внутри процесса клиента.

Клиент-серверная база

Серверный код здесь выполняется рабочим процессом кластера 1С. Чтобы конфигуратор мог к нему подключиться, сервер должен быть запущен в режиме отладки. Для этого в командную строку службы агента сервера ragent.exe добавляют ключ -debug.

Порядок действий на сервере 1С:

  1. Откройте редактор реестра и найдите службу агента в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services (имя вида 1C:Enterprise 8.3 Server Agent).
  2. В параметре ImagePath после пути к ragent.exe допишите -debug.
  3. Перезапустите службу агента.

Пример строки после правки:

"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -debug -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

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

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

Протокол отладки: TCP/IP или HTTP

В платформе 8.3 есть два механизма отладки. Старый работает по TCP/IP, новый — по HTTP через отдельный сервер отладки dbgs.exe. HTTP-отладка удобнее: проходит через сетевые экраны и поддерживает отладку мобильных приложений и веб-клиента.

Режим выбирают в конфигураторе в Сервис → Параметры → Отладка. Для клиент-серверной базы с HTTP-отладкой агент запускают с ключами -debug -http. Механизм на сервере и в конфигураторе должен совпадать, иначе конфигуратор не увидит серверные предметы отладки.

Конфигурация базы данных должна совпадать с основной

Отладчик выполняет код, сохранённый в конфигурации базы данных. Если вы поправили модуль, но не выполнили Конфигурация → Обновить конфигурацию базы данных (F7), при старте отладки платформа предложит обновить. Откажетесь — точки останова в изменённых строках будут «съезжать» или не сработают.

Инструменты отладки в конфигураторе 1С

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

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

Табло и окно «Локальные»

Окно «Локальные» сразу показывает все переменные текущей процедуры. «Табло» — ваш список наблюдения: перетащите туда выражение или переменную, и значение будет обновляться на каждом шаге. В Табло удобно держать, например, Объект.Товары.Количество() и сумму документа, чтобы видеть, на какой строке они меняются.

Стек вызовов

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

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

Shift+F9 открывает окно, в котором можно ввести любое выражение встроенного языка. Объекты разворачиваются деревом, таблицы значений показываются таблицей. Самый полезный приём — выгрузить результат запроса прямо в окне:

Запрос.Выполнить().Выгрузить()

Так видно, что вернул запрос, ещё до того, как код начнёт обходить выборку.

Условные точки останова

Если цикл проходит 5 000 строк, а проблема в одной, обычная точка останова бесполезна. Откройте Отладка → Список точек останова (Alt+F9), выберите точку и задайте условие. Либо в меню Отладка выберите команду установки точки останова с условием прямо на строке.

Пример условия для цикла по выборке:

Выборка.Номенклатура.Код = "00-00000123"

Код остановится только на этом товаре. Кружок точки с условием отличается значком от обычной.

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

Команда Отладка → Остановка по ошибке заставляет отладчик останавливаться в момент исключения — даже если оно перехвачено в Попытка ... Исключение. Можно задать фильтр по тексту ошибки, чтобы не останавливаться на «шумных» исключениях, которые типовая конфигурация обрабатывает штатно.

Пошаговая отладка: шаг в процедуру, шаг через строку, выход наверх

Пошаговая отладка — основа работы. Разберём, как сочетать три команды шагов на реальной задаче.

Допустим, документ «Реализация товаров и услуг» проводится, но в регистр попадает неверная себестоимость. Порядок действий:

  1. Откройте модуль объекта документа и найдите процедуру ОбработкаПроведения.
  2. Поставьте точку останова F9 на первой строке процедуры.
  3. Запустите отладку F5, в открывшейся базе проведите проблемный документ.
  4. Конфигуратор остановится на строке. Идите по ней F10 — каждый вызов выполнится целиком.
  5. Когда дойдёте до вызова, который формирует движения, нажмите F11 и попадёте внутрь.
  6. Если внутри длинная служебная процедура, которая вам не нужна, нажмите Shift+F11 — она доработает, и вы вернётесь к вызову.
  7. Остановившись на строке после формирования движений, вычислите Движения.<ИмяРегистра>.Выгрузить() в окне Shift+F9 и проверьте суммы.

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

Shift+F10 («Идти до курсора») экономит время на циклах: поставьте курсор на строку после цикла и нажмите комбинацию — отладчик выполнит весь цикл и остановится.

Клиент или сервер: где остановится код

Код с директивой &НаСервере выполняется на сервере, &НаКлиенте — на клиенте. Отладчик проходит переходы между ними, но только если подключён к обоим предметам отладки. В клиент-серверной базе без ключа -debug на агенте вы сможете пройти клиентскую процедуру, а на серверный вызов шаг F11 просто «перепрыгнет».

Отладка фоновых заданий и внешних обработок

Фоновые и регламентные задания

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

Для клиент-серверной базы условие то же — сервер в режиме отладки. Дальше:

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

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

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

Внешние обработки и отчёты

Внешняя обработка — это файл .epf (отчёт — .erf). Чтобы отладить её:

  1. В конфигураторе откройте файл через Файл → Открыть.
  2. Поставьте точки останова в модуле объекта или формы.
  3. Запустите отладку F5 и в режиме 1С:Предприятие откройте тот же самый файл по тому же пути через Файл → Открыть.

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

Расширения конфигурации

Код расширения открывается из Конфигурация → Расширения конфигурации. Точки останова ставятся в модулях расширения так же, как в основной конфигурации. Перед отладкой обновите расширение в базе данных — иначе выполняется старая версия.

Почему точка останова не срабатывает

Это самая частая жалоба. Причины и проверки собраны в диагностике ниже.

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

Ещё две ловушки, о которых узнают на опыте:

  • ⏸️ Отладка зависшего пользователя. Если в клиент-серверной базе вы остановили серверный вызов чужого сеанса, пользователь ждёт, пока вы не нажмёте F5. Подключайтесь только к своим сеансам.
  • 🔁 Изменение значений «на лету». Вычисление выражения с вызовом процедуры, которая пишет в базу, выполнит запись по-настоящему. В окне Shift+F9 используйте только читающие выражения.

Практические примеры отладки частых проблем

Пример 1. Запрос возвращает пустой результат

Поставьте точку на строке после Запрос.Выполнить(). В окне вычисления выражения проверьте по очереди:

  • Запрос.Параметры — заданы ли все параметры и нужного ли они типа;
  • Запрос.Выполнить().Выгрузить() — что реально вернулось;
  • Запрос.Текст — скопируйте текст в консоль запросов и проверьте с теми же параметрами.

Частая находка: параметр «Дата» передан как дата с временем 00:00:00, и документы, проведённые днём, не попадают в отбор.

Пример 2. Ошибка «Поле объекта не обнаружено»

Включите Отладка → Остановка по ошибке и повторите действие. Отладчик остановится ровно на строке с ошибкой. Посмотрите в окне «Локальные», какого типа переменная: обычно вместо объекта там Неопределено или ссылка другого типа из составного реквизита.

Пример 3. Цикл обрабатывает 3 000 строк, ошибка на одной

Не идите по шагам. Поставьте условную точку останова внутри цикла с условием на номер строки или ключевое значение:

СтрокаТЧ.НомерСтроки = 1847

Отладчик пропустит 1 846 итераций и остановится на нужной.

Пример 4. Медленное проведение

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

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

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

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