///////////////////////////////////////////////////////////////////////
// ТЗ - обрабатываемая таблица //
// Строки - Колонка для представления ее значений в виде строк //
// Колонки - Колонка для представления ее значений в виде столбцов //
// Значения - Колонка, вычисляемая на пересечении строк и столбцов //
///////////////////////////////////////////////////////////////////////
//Функция преобразует таблицу значений подобно функции в Экселе //
///////////////////////////////////////////////////////////////////////
Функция СводнаяТаблицаЗначений(ТЗ,Строки,Колонки,Значения);
Колонки=СокрЛП(Колонки);
//формируем таблицу с колонкой "строк" и "значений"
ТЗ_Строк=СоздатьОбъект("ТаблицаЗначений");
ТЗ_Строк.Загрузить(ТЗ);
ТЗ_Строк.Свернуть(Строки,Значения);
//формируем таблицу с колонкой "столбцов" и "значений"
ТЗ_Колонок=СоздатьОбъект("ТаблицаЗначений");
ТЗ_Колонок.Загрузить(ТЗ);
ТЗ_Колонок.Свернуть(Колонки,Значения);
ТЗ_Колонок.Сортировать(Колонки);
//создаем каркас сводной таблицы
ТЗ_Результ=СоздатьОбъект("ТаблицаЗначений");
ТЗ_Результ.Загрузить(ТЗ_Строк);
ЗначенияГруппировки="";
Для Стр=1 по ТЗ_Колонок.КоличествоСтрок() Цикл
ТЗ_Результ.НоваяКолонка(СокрЛП(Строка(ТЗ_Колонок.ПолучитьЗначение(Стр,Колонки))),"Число");
ЗначенияГруппировки=ЗначенияГруппировки+СокрЛП(Строка(ТЗ_Колонок.ПолучитьЗначение(Стр,Колонки)))+",";
КонецЦикла;
ТЗ_Результ.УдалитьСтроки();
//заполняем данными
ТЗ_Данные=СоздатьОбъект("ТаблицаЗначений");
ТЗ_Данные.Загрузить(ТЗ);
Для Н=1 по ТЗ_Данные.КоличествоСтрок() Цикл
ТЗ_Результ.НоваяСтрока();
ТЗ_Результ.УстановитьЗначение(Н,Строки,ТЗ_Данные.ПолучитьЗначение(Н,Строки));
ТЗ_Результ.УстановитьЗначение(Н,СокрЛП(ТЗ_Данные.ПолучитьЗначение(Н,Колонки)),ТЗ_Данные.ПолучитьЗначение(Н,Значения));
КонецЦикла;
//Формируем итоговую колонку с суммами по строке
ТЗ_Результ.НоваяКолонка("Всего","Число");
Для Стр=1 по ТЗ_Результ.КоличествоСтрок() Цикл
Для Н=2 по ТЗ_Результ.КоличествоКолонок() Цикл
Всего=Всего+ТЗ_Результ.ПолучитьЗначение(Стр,Н);
КонецЦикла;
ТЗ_Результ.УстановитьЗначение(Стр,"Всего",Всего);
Всего=0;
КонецЦикла;
ТЗ_Результ.Свернуть(Строки,ЗначенияГруппировки+"Всего");
Возврат ТЗ_Результ;
КонецФункции
///////////////////////////////////////////////////////////////////////