Корректное заполнение данных на форме из Дерева Значений

1. Firshi 17.04.23 14:47 Сейчас в теме
Салют, друзья. Выполняю учебную задачу. Необходимо на форму вывести список наименования мебели и её составных частей. Составные части берутся из регистра сведений, а сама мебель из одноименного справочника. После составления запроса и создания дерева значений написал такой код
Процедура ЗаполнитьДерево(СтрокиДерева, Выборка)  
	Пока Выборка.Следующий() Цикл  					
		НовСтрока = СтрокиДерева.Добавить();
		НовСтрока.Код = Выборка.Код;
		НовСтрока.ПредметМебели = Выборка.ПредметМебели;
		
		Если ЗначениеЗаполнено(Выборка.СоставныеЧасти) Тогда   
			СтрокиСети = НовСтрока.Строки.Добавить();
			СтрокиСети.СоставныеЧасти = Выборка.СоставныеЧасти;
			СтрокиСети.Код = Неопределено;
		КонецЕсли; 		
		
		ВыборкаПод = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); 	
		Если ВыборкаПод.Количество() <> 0 Тогда
			ЗаполнитьДерево(НовСтрока.Строки, ВыборкаПод);
		Конецесли;    	
	КонецЦикла;
КонецПроцедуры
Показать

Как мне сделать нормальное отображение с иерархией неповторяющихся данных.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
9. Firshi 18.04.23 10:00 Сейчас в теме
Всем откликнувшимся, спасибо за предложения, но я решил дописать свой код и теперь справочники в первой колонке не повторяются напротив каждого значения. вот код:
Процедура ЗаполнитьДерево(СтрокиДерева, Выборка)
	Пока Выборка.Следующий() Цикл
		НовСтрока = СтрокиДерева.Добавить();
		НовСтрока.ПредметМебели = Выборка.ПредметМебели ;
		
		Если ЗначениеЗаполнено(Выборка.СоставныеЧасти) Тогда
			Строка = НовСтрока.Строки.Добавить();
			Строка.СоставныеЧасти= Выборка.СоставныеЧасти;
			Пока Выборка.Следующий() И Выборка.ПредметМебели = НовСтрока.ПредметМебели Цикл
				Если ЗначениеЗаполнено(Выборка.СоставныеЧасти) Тогда
					НовСтрокаСС = НовСтрока.Строки.Добавить();
					НовСтрокаСС.СоставныеЧасти= Выборка.СоставныеЧасти;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		ВыборкаПод = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); 	
		Если ВыборкаПод.Количество() <> 0 Тогда
			ЗаполнитьДерево(НовСтрока.Строки, ВыборкаПод);
		КонецЕсли;    	
	КонецЦикла;
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 34 17.04.23 14:57 Сейчас в теме
(1)Формы управляемые или обычные?
3. Firshi 17.04.23 14:59 Сейчас в теме
4. Sashares 34 17.04.23 16:38 Сейчас в теме
(3)Можно предложить использовать условное оформление - устанавливать видимость ложь последней колонке, если заполнены первые две, и наоборот - устанавливать ложь первым двум, если заполнена третья.
Поведение будет интересным, и может быть устроит.
7. Firshi 17.04.23 21:52 Сейчас в теме
(4) Предложение интересное, но не) Хотелось бы по людски до ума довести
5. HanterVol 8 17.04.23 21:32 Сейчас в теме
А точно уверены что нужно дерево на форме, а не динамический список?
а так, есть такие функции РеквизитФормыВЗначение и обратная ЗначениевРеквизитФормы
6. Firshi 17.04.23 21:50 Сейчас в теме
(5)Насчёт функций в курсе, оодна из них в предыдущей процедуре, где и запрос . Да, через дерево значений, одно из условий задачи. Мол, построить дерево руками, как я понял
8. user1826630 17.04.23 22:36 Сейчас в теме
(5) Красавчик! Хочешь поупражняться в группировке динамического списка?
9. Firshi 18.04.23 10:00 Сейчас в теме
Всем откликнувшимся, спасибо за предложения, но я решил дописать свой код и теперь справочники в первой колонке не повторяются напротив каждого значения. вот код:
Процедура ЗаполнитьДерево(СтрокиДерева, Выборка)
	Пока Выборка.Следующий() Цикл
		НовСтрока = СтрокиДерева.Добавить();
		НовСтрока.ПредметМебели = Выборка.ПредметМебели ;
		
		Если ЗначениеЗаполнено(Выборка.СоставныеЧасти) Тогда
			Строка = НовСтрока.Строки.Добавить();
			Строка.СоставныеЧасти= Выборка.СоставныеЧасти;
			Пока Выборка.Следующий() И Выборка.ПредметМебели = НовСтрока.ПредметМебели Цикл
				Если ЗначениеЗаполнено(Выборка.СоставныеЧасти) Тогда
					НовСтрокаСС = НовСтрока.Строки.Добавить();
					НовСтрокаСС.СоставныеЧасти= Выборка.СоставныеЧасти;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		ВыборкаПод = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); 	
		Если ВыборкаПод.Количество() <> 0 Тогда
			ЗаполнитьДерево(НовСтрока.Строки, ВыборкаПод);
		КонецЕсли;    	
	КонецЦикла;
КонецПроцедуры
Показать
Оставьте свое сообщение

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