mvgfirst, а чего "построитель" то? это же прошлый век, если замахиваться, так сразу на СКД

. Вообще то частично та или иная часть решения уже есть в виде отдельных разработок на данном ресурсе... но их бы объединить.
Я бы сделал так: написал бы классы для быстрой реализации настроек, чтобы вроде того было...
НастройкиОтчета = СоздатьОбъект("НастройкиОтчета");
// ПоляГруппировки = это отдельный класс для управления группировками
ПоляГруппировки = НастройкиОтчета.ПоляГруппировки;
ПоляГруппировки.Добавить("Родитель", "Элементы", 0, 1); // Имена, тип, использование, автодобавление
ПоляГруппировки.ТабличноеПоле = "ТабличноеПолеГруппировки";
ПоляГруппировки.КоманднаяПанель = "КоманднаяПанельГруппировки";
// Отборы = отдельный класс
Отборы = НастройкиОтчета.Отборы;
Отборы.Добавить("Поле1", "Справочник.Контрагенты", "Наименование", "Равно", "", 0); // Имя, Родитель, Поле, ВидСравнения, Значение, Использование
Отборы.Добавить("Поле2", "Справочник.Контрагенты", "ЭтоГруппа", "Равно", 0, 0);
Отборы.ТабличноеПоле = "ТабличноеПолеОтборы";
Отборы.КоманднаяПанель = "КоманднаяПанельОтборы"; // правда зачем она нужна? :)
НастройкаОтчета.ТекстЗапроса =
"ВЫБРАТЬ
|$Спр.ТекущийЭлемент КАК [Контрагент $Справочник.Контрагенты]
|,$Спр.Родитель КАК [Родитель $Справочник.Контрагенты]
|ИЗ
|Справочник.Контрагенты КАК Спр $nolock
|{ГДЕ (Поле1=$Спр.Наименование, Поле2=$Спр.ЭтоГруппа)}";
А далее, уже вызов считывания настройки, и собственно создание текста запроса, выполнение запроса, получение ИТЗ, ее группировка и вывод сгруппированной ИТЗ.
Потом (или сначала) можно было бы научить класс принимать не только запрос, но и ТЗ, ИТЗ чтобы сделать более универсальный механизм. Но сначала на простом отчете обкатать

.
В общем то не так сложно, думаю за выходные более менее рабочий функционал можно сделать

.
Но вы же понимаете, что это я так... предложение просто высказал. Как там принято говорить? Это не является публичной офертой.