Запрос формируется у меня в 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"...
А после им присваивать источник. Ненужные скрывать.
Отчёт формируется такой:
(Я специально растащил поля в заголовке, чтобы отобразить их все.
По идее они должны быть в соответствующих заголовках.)
У вас нет доступа для просмотра вложений в этом сообщении.