Имя: Пароль:
   
1C
 
УФ : Как получить текущую строку дерева.
0 СамоСабой
 
26.04.24
18:06
Здравствуйте !
Имеем дерево значений размещенное на форме.
Требуется программно получить строку дерева на которой в данный мом установлен курсор.
&НаКлиенте
Функция ПолучимИдСтроки()
  ЭтаФорма.Элементы.МоеДерево.ТекущаяСтрока;
КонецФункции
Возвращает значение индекса = 694

&НаСервере
Получим индексы всех строк
Дер = ДанныеФормыВЗначение(ДеревоОбъектов,Тип("ДеревоЗначений"));  
Для каждого СтрДер Из Дер.Строки Цикл
Сообщить(СтрДер.Индекс());
КонецЦикла;  
Получаем индексы всех строк на 1-ом уровне - значения от 0 до 10 (у меня тут всего 11 строк)
Для требуемой строки получаем индекс = 0
т.е. Индекс полученный ранее на клиенте не наблюдается нигде

&НаСервере
Дер.Строки.НайтиПоИндексу(0) - получаем требуемую строку
Дер.Строки.НайтиПоИндексу(694) - получаем ошибку

Вопрос?
Для чего нужен полученный на клиенте индекс 694
и как мне всё таки получить на сервере текущую строку?
1 СамоСабой
 
26.04.24
18:15
Сори - закралась ошибка. Правильно будет так :
&НаСервере
Дер.Строки.Получить(0) - получаем требуемую строку
Дер.Строки.Получить(694) - получаем ошибку
2 СамоСабой
 
26.04.24
18:30
Можно конечно добавить ключевое поле в каждую строку и использовать метод
Дер.Строки.Найти(ЗначениеКлюча,"МойКлюч")
Однако хочется надеяться, что есть возможность найти строку используя существующие индексы
3 arsik
 
26.04.24
18:41
У Дер. - на сервере тип какой?
4 СамоСабой
 
26.04.24
18:44
(3) Тип - ДеревоЗначений
5 arsik
 
26.04.24
18:45
Ты же знаешь, что у дерева древовидная структура да?
6 СамоСабой
 
26.04.24
18:47
(5) Да - я это знаю
7 lubitelxml
 
26.04.24
18:51
(0) Дер.Строки.НайтиПоИндексу(694) - получаем ошибку.
Как бы логично, на первом уровне нет такой строки.
Там вроде через идентификатор все очень просто делается
8 Смотрящий
 
26.04.24
18:55
(0) Неправильно ты дядя Федор идентификатор получаешь
ЭтаФорма.Элементы.МоеДерево.ТекущаяСтрока.ПолучитьИдентификатор()
9 Смотрящий
 
26.04.24
18:56
и ДеревоОбъектов.ПолучитьПоИдентификатору(ПолучанныйВ8Идентификатор)
10 СамоСабой
 
26.04.24
18:57
(7) Если имеете в виду
НайтиПоИдентификатору(<Идентификатор>)
то это метод объекта ДанныеФормыСтруктураСКоллекцией
а мне надо строку Дерева получить.
Данные формы я автоматом получаю при

ЭтаФорма.Элементы.МоеДерево.ТекущиеДанные

без всяких поисков
11 СамоСабой
 
26.04.24
19:01
(8) ЭтаФорма.Элементы.МоеДерево.ТекущаяСтрока - это число из него уже ничего не получишь, причем оно собственно и равно самому требуемому идетификатору
12 Смотрящий
 
26.04.24
19:11
ТекущиеДанные, пардон, перепутал
13 СамоСабой
 
26.04.24
19:28
(12) ПолучитьПоИдентификатору - нет такого метода
есть НайтиПоИдентификатору - получает ДанныеФормы
которые и так уже есть
14 СамоСабой
 
26.04.24
19:30
(11) Получаю тоже самое значение = 694
15 СамоСабой
 
26.04.24
19:37
Попробовал так:

&НаКлиенте
ИдСтроки = ЭтаФорма.Элементы.ДеревоОбъектов.ТекущаяСтрока;  

&НаСервере
ДФ = ДеревоОбъектов.НайтиПоИдентификатору(ИдСтроки);
ТребуемаяСтрока = ДанныеФормыВЗначение(ДФ,Тип("СтрокаДереваЗначений"));  

Говорит :
"Несоответсвие типов. Параметр номер 2"
16 СамоСабой
 
26.04.24
21:34
Ну в общем добавил я реквизит Ключ, заполнил его уникальными значениями.
И ищу по нему - все работает.

Если ктото знает лучшее решение - прошу сообщить
17 sikuda
 
27.04.24
10:37
Процедура ДеревоЗначенийПередРазворачиванием(Элемент, Строка, Отказ) 
	Ветвь = ДеревоЗначений.НайтиПоИдентификатору(Строка)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.