К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как посмотреть дерево значений в отладчике 1С

Как просмотреть дерево значений в отладчике 1С: табло, вычисление выражений, вывод в табличный документ и типичные ошибки при отладке.

Дерево значений в 1С — иерархическая структура данных, которую нельзя просто «развернуть глазами» в отладчике так же легко, как таблицу значений. При наведении курсора на переменную типа ДеревоЗначений в окне «Табло» вы увидите только тип объекта, а не его содержимое. Чтобы реально увидеть строки, колонки и вложенные уровни, нужно использовать специальные приёмы: вычисление выражений, обход дерева в коде или вывод в табличный документ.

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

Почему дерево значений не отображается в табло напрямую

В отладчике 1С окно «Табло» и всплывающая подсказка при наведении на переменную показывают для сложных объектов только их тип и служебную информацию. Для дерева значений вы увидите надпись вида «ДеревоЗначений» без содержимого. Это ограничение платформы: дерево — объект с рекурсивной структурой, и у него нет встроенного визуализатора в окне табло.

Для сравнения: таблицу значений в отладчике можно посмотреть через команду «Показать значение в отдельном окне» (F2 на строке табло), где она откроется в виде привычной таблицы. Для дерева значений такая команда также существует, но работает иначе — откроется окно с коллекцией, где видны колонки и строки верхнего уровня, а вложенность приходится раскрывать вручную через свойство «Строки» каждой строки.

Способ 1. Просмотр через «Вычислить выражение» и F2

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

Далее нажмите F2 или кнопку «Показать значение в отдельном окне» (иконка с лупой). Откроется окно, где видны колонки дерева и строки верхнего уровня. Чтобы добраться до вложенных строк, выберите конкретную строку и смотрите её свойство «Строки» — это снова коллекция, которую можно открыть тем же приёмом. Для глубоких деревьев это утомительно, но для проверки пары уровней вполне достаточно.

Как открыть дерево значений в отладчике
  1. 1
    Поставьте точку останова после заполнения дерева и запустите отладку (F5)
  2. 2
    Когда выполнение остановится, выделите имя переменной с деревом
  3. 3
    Нажмите Shift+F9 — откроется окно «Вычислить выражение»
  4. 4
    Нажмите F2 или кнопку показа значения в отдельном окне
  5. 5
    Просматривайте колонки и строки; вложенные строки открывайте через свойство Строки

Способ 2. Вычисление свойств дерева в выражениях

Через Shift+F9 можно вычислять не только саму переменную, но и выражения с ней. Это позволяет быстро получить сводную информацию, не раскрывая структуру целиком. Полезные выражения:

  • Дерево.Колонки.Количество() — число колонок;
  • Дерево.Строки.Количество() — число строк верхнего уровня;
  • Дерево.Строки.Найти("ИскомоеЗначение", "ИмяКолонки", Истина) — поиск строки с учётом подчинённых уровней;
  • Дерево.Строки[0].Строки.Количество() — число подчинённых строк у первой строки.

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

Способ 3. Вывод дерева в табличный документ

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

bsl
Процедура ВывестиДерево(Строки, ТабДок, Уровень = 0)
    Для Каждого Строка Из Строки Цикл
        Отступ = "";
        Для И = 1 По Уровень Цикл
            Отступ = Отступ + "    ";
        КонецЦикла;
        ТабДок.Вывести(Отступ + Строка(Строка.Наименование));
        ВывестиДерево(Строка.Строки, ТабДок, Уровень + 1);
    КонецЦикла;
КонецПроцедуры

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

Не забудьте удалить или закомментировать отладочный вывод после проверки. В клиент-серверном режиме вывод табличного документа на сервере невозможен — выполняйте такой код на клиенте или в толстом клиенте, либо передавайте данные для отображения.

Способ 4. Обход дерева в цикле с точкой останова

Если нужно проверить конкретные значения в процессе обработки, поставьте точку останова внутри цикла обхода дерева. Тогда в табло можно добавить выражения вида Строка.Сумма, Строка.Количество и наблюдать их изменение при каждой итерации (клавиша F10 для шага).

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

При отладке больших деревьев удобнее всего сочетать подходы: сначала через Shift+F9 проверить количество строк и найти нужную ветку методом Найти, а затем поставить условную точку останова в цикле обхода именно на эту строку. Это экономит время по сравнению с ручным раскрытием всех уровней.
ПЗ
Практическое замечание

Способ 5. Консоль кода и внешние инструменты

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

Альтернатива — сериализация дерева. Преобразуйте дерево в значение через ЗначениеВСтрокуВнутр или выгрузите в XML и сохраните в файл, затем откройте файл и изучите структуру. Это особенно полезно, когда нужно сравнить состояние дерева на разных этапах обработки или передать данные коллеге для анализа.

Типичные ошибки при просмотре дерева значений

Типичные ошибки
01
Ожидание, что дерево развернётся в табло как таблица значений — для дерева нет такого визуализатора, нужно открывать значение через F2 или вычислять выражения
02
Просмотр только строк верхнего уровня и вывод о том, что дерево пустое — данные могут лежать во вложенных коллекциях Строки
03
Поиск методом Найти без параметра Истина — поиск идёт только по верхнему уровню, и строка «не находится», хотя она есть на нижних уровнях
04
Попытка вывести табличный документ в серверном коде — на сервере нет интерфейса, вывод возможен только на клиенте
05
Отладка фонового задания без включения отладки сервера и автоматического подключения — точки останова просто не сработают

Отдельная частая ситуация — переменная дерева показывает «Неопределено» или пустую коллекцию строк. Проверьте, что останов произошёл после строки заполнения дерева, а не до неё. Также убедитесь, что вы смотрите ту же переменную: если дерево заполняется внутри функции и возвращается, локальная переменная вне функции может быть ещё не присвоена.

Контрольные точки

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

Выражение Дерево.Строки.Количество() в окне Shift+F9
Норма

Возвращает ожидаемое число строк верхнего уровня

Тревожный признак

Возвращает 0 или ошибку — дерево не заполнено или переменная недоступна

Поиск строки через Найти с параметром Истина
Норма

Возвращается объект строки дерева

Тревожный признак

Возвращается Неопределено — искомого значения нет ни на одном уровне

Точка останова внутри цикла обхода
Норма

Выполнение останавливается, в табло видны значения колонок строки

Тревожный признак

Точка не срабатывает — цикл не выполняется или отладка не подключена

FAQ

Можно ли посмотреть дерево значений так же удобно, как таблицу значений?

Полноценного визуализатора с раскрывающейся иерархией в стандартном отладчике нет. Ближайший аналог — открытие значения через F2 после Shift+F9: видны колонки и строки верхнего уровня, а вложенность раскрывается через свойство Строки каждой строки. Для полного обзора структуры удобнее вывести дерево в табличный документ с отступами.

Почему в табло переменная дерева показывает только «ДеревоЗначений» без данных?

Это штатное поведение платформы: для сложных объектов табло отображает тип, а не содержимое. Чтобы увидеть данные, вычислите выражение (Shift+F9) и нажмите F2 для показа значения в отдельном окне, либо вычисляйте конкретные свойства вроде Дерево.Строки.Количество().

Как проверить, есть ли в дереве строка с нужным значением, не раскрывая все уровни?

Используйте в окне «Вычислить выражение» метод Найти с четвёртым параметром Истина: Дерево.Строки.Найти(Значение, "ИмяКолонки", Истина). Параметр Истина включает поиск по всем уровням иерархии. Если возвращается Неопределено — строки с таким значением в дереве нет.

Точка останова в коде обхода дерева не срабатывает. В чём причина?

Чаще всего код выполняется на сервере или в фоновом задании, а отладка сервера не включена либо не настроено автоматическое подключение предметов отладки. Проверьте настройки в меню «Отладка» → «Подключение», включите отладку на сервере в кластере и убедитесь, что в настройках подключения отмечены нужные типы предметов отладки.

Как посмотреть дерево, если отладка недоступна?

Выведите дерево в табличный документ рекурсивной процедурой, сериализуйте его через ЗначениеВСтрокуВнутр или выгрузите в XML-файл для последующего анализа. Также можно использовать внешнюю обработку «консоль кода», воспроизведя в ней заполнение дерева в пользовательском режиме.

Итог

Что важно запомнить

Дерево значений не раскрывается в табло напрямую. Основные приёмы просмотра: Shift+F9 с показом значения через F2, вычисление свойств и поиска по выражениям, рекурсивный вывод в табличный документ и условные точки останова в цикле обхода. После отладки удаляйте временный код вывода.