Разработка и Конфигурация · 10 мин
Как посмотреть дерево значений в отладчике 1С
Как просмотреть дерево значений в отладчике 1С: табло, вычисление выражений, вывод в табличный документ и типичные ошибки при отладке.
Дерево значений в 1С — иерархическая структура данных, которую нельзя просто «развернуть глазами» в отладчике так же легко, как таблицу значений. При наведении курсора на переменную типа ДеревоЗначений в окне «Табло» вы увидите только тип объекта, а не его содержимое. Чтобы реально увидеть строки, колонки и вложенные уровни, нужно использовать специальные приёмы: вычисление выражений, обход дерева в коде или вывод в табличный документ.
Проблема усугубляется тем, что дерево значений часто содержит сотни строк с многоуровневой вложенностью, и проверить «глазами» правильность заполнения без инструментов просмотра практически невозможно. Ниже разобраны рабочие способы посмотреть дерево значений в конфигураторе 1С, их ограничения и типичные ошибки, которые мешают увидеть данные.
Почему дерево значений не отображается в табло напрямую
В отладчике 1С окно «Табло» и всплывающая подсказка при наведении на переменную показывают для сложных объектов только их тип и служебную информацию. Для дерева значений вы увидите надпись вида «ДеревоЗначений» без содержимого. Это ограничение платформы: дерево — объект с рекурсивной структурой, и у него нет встроенного визуализатора в окне табло.
Для сравнения: таблицу значений в отладчике можно посмотреть через команду «Показать значение в отдельном окне» (F2 на строке табло), где она откроется в виде привычной таблицы. Для дерева значений такая команда также существует, но работает иначе — откроется окно с коллекцией, где видны колонки и строки верхнего уровня, а вложенность приходится раскрывать вручную через свойство «Строки» каждой строки.
Способ 1. Просмотр через «Вычислить выражение» и F2
Самый быстрый способ — открыть окно просмотра значения. Остановитесь на точке останова после заполнения дерева, выделите имя переменной в коде и нажмите Shift+F9 («Вычислить выражение»). В появившемся окне выражение вычислится, и вы увидите тип «ДеревоЗначений».
Далее нажмите F2 или кнопку «Показать значение в отдельном окне» (иконка с лупой). Откроется окно, где видны колонки дерева и строки верхнего уровня. Чтобы добраться до вложенных строк, выберите конкретную строку и смотрите её свойство «Строки» — это снова коллекция, которую можно открыть тем же приёмом. Для глубоких деревьев это утомительно, но для проверки пары уровней вполне достаточно.
- 1Поставьте точку останова после заполнения дерева и запустите отладку (F5)
- 2Когда выполнение остановится, выделите имя переменной с деревом
- 3Нажмите Shift+F9 — откроется окно «Вычислить выражение»
- 4Нажмите F2 или кнопку показа значения в отдельном окне
- 5Просматривайте колонки и строки; вложенные строки открывайте через свойство Строки
Способ 2. Вычисление свойств дерева в выражениях
Через Shift+F9 можно вычислять не только саму переменную, но и выражения с ней. Это позволяет быстро получить сводную информацию, не раскрывая структуру целиком. Полезные выражения:
Дерево.Колонки.Количество()— число колонок;Дерево.Строки.Количество()— число строк верхнего уровня;Дерево.Строки.Найти("ИскомоеЗначение", "ИмяКолонки", Истина)— поиск строки с учётом подчинённых уровней;Дерево.Строки[0].Строки.Количество()— число подчинённых строк у первой строки.
Обратите внимание на четвёртый параметр метода Найти: значение Истина включает поиск по всем уровням иерархии. Если результат — «Неопределено», значит, строки с таким значением в дереве нет. Это быстрый способ проверить, заполнилось ли дерево ожидаемыми данными, без полного просмотра.
Способ 3. Вывод дерева в табличный документ
Когда дерево большое и нужно увидеть всю структуру целиком, удобнее вывести его в табличный документ с отступами по уровням. Временно вставьте в код процедуру обхода и вызовите её перед точкой останова, либо выполните вывод через внешнюю обработку.
Процедура ВывестиДерево(Строки, ТабДок, Уровень = 0)
Для Каждого Строка Из Строки Цикл
Отступ = "";
Для И = 1 По Уровень Цикл
Отступ = Отступ + " ";
КонецЦикла;
ТабДок.Вывести(Отступ + Строка(Строка.Наименование));
ВывестиДерево(Строка.Строки, ТабДок, Уровень + 1);
КонецЦикла;
КонецПроцедурыРекурсивный обход — стандартный приём работы с деревом значений: процедура вызывает сама себя для коллекции Строки каждой строки. Замените Строка.Наименование на нужную колонку вашего дерева. После выполнения откройте табличный документ — вся иерархия будет видна с отступами, что позволяет оценить и структуру, и данные одновременно.
Не забудьте удалить или закомментировать отладочный вывод после проверки. В клиент-серверном режиме вывод табличного документа на сервере невозможен — выполняйте такой код на клиенте или в толстом клиенте, либо передавайте данные для отображения.
Способ 4. Обход дерева в цикле с точкой останова
Если нужно проверить конкретные значения в процессе обработки, поставьте точку останова внутри цикла обхода дерева. Тогда в табло можно добавить выражения вида Строка.Сумма, Строка.Количество и наблюдать их изменение при каждой итерации (клавиша F10 для шага).
Для рекурсивных процедур удобно добавить в табло параметр уровня вложенности, если он передаётся в процедуру. Так вы будете видеть, на каком уровне иерархии находится текущая строка, и не запутаетесь при глубокой рекурсии. Условные точки останова (правый клик по точке → «Условие») позволяют остановиться только при нужном значении, например когда Строка.Контрагент = ИскомыйКонтрагент.
При отладке больших деревьев удобнее всего сочетать подходы: сначала через Shift+F9 проверить количество строк и найти нужную ветку методом Найти, а затем поставить условную точку останова в цикле обхода именно на эту строку. Это экономит время по сравнению с ручным раскрытием всех уровней.
Способ 5. Консоль кода и внешние инструменты
Если отладка по какой-то причине недоступна (например, код выполняется в фоновом задании или на сервере без включённой отладки), дерево можно исследовать через консоль кода — внешнюю обработку, позволяющую выполнить произвольный код в пользовательском режиме. Загрузите в неё выгрузку дерева или воспроизведите его заполнение.
Альтернатива — сериализация дерева. Преобразуйте дерево в значение через ЗначениеВСтрокуВнутр или выгрузите в XML и сохраните в файл, затем откройте файл и изучите структуру. Это особенно полезно, когда нужно сравнить состояние дерева на разных этапах обработки или передать данные коллеге для анализа.
Типичные ошибки при просмотре дерева значений
Отдельная частая ситуация — переменная дерева показывает «Неопределено» или пустую коллекцию строк. Проверьте, что останов произошёл после строки заполнения дерева, а не до неё. Также убедитесь, что вы смотрите ту же переменную: если дерево заполняется внутри функции и возвращается, локальная переменная вне функции может быть ещё не присвоена.
Как проверить результат
Возвращает ожидаемое число строк верхнего уровня
Возвращает 0 или ошибку — дерево не заполнено или переменная недоступна
Возвращается объект строки дерева
Возвращается Неопределено — искомого значения нет ни на одном уровне
Выполнение останавливается, в табло видны значения колонок строки
Точка не срабатывает — цикл не выполняется или отладка не подключена
FAQ
Можно ли посмотреть дерево значений так же удобно, как таблицу значений?
Полноценного визуализатора с раскрывающейся иерархией в стандартном отладчике нет. Ближайший аналог — открытие значения через F2 после Shift+F9: видны колонки и строки верхнего уровня, а вложенность раскрывается через свойство Строки каждой строки. Для полного обзора структуры удобнее вывести дерево в табличный документ с отступами.
Почему в табло переменная дерева показывает только «ДеревоЗначений» без данных?
Это штатное поведение платформы: для сложных объектов табло отображает тип, а не содержимое. Чтобы увидеть данные, вычислите выражение (Shift+F9) и нажмите F2 для показа значения в отдельном окне, либо вычисляйте конкретные свойства вроде Дерево.Строки.Количество().
Как проверить, есть ли в дереве строка с нужным значением, не раскрывая все уровни?
Используйте в окне «Вычислить выражение» метод Найти с четвёртым параметром Истина: Дерево.Строки.Найти(Значение, "ИмяКолонки", Истина). Параметр Истина включает поиск по всем уровням иерархии. Если возвращается Неопределено — строки с таким значением в дереве нет.
Точка останова в коде обхода дерева не срабатывает. В чём причина?
Чаще всего код выполняется на сервере или в фоновом задании, а отладка сервера не включена либо не настроено автоматическое подключение предметов отладки. Проверьте настройки в меню «Отладка» → «Подключение», включите отладку на сервере в кластере и убедитесь, что в настройках подключения отмечены нужные типы предметов отладки.
Как посмотреть дерево, если отладка недоступна?
Выведите дерево в табличный документ рекурсивной процедурой, сериализуйте его через ЗначениеВСтрокуВнутр или выгрузите в XML-файл для последующего анализа. Также можно использовать внешнюю обработку «консоль кода», воспроизведя в ней заполнение дерева в пользовательском режиме.
Что важно запомнить
Дерево значений не раскрывается в табло напрямую. Основные приёмы просмотра: Shift+F9 с показом значения через F2, вычисление свойств и поиска по выражениям, рекурсивный вывод в табличный документ и условные точки останова в цикле обхода. После отладки удаляйте временный код вывода.