Постобработка дерева значений

1. Alexponenta 02.12.21 16:54 Сейчас в теме
Имеется результат запроса. Данный результат запроса грузится в ТЧ типа "Дерево значений" следующим образом:

ПромДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВРеквизитФормы(ПромДерево, "Документы");

Но есть две проблемы.
1. Последние три столбца надо объединить в один, чтобы понизить "воздух"
2. В первом уровне дерева на месте суммы должна стоять общая сумма документа.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 02.12.21 17:05 Сейчас в теме
(1)В чем сложность формировать дерево "вручную" по данным ДЗ/ТЗ из запроса?
FatPanzer; +1 Ответить
5. Alexponenta 03.12.21 08:38 Сейчас в теме
(2) В том, что в рекурсии я 0 полный
6. nomad_irk 72 03.12.21 12:02 Сейчас в теме
(5)Хорошо.

В общем случае рекурсия выглядит так:

СделатьЧтотоСДеревомРекурсивно(ДеревоЗначений);

Процедура СделатьЧтотоСДеревомРекурсивно(ВеткаДерева);
    Для Каждого ТекущаяВеткаДерева Из ВеткаДерева.Строки Цикл
        Если ТекущаяВеткаДерева.Строки.Количество() > 0 Тогда
            СделатьЧтотоСДеревомРекурсивно(ТекущаяВеткаДерева);
        Иначе
            //обрабатываем текущую ветку дерева
        КонецЕсли;
   КонецЦикла;
КонецПроцедуры
Показать
7. Alexponenta 03.12.21 12:46 Сейчас в теме
(6)

Можно ли еще сделать как - то чтобы не выводился 0 уровень дерева?
8. nomad_irk 72 03.12.21 12:49 Сейчас в теме
(7)вероятно, выключить общие итоги в запросе.
9. Alexponenta 06.12.21 09:08 Сейчас в теме
(8) Еще вопрос - чтобы дерево выводилось сразу развернутым - что нужно делать?
10. nomad_irk 72 06.12.21 09:23 Сейчас в теме
(9) В свойствах табличного поля, привязанного к дереву, установить свойство НачальноеОтображениеДерева в значение РаскрыватьВсеУровни.
11. Alexponenta 06.12.21 23:53 Сейчас в теме
(6)
Получилось в общем такое безобразие.

ПромДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	
	Для Каждого СтрПервогоУровня из ПромДерево.Строки Цикл
		НовСтрока = Документы.ПолучитьЭлементы().Добавить();
		НовСтрока.Регистратор = СтрПервогоУровня.Регистратор;
		Сумма = 0;
		Если ТипЗнч(СтрПервогоУровня.Регистратор) = Тип("ДокументСсылка.ПриходнаяНакладная") ТОГДА
			Для Каждого СтрВторогоУровня из СтрПервогоУровня.Строки Цикл
				Сумма = Сумма + СтрВторогоУровня.СтоимостьПриход;
				НовСтрока2 = НовСтрока.ПолучитьЭлементы().Добавить();
				НовСтрока2.Номенклатура = СтрВторогоУровня.Номенклатура;
				НовСтрока2.Количество = СтрВторогоУровня.Количество;
				НовСтрока2.Цена = СтрВторогоУровня.Цена;
				НовСтрока2.Сумма = СтрВторогоУровня.СтоимостьПриход
			КонецЦикла;	 
		ИначеЕсли ТипЗнч(СтрПервогоУровня.Регистратор) = Тип("ДокументСсылка.РасходнаяНакладная") ТОГДА
			Для Каждого СтрВторогоУровня из СтрПервогоУровня.Строки Цикл
				Сумма = Сумма + СтрВторогоУровня.СтоимостьРасход;
				НовСтрока2 = НовСтрока.ПолучитьЭлементы().Добавить();
				НовСтрока2.Номенклатура = СтрВторогоУровня.Номенклатура;
				НовСтрока2.Количество = СтрВторогоУровня.Количество;
				НовСтрока2.Цена = СтрВторогоУровня.Цена;
				НовСтрока2.Сумма = СтрВторогоУровня.СтоимостьРасход
			КонецЦикла;
		Иначе 
			Для Каждого СтрВторогоУровня из СтрПервогоУровня.Строки Цикл
				Сумма = СтрВторогоУровня.СуммаДенег;
			КонецЦикла;
 		КонецЕсли;
		НовСтрока.Сумма = Сумма;
	КонецЦикла;
Показать
Прикрепленные файлы:
3. Evgenia060882 86 02.12.21 17:34 Сейчас в теме
В запросе задать одно имя полям с суммами
Или обойти дерево ... сложить результаты... после удалить колонки
4. Sashares 34 02.12.21 18:38 Сейчас в теме
(3)И добавить сумму в итоги.
Оставьте свое сообщение

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