Уведомления
Очистить все

Как вывести итоги по группировкам в дереве значений на форме в 1С?

2 Записи
1 Пользователи
0 Likes
2,902 Просмотры
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

Итак, имеем на управляемой форме дерево значений в виде реквизита формы. В дереве, в нашем примере, указаны товары в разрезе группировок по документам отгрузки. (Для нашего кода не важно в каком разрезе группировки, работать будем только с колонками подлежащими расчету итогов. Уровень вложенности дерева, также значения не имеет).

Пользователи захотели увидеть итоги по некоторым колонкам. Для выполнения данной задачи, был разработан следующий код.

Обратите внимание, что после расчета итогов, мы принудительно еще и развернем дерево. (представим на форме дерево значений в развернутом виде).

&НаКлиенте
Процедура РассчитатьСуммыДЗ_Клиент()
	
	РассчитатьСуммыДЗ("ДеревоТоваров_РеквизитФормы"); 
	РазвернутьДеревоТЧ("ДеревоТоваров_РеквизитФормы");
	
КонецПроцедуры 

&НаСервере
Процедура РассчитатьСуммыДЗ(п_ИмяДерева) 
	
	ДЗ = РеквизитФормыВЗначение(п_ИмяДерева);
	РассчитатьСуммыДЗ_Продолжение(п_ИмяДерева, ДЗ.Строки);
	ЗначениеВРеквизитФормы(ДЗ, п_ИмяДерева);	
	
КонецПроцедуры

&НаСервере
Процедура РассчитатьСуммыДЗ_Продолжение(п_ИмяДерева, СтрокиДЗ)
	
	Для Каждого СтрокаДерева Из СтрокиДЗ Цикл
		
		Если СтрокаДерева.Строки.Количество() = 0 Тогда 
			СтрокаДерева.ЭтоРодитель = 0;
			Продолжить;
		КонецЕсли;
		
		РассчитатьСуммыДЗ_Продолжение(п_ИмяДерева, СтрокаДерева.Строки); 
		
		// Колонки по которым необходимо получить и вывести итоги		
		СтрокаДерева.Отгружено  = СтрокаДерева.Строки.Итог("Отгружено");
		СтрокаДерева.Принято 	= СтрокаДерева.Строки.Итог("Принято");
		СтрокаДерева.Брак       = СтрокаДерева.Строки.Итог("Брак");
		СтрокаДерева.Возврат 	= СтрокаДерева.Строки.Итог("Возврат"); 
		
		СтрокаДерева.ЭтоРодитель = 1;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура РазвернутьДеревоТЧ(Знач п_ИмяДерева = Неопределено)
	
	Если ПустаяСтрока(СокрЛП(п_ИмяДерева)) Тогда
		Возврат;
	КонецЕсли;
	
	ЭлементыКорня = ЭтаФорма[п_ИмяДерева].ПолучитьЭлементы();	
	Для Каждого ЭлементДерева ИЗ ЭлементыКорня Цикл
		Элементы[п_ИмяДерева].Развернуть(ЭлементДерева.ПолучитьИдентификатор());		
	КонецЦикла;
	
КонецПроцедуры

   
Цитата
65-150 Okolokompa Форум
(@kalininalex)
Reputable Member
Присоединился: 4 года назад
Записи: 160
Создатель темы  

На всякий случай, приведу еще универсальную процедуру сворачивания дерева значений на форме в 1С 8.

&НаКлиенте
Процедура СвернутьДеревоТЧ(Знач п_ИмяДерева = Неопределено)
	
	Если ПустаяСтрока(СокрЛП(п_ИмяДерева)) Тогда
		Возврат;
	КонецЕсли;
	
	ЭлементыКорня = ЭтаФорма[п_ИмяДерева].ПолучитьЭлементы();	
	Для Каждого ЭлементДерева ИЗ ЭлементыКорня Цикл
		Элементы[п_ИмяДерева].Свернуть(ЭлементДерева.ПолучитьИдентификатор());		
	КонецЦикла;
	
КонецПроцедуры

   
ОтветитьЦитата
Поделиться: