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

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 1000 04.03.21 14:46 Сейчас в теме
6. LomayaZakat 04.03.21 15:05 Сейчас в теме
(5)Ты прав. Большое спасибо.
&НаСервере
Процедура ДеревоНоменклатураСсылкаОбработкаВыбораНаСервере(Ссылка)
	
	Если Ссылка.ЭтоГруппа Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ
		               |	1 КАК Пометка,
		               |	СпрНоменклатура.Ссылка КАК Ссылка,
		               |	УпаковкиЕдиницыИзмерения.Ссылка КАК Упаковка,
		               |	НЕОПРЕДЕЛЕНО КАК IDТовар,
		               |	НЕОПРЕДЕЛЕНО КАК IDУпаковка
		               |ИЗ
		               |	Справочник.Номенклатура КАК СпрНоменклатура
		               |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
		               |		ПО СпрНоменклатура.ЕдиницаДляОтчетов = УпаковкиЕдиницыИзмерения.Ссылка
		               |ГДЕ
		               |	СпрНоменклатура.Ссылка В ИЕРАРХИИ(&Группа)
		               |	И СпрНоменклатура.ПометкаУдаления = ЛОЖЬ
		               |
		               |УПОРЯДОЧИТЬ ПО
		               |	Ссылка ИЕРАРХИЯ";
		Запрос.УстановитьПараметр("Группа", Ссылка); 
		Дерево = РеквизитФормыВЗначение("ДеревоНоменклатура");
		Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
		ЗаполнениеДерева(Выборка, Дерево.Строки);
		ЗначениеВРеквизитФормы(Дерево, "ДеревоНоменклатура");			
	КонецЕсли;
	
КонецПроцедуры

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

КонецПроцедуры
Показать
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день