Добавление группы в дерево значений

1. LomayaZakat 04.03.21 14:14 Сейчас в теме
Есть дерево значений. Одна из колонок "Номенклатура" - Ссылка на иерархический справочник.
Добавляю новую строку в ДЗ. Если это группа, тогда в дерево добавляю все группы и элементы из выбранной группы. Запрос сформировал, а вот добавить в ДЗ иерархию не могу.

В примерах есть только выгрузка результата запроса, а вот добавления нет.

	Если Ссылка.ЭтоГруппа Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	1 КАК Пометка,
		               |	СпрНоменклатура.Ссылка КАК Ссылка,
		               |	УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
		               |	НЕОПРЕДЕЛЕНО КАК IDТовар,
		               |	НЕОПРЕДЕЛЕНО КАК IDУпаковка
		               |ИЗ
		               |	Справочник.Номенклатура КАК СпрНоменклатура
		               |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
		               |		ПО СпрНоменклатура.ЕдиницаДляОтчетов = УпаковкиЕдиницыИзмерения.Ссылка
		               |ГДЕ
		               |	СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)
		               |	И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
		               |
		               |УПОРЯДОЧИТЬ ПО
		               |	Ссылка ИЕРАРХИЯ";
		Запрос.УстановитьПараметр("Группа", Ссылка); 
		Дерево = РеквизитФормыВЗначение("ДеревоНоменклатура");
		Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
		Пока Выборка.Следующий() Цикл
			НоваяСтрока = Дерево.Строки.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
		КонецЦикла;
		ЗначениеВРеквизитФормы(Дерево, "ДеревоНоменклатура");			
	КонецЕсли;
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. pyrkin_vanya 488 04.03.21 14:39 Сейчас в теме
2. herfis 498 04.03.21 14:27 Сейчас в теме
Дерево.Строки.Добавить() - это добавление новых элементов в корень.
Чтобы добавить дочерние элементы для конкретной строки дерева, нужно вызывать метод Добавить() для свойства "Строки" для ЭТОЙ СТРОКИ, а не для Дерева.
Т.е. у каждой строки есть собственное свойство "строки" (как у корня) и оно содержит ссылки на дочерние элементы.
3. LomayaZakat 04.03.21 14:37 Сейчас в теме
(2) Это я понимаю. Добавление второго уровня происходит еще одной выборкой. А если уровней много, как тогда быть?
Если Ссылка.ЭтоГруппа Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	1 КАК Пометка,
		               |	СпрНоменклатура.Ссылка КАК Ссылка,
		               |	УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
		               |	НЕОПРЕДЕЛЕНО КАК IDТовар,
		               |	НЕОПРЕДЕЛЕНО КАК IDУпаковка
		               |ИЗ
		               |	Справочник.Номенклатура КАК СпрНоменклатура
		               |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
		               |		ПО СпрНоменклатура.ЕдиницаДляОтчетов = УпаковкиЕдиницыИзмерения.Ссылка
		               |ГДЕ
		               |	СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)
		               |	И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
		               |
		               |УПОРЯДОЧИТЬ ПО
		               |	Ссылка ИЕРАРХИЯ";
		Запрос.УстановитьПараметр("Группа", Ссылка); 
		Дерево = РеквизитФормыВЗначение("ДеревоНоменклатура");
		Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
		Пока Выборка.Следующий() Цикл
			НоваяСтрока = Дерево.Строки.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
			ДетальнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
			Пока ДетальнаяВыборка.Следующий() Цикл
				НоваяПодСтрока = НоваяСтрока.Строки.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяПодстрока, ДетальнаяВыборка);
			КонецЦикла;
		КонецЦикла;
		ЗначениеВРеквизитФормы(Дерево, "ДеревоНоменклатура");			
	КонецЕсли;
Показать
5. user5300 1010 04.03.21 14:46 Сейчас в теме
6. LomayaZakat 04.03.21 15:05 Сейчас в теме
(5)Ты прав. Большое спасибо.
&НаСервере
Процедура ДеревоНоменклатураСсылкаОбработкаВыбораНаСервере(Ссылка)
	
	Если Ссылка.ЭтоГруппа Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	1 КАК Пометка,
		               |	СпрНоменклатура.Ссылка КАК Ссылка,
		               |	УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
		               |	НЕОПРЕДЕЛЕНО КАК IDТовар,
		               |	НЕОПРЕДЕЛЕНО КАК IDУпаковка
		               |ИЗ
		               |	Справочник.Номенклатура КАК СпрНоменклатура
		               |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
		               |		ПО СпрНоменклатура.ЕдиницаДляОтчетов = УпаковкиЕдиницыИзмерения.Ссылка
		               |ГДЕ
		               |	СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)
		               |	И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
		               |
		               |УПОРЯДОЧИТЬ ПО
		               |	Ссылка ИЕРАРХИЯ";
		Запрос.УстановитьПараметр("Группа", Ссылка); 
		Дерево = РеквизитФормыВЗначение("ДеревоНоменклатура");
		Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
		ЗаполнениеДерева(Выборка, Дерево.Строки);
		ЗначениеВРеквизитФормы(Дерево, "ДеревоНоменклатура");			
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнениеДерева(Выборка = Неопределено, СтрокиДерева)
       
    Пока Выборка.Следующий() Цикл
        
        СтрокаДерева = СтрокиДерева.Добавить();
        ЗаполнитьЗначенияСвойств(СтрокаДерева, Выборка);
        
        ЗаполнениеДерева(Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией), СтрокаДерева.Строки);
    
    КонецЦикла;

КонецПроцедуры
Показать
Оставьте свое сообщение

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