Свернуть таблицу значений на клиенте (ДанныеФормыЗначение)

Little Friend 28 2 1

Сворачивает реквизит формы типа "ТаблицаЗначений" на клиенте.

Процедуру можно вставить в клиентский общий модуль и использовать для сворачивания таблицы значений (ДанныеФормыКоллекция) без серверного вызова.

// Сворачивает ДанныеФормыКоллекция по указанным колонкам группировки. Элементы коллекции, указанной в первом параметре,
// у которых совпадают значения в колонках, указанных во втором параметре, сворачиваются в один элемент. Значения этих
// элементов, хранящиеся в колонках, указанных в третьем параметре, сворачиваются. Важно! Значения колонок, не вошедших
// ни в один из списков принимают значения первого элемента коллекции.
//
// Параметры:
//  Коллекция - ДанныеФормыКоллекция - коллекция, которую необходимо свернуть.
//  КолонкиГруппировок - Строка - имена колонок, разделенные запятыми, по которым необходимо группировать элементы
//                                коллекции.
//  КолонкиСуммирования - Строка - имена колонок, разделенные запятыми, по которым необходимо суммировать значения в
//                                 элементах коллекции.
//
&НаКлиенте
Процедура СвернутьДанныеФормыКоллекция(Коллекция, КолонкиГруппировок, КолонкиСуммирования)
	СтруктураКолонокСуммирования = Новый Структура(КолонкиСуммирования);
	Отбор = Новый Структура(КолонкиГруппировок);
	СвернутыеСтроки = Новый Соответствие;
	
	Для каждого ЭлементКоллекции Из Коллекция Цикл
		Если СвернутыеСтроки[ЭлементКоллекции] <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		ЗаполнитьЗначенияСвойств(Отбор, ЭлементКоллекции, КолонкиГруппировок);
		СтрокиПоОтбору = Коллекция.НайтиСтроки(Отбор);
		
		Для Индекс = 1 По СтрокиПоОтбору.ВГраница() Цикл
			Для каждого ОписаниеКолонки Из СтруктураКолонокСуммирования Цикл
				ЭлементКоллекции[ОписаниеКолонки.Ключ] = ЭлементКоллекции[ОписаниеКолонки.Ключ]
					+ СтрокиПоОтбору[Индекс][ОписаниеКолонки.Ключ];
				СвернутыеСтроки.Вставить(СтрокиПоОтбору[Индекс], Истина);
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	
	Для каждого СвернутаяСтрока Из СвернутыеСтроки Цикл
		Коллекция.Удалить(СвернутаяСтрока.Ключ);
	КонецЦикла;
КонецПроцедуры
1

Комментарии

Sergpn
#1, 23 января 2025 13:47

тут бы неплохо задуматься над тем, что при обходе на клиенте могут происходить неявные серверные вызовы. https://its.1c.ru/db/v8std#content:628:hdoc


См. также

Выгрузка Таблицы значений в Объект Таблица Значений на форме обработки (для передачи сервер - клиент)

Программное перемещение строк ДанныхФормКоллекции(Таблица значений) на Клиенте

Как свернуть таблицу значений в коде, но получить не сумму, а максимум

Свернуть строки в таблице значений конкатенацией

Текущие данные таблицы формы

Заполнение "пустых" строк табличной части

Дополнить таблицу значений - приемника данными из таблицы значений - источника

Связывание таблиц значений по ФИФО

ДополнитьТаблицу (БСП)

Модератору