Запрос формируется у меня в VBA на основе формы. 
Этот вариант упрощённый. Далее туда прибавятся фильтры по всем полям классификации, которые существуют. А также наименования кодов классификации (по желанию пользователя). Т.е. в заголовках групп, могут появляться (быть\отображаться\скрываться) дополнительные текстовые поля описания кодов.
- Код: Выделить всё
- 
 nSel = 0
 For i = 0 To (nElem - 1)
 If [Группы].Selected(i) Then
 nSel = nSel + 1
 ReDim Preserve gruppa(nSel)
 gruppa(nSel - 1) = [Группы].Column(1, i)
 If (nSel = 1) Then
 strSQL = "SELECT " & gruppa(nSel - 1)
 strSQLgr = " GROUP BY " & gruppa(nSel - 1)
 strSQLsort = " ORDER BY " & gruppa(nSel - 1)
 Else
 strSQL = strSQL & "," & gruppa(nSel - 1)
 strSQLgr = strSQLgr & "," & gruppa(nSel - 1)
 strSQLsort = strSQLsort & "," & gruppa(nSel - 1)
 End If
 End If
 Next i
 If nSel = 0 Then
 MsgBox ("Должен быть выбран хотя бы один уровень группировки")
 Exit Sub
 End If
 strSQL = strSQL & ", Sum([КВ1]+[КВ2]+[КВ3]+[КВ4]) AS сумма FROM Роспись" & strSQLgr & strSQLsort
 
Sum([КВ1]+[КВ2]+[КВ3]+[КВ4]) - сложение поквартальных сумм.
Поля группировки в одном списке.
Поля промежуточных итогов во втором.
Вот примерный код (так как я искал решение - он далёк от первоначального).
Этот фрагмент должен отвечать  за построение отчёта
- Код: Выделить всё
- 
 nElem = [Итоги].ListCount
 For i = 0 To nElem
 If [Итоги].Selected(i) Then
 Set rst = CurDB.OpenRecordset("SELECT * FROM Группировка WHERE Имя='" & [Итоги].Column(0, i) & "'")
 grItog = CreateGroupLevel(rep.Name, [Итоги].Column(0, i), True, False)
 'rep.GroupLevel(grItog).Height = rst!высота
 'MsgBox (grItog + 9)
 Set elTextBox = CreateReportControl(rep.Name, acTextBox, acGroupLevel1Header, , , 0, 0, rst!длина, "300")
 elTextBox.ControlSource = [Итоги].Column(0, i)
 'rep.GroupLevel(i).ControlSource = elTextBox
 Set elTextBox = CreateReportControl(rep.Name, acTextBox, acGroupLevel1Header, , , "7000", "0", "1600", "300")
 elTextBox.ControlSource = "=sum(сумма)"
 elTextBox.format = format
 elTextBox.DecimalPlaces = 2
 'Me.GroupLevel(i).ControlSource = elTextBox
 
 rst.Close
 End If
 Next i
 
acGroupLevel1Header - использую эту константу в CreateReportControl только потому что не могу сослаться на заголовок группы. 
Это моя текущая проблема.
В таблице "Группировка" будут данные о формате, в котором нужно будет отображать итог.
P.S. На сегодня у меня в голове наметилось такое решение, но не пробывал.
Создать отчёт с "обезличенными" полями, типа "Поле0", "Поле1"... 
А после им присваивать источник. Ненужные скрывать.
Отчёт формируется такой:
(Я специально растащил поля в заголовке, чтобы отобразить их все.
По идее они должны быть в соответствующих заголовках.)
У вас нет доступа для просмотра вложений в этом сообщении.