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