8.х Дерево значений

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем LizaVETTA, 26 ноя 2015.

  1. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    Добрый день! Столкнулась с проблемой,когда формирую дерево значений, и при повторной активизации узла, дублируются подчиненные узлы. уже даже не знаю, как это исправить, пробовала и очищать список, но видимо не там очищаю, потому что после "очистки" уже дерево не строиться...
    пример кода:
    Код:
    &НаКлиенте
    Процедура ТаблицаДеревоПриАктивизацииСтроки(Элемент)
        Строка_ы = Дерево.НайтиПоИдентификатору(Элементы.ТаблицаДерево.ТекущаяСтрока);
        Строки = Строка_ы.ПолучитьЭлементы();
        Для каждого Строка из Строки Цикл
          Данные = ПолучитьСтроки(Строка.GUID);
          НоваяСтрока1 = Строка.ПолучитьЭлементы();
            Для каждого СтрДанных из Данные Цикл
                НоваяСтрока = НоваяСтрока1.Добавить();
                НоваяСтрока.GUID = СтрДанных.Значение;
                НоваяСтрока.DISPLAYNAME = СтрДанных.Представление;
            КонецЦикла;
        КонецЦикла;
    КонецПроцедуры
    
    Функция ПолучитьСтроки возвращает Список подчиненных узлов.

    Вложения:

    • 1.png
      1.png
      Размер файла:
      17,1 КБ
      Просмотров:
      11
    • 22.png
      22.png
      Размер файла:
      25,3 КБ
      Просмотров:
      11
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Вы ж сами делаете:

    НоваяСтрока = НоваяСтрока1.Добавить();

    Почему удивляетесь?
  3. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    а как же мне добавить подчиненные узлы?!
    у меня дерево формируется из списка, который возвращает функция а в ней запрос к справочнику
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Вероятно, нужно проверять на существование подчиненных строк, если могут быть повторные активации родительского узла.

    Но не понятен момент: у вас дерево динамически что ли формируется? Мож проще сразу все дерево строить и потом уже показывать пользователю?
  5. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    да, динамически. проблема в том,что таково условие поставленной задачи, что бы оно формировалось динамически. так как будет обрабатываться очень большой объем информации, так мы экономим ресурсы, потому что будем формировать не все дерево сразу, а только лишь его часть, необходимую пользователю в данный момент времени
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Значит, нужно проверять существование подчиненных строк, удалять все и только потом добавлять новые.
  7. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    не подскажите каким образом?честно говоря я уже пыталась, и ничего у меня не вышло((
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Про ДеревоЗначений в синтаксис-помощнике достаточно подробно написано, даже с небольшими примерами кода.
  9. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    изучила синтаксис-помощник на предмет дерево значений, честно говоря воз и ныне там((
  10. IceBeerG
    Offline

    IceBeerG Опытный в 1С

    Регистрация:
    15 дек 2012
    Сообщения:
    193
    Симпатии:
    11
    Баллы:
    29
    Если будет полезным, вот пример обхода дерева рекурсивно:
    Код:
    Процедура ВывестиДерево(ВыводимаяСтрока, Уровень = 0)
        //Обходим строки текущего уровня дерева
        Для Каждого СтрДерева Из ВыводимаяСтрока.Строки Цикл
            //Формируем отступ чтобы показать иерархию:
            СтрокаОтступ = "";
            Для Инд = 1 По Уровень Цикл
                СтрокаОтступ = СтрокаОтступ + Символы.Таб;   
            КонецЦикла;
           
            //Выводим элемент строки с отступом:
            Сообщить(СтрокаОтступ + СтрДерева.Должность + "(" + СтрДерева.ФИО + ")" );
            //Рекурсивно вызываем процедуру саму из себя для вывода подчиненных элементов дерева:
            ВывестиДерево(СтрДерева, Уровень + 1);
        КонецЦикла;
    КонецПроцедуры
  11. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    нет, к сожалению, это все не то....(((
  12. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    В код не вдумывался.

    Вот это:
    1С вообще не очень приспособлена для всяких оптимизационных финтов. У меня просто один вопрос - у вас вон там идет заполнение в процедуре ПриАктивизацииСтроки(), дерево вы динамически хотите формировать, как это будет работать, если пользователь не мышкой развернет ветку, а например захочет развернуть все ветви дерева с клавиатуры (быстрыми клавишами то бишь)?
  13. TopicStarter Overlay
    LizaVETTA
    Offline

    LizaVETTA Опытный в 1С

    Регистрация:
    14 окт 2015
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    26
    наше дерево не предусматривает это, т.к. процесс должен идти или с одной стороны либо с другой, т.е. дальнейший процесс идет при выборе одной или другой ветви.

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