[РЕШЕНО] Перебрать дерево значений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Samouchka, 19 окт 2015.

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Всем здравствуйте. Как перебрать все строки дерева значения? Процедура вот:

    Код:
    Процедура ОбойтиУровеньДерева(СтрокиДерева)
        СтрокиДерева=Дерево.Строки;
        Для Каждого Строка Из СтрокиДерева Цикл
            Сообщить(Строка.Родитель);
            ОбойтиУровеньДерева(Строка.Строки);
        КонецЦикла;
    КонецПроцедуры
    Дает ошибку после 1 цикла:
    Поле объекта недоступно для записи (Строки)

    Где надо определить СтрокиДерева? Так тоже не работает:

    Код:
    Перем СтрокиДерева
    
    Процедура ОбойтиУровеньДерева(СтрокиДерева)
        Для Каждого Строка Из СтрокиДерева Цикл
            Сообщить(Строка.Родитель);
            ОбойтиУровеньДерева(Строка.Строки);
        КонецЦикла;
    КонецПроцедуры
    
    СтрокиДерева=Дерево.Строки;
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.767
    Симпатии:
    509
    Баллы:
    204
    Рекурсия должна иметь точку выхода.
  3. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Закончатся строки дерева, и выйдет. Где определить СтрокиДерева?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.767
    Симпатии:
    509
    Баллы:
    204
    Условие нужно на проверку корня. Или у корня подкорень есть ?
  5. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    В моем случае Дерево - это ТабличноеПоле типа ДеревоЗначений. Сначала вывожу туда само ДеревоЗначений. А обойти надо элемент формы "Дерево". Структура дерева сложная. Корень один, ну у него много веток, подветок и т.д. Нужно перебрать каждую строку.
  6. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    У вас там бред написан.
    СтрокиДерева=Дерево.Строки; - это что за хрень и как оно должно работать?
  7. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Последнее сообщение в теме "ДеревоЗначений" помогло. Во-первых нужно было передать не строки дерева, а первую строку (индекс 0). Меня сбили с толку именем во множ.числе "СтрокиДерева", когда брал процедуру с инета. Во-вторых, первую строку дерева нужно определить в другой процедуре, из которой и вызвать рекурсию. Вот полностью рабочий код:

    Код:
    Процедура ОбойтиУровеньДерева(Строка)
    Коллекция=Строка.Строки;
    Для А=0 По Коллекция.Количество()-1 Цикл
        ПодСтрока=Коллекция.Получить(А);
        Сообщить(ПодСтрока.Родитель.Элемент);
        ОбойтиУровеньДерева(ПодСтрока);
    КонецЦикла;
    КонецПроцедуры
    
    Процедура Надо()
        Строка=Дерево.Строки.Получить(0);
        ОбойтиУровеньДерева(Строка);
    КонецПроцедуры
    --- Объединение сообщений, 19 окт 2015 ---
    Да, всем спасибо за участие.

Поделиться этой страницей