Как на сервере получить строку Дерева, выбранную на клиенте ?

1. kudlach 13 08.09.16 16:09 Сейчас в теме
Имеем:
РеквизитФормыДеревоЗначений - тип Дерево значений
ЭлементФормыДерево - путь к данным = РеквизитФормыДерево

При изменении на форме Реквизита ЭлементФормыДеревоНоменклатура
нужно воткнуть в РеквизитФормыДерево ветку из Спецификации (по умолчанию Спецификация=Номенклатура.Спецификация)

&НаКлиенте
ТекущиеДанные=Элементы.ЭлементФормыДерево.ТекущиеДанные; //это ДанныеФормыЭлементКоллекции

&НаСервере
ДеревоФормы = РеквизитФормыВЗначение("РеквизитФормыДеревоЗначений");
//это Универсальные коллекции значений/Дерево значений
//...
//Изменения
ЗначениеВРеквизитФормы(ДеревоФормы, "РеквизитФормыДеревоЗначений");
Показать


Вопрос - подскажите, пожалуйста, как на сервере получить строку, выбранную на клиенте ???...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. herfis 515 12.09.16 10:31 Сейчас в теме
(1) kudlach, Никак. Только поиском по ключевым атрибутам выбранной строки (если с учетом уровней - то и всех ее родителей). Ведь это преобразование в другую структуру данных, на которую не будут работать предыдущие ссылки. Да и преобразование дерева туда-сюда ради вставки ветки не кажется мне хорошим решением. Лучше вставлять непосредственно в "ДанныеФормыДерево".
2. _KaA 110 09.09.16 14:35 Сейчас в теме
А точно надо искать строку в дереве?

Может достаточно такого:

&НаКлиенте
Процедура Реквизит1Реквизит1ПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.ДеревоФормы.ТекущиеДанные;
	ПолучитьСтрокуДереваЗначений(ТекущиеДанные.ПолучитьИдентификатор());
	
КонецПроцедуры

&НаСервере
Процедура ПолучитьСтрокуДереваЗначений(ИндексТекущейСтроки)
	
	СтрокаДереваФормы = ДеревоФормы.НайтиПоИдентификатору(ИндексТекущейСтроки);
		
КонецПроцедуры
Показать
odinsmot; Wersia; mihapat; user1011815; +4 Ответить
3. disa_ostr 11.09.16 15:36 Сейчас в теме
(2) _KaA, элементы дерева насколько помню могу дублироваться если несколько раз перезаполнять дерево, лучше структуру данных строки передавать на сервер
4. _KaA 110 12.09.16 10:19 Сейчас в теме
(3) disa_ostr,

Не могут. Идентификатор будет уникальным всегда. Так, например, создайте дерево формы, добавьте строку, ее идентификатор будет "1". Удалите ее и добавьте новую строку дерева формы. У новой строки идентификатор будет "2". Внимание, речь идет о Дереве формы, не путать со значением Дерево значений.

Ну как то так, набросайте обработку, поиграйтесь...
7. user1011815 7 04.11.20 19:10 Сейчас в теме
(2) Спасибо, добрый человек, именно так это и отработало. И танцы с РеквизитФормыВЗначение действительно не нужны.
6. spenser123 12.09.16 12:26 Сейчас в теме
Предварительно на клиенте делаешь структуру из текущих данных и передаешь её на сервер, а там уже:
  Деревце =  ДанныеФормыВЗначение(ДопыДерево,Тип("ДеревоЗначений"));
	НайденныеСтрокиДерева = Деревце.Строки.НайтиСтроки(ТекДанные,Истина);
	Для Каждого СтрДерева из НайденныеСтрокиДерева Цикл
		СтрДерева.Покупаем = Истина;
		Если ТекДанные.Номенклатура.Услуга = Ложь Тогда
			СтрДерева[ИмяКолонкиСклада]=СтрДерева[ИмяКолонкиСклада]-1;
		КонецЕсли;
	КонецЦикла;
	
	ЗначениеВДанныеФормы(Деревце,ДопыДерево);
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот