Имя: Пароль:
1C
1С v8
Дерево Значений: Добавление Дочерних строк в выделенную строку
0 Slava333
 
11.08.13
15:41
Добрый день!

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

Обрабатываю событие "Выбор" так:

&НаКлиенте
Процедура ДеревоВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    //Получаю коллекцию строк дерева
        ЭлементыДерева = ДеревоЗнач.ПолучитьЭлементы();

        //Получаю выделенную строку
        ВыбСтрока = ЭлементыДерева.Получить(ВыбраннаяСтрока).ПолучитьЭлементы();
    
    //Добавляю в выдеденныю строку дочерние строки
        Для а = 0 по КоличествоДочернихСтрок Цикл

        Новаястрока = ВыбСтрока.Добавить();
    
            //Заполняю строку...
        
    КонецЦикла;

КонецПроцедуры



Этот код работает только со строками верхнего уровня, для строк 2 уровня ЭлементыДерева.Получить(ВыбраннаяСтрока).ПолучитьЭлементы();
возвращает: "Недопустимое значение параметра"

т.е. как я понял метод Получить() принимает только индексы своего уровня.


Вопрос: как мне добавлять подстроки в выделенную строку вне зависимости от уровня вложенности?
1 PR
 
11.08.13
15:43
(0) >>ВыбСтрока = ЭлементыДерева.Получить(ВыбраннаяСтрока).ПолучитьЭлементы();
Что за хрень?
2 Slava333
 
11.08.13
15:53
(1) >>Что за хрень?

Как я понимаю, элемент коллекции строк "ЭлементыДерева"

т.е.  ЭлементыДерева.Получить() возвращает строку по идексу,

ВыбраннаяСтрока - индекс выделенной строки.
3 PR
 
11.08.13
15:55
(2) А ТекущаяСтрока тоже индекс возвращает?
4 Slava333
 
11.08.13
16:08
(3) Как я помню да, а что нет?
5 zladenuw
 
11.08.13
16:10
что как рекурсия. и все
6 PR
 
11.08.13
16:10
(4) А проверить?
7 Slava333
 
11.08.13
16:50
(6) Ну да Элементы.Дерево.ТекущаяСтрока
возвращает тоже число что и ВыбраннаяСтрока

Мы ведь с вами об одном и том де говорим?
8 Slava333
 
11.08.13
16:51
(5) zladenuw не понял вас.
9 zladenuw
 
11.08.13
17:39
10 Slava333
 
11.08.13
17:55
(9) Слыхать то слыхал. Но мне то нужно не все дерево разом забивать, а отдельные его строки которые пользователю заблагорассудится. Как мне тут рекурсию применить? (
11 zladenuw
 
11.08.13
17:59
(10) ну так блин. он выбрал. а ты по рекурсии заполняешь текущею строку и все.
12 Slava333
 
11.08.13
18:28
(11) Ну так для того что бы заполнять эту строку её еще как то вычислить нужно.
Вот смотрите:
параметр "ВыбраннаяСтрока" возвращает уникальный индекс строки.
ЭлементыДерева.Получить(), как я понял принимает только индексы своего уровня. т.е. от нуля до количества строк первого уровня.

То есть что бы получить элементы второго уровня мне нужно написать так:

ЭлементыДерева = ДеревоЗнач.ПолучитьЭлементы();
Подстрока = ЭлементыДерева.Получить(ИндексСтроки).ПолучитьЭлементы(); //Элементы второго уровня

т.е индекс выделенной строки не будет совпадать с индексом подстроки. Как с этим бороться я не знаю. (
13 zladenuw
 
11.08.13
18:35
(12) зачем ? если ВыбраннаяСтрока возврашаеть выбранную строку
14 zladenuw
 
11.08.13
18:35
(13) а блин уф
15 zladenuw
 
11.08.13
18:41
а так разве не ? Элемент.ТекущиеДанные ?
16 zladenuw
 
11.08.13
18:45
есть такая еще штука

ДанныеФормыЭлементДерева (FormDataTreeItem)
ПолучитьИдентификатор (GetID)
17 Slava333
 
11.08.13
19:14
Все разобрался:
ВыбСтрока = ДеревоЗнач.НайтиПоИдентификатору(ВыбраннаяСтрока).ПолучитьЭлементы();

zladenuw Огромное спасибо!