Придумал простое и элегантное решение в лоб.
Суть метода, если кому понадобится:
1. В отчете в "области данных" размещаем поля (при желании область можно скрыть)
2. Поле содержащее результат агрегирования необходимо размещать в "примечании группы"
3. В событии Format "заголовка группы" производим очистку поля результата
4. В событии Format "области данных" производим агрегирование необходимых данных (полей) в поле результата
5. В событии Format "примечания группы" производим окончательное форматирование результата
Т.о. все выполняется штатными методами Access без дополнительных запросов и процедур.
Решение достаточно гибкое, имхо. Я таким образом реализовал механизм приветствия для одного и более человек с учетом пола.
На выходе получаются такие результаты:
- Уважаемые Маргарита Геннадьевна и Владимир Владимирович!
- Уважаемые Роман Владимирович, Светлана Яковлевна и Анастасия Романовна!
- Уважаемый Владимир Васильевич!
- Уважаемая Людмила Николаевна!
Помоему очень неплохой вариант для искуственного интеллекта ;)
Вид отчета в конструкторе:
rep.png
Код модуля отчета:
- Код: Выделить всё
Option Compare Database
Private strPeoples As String
Private Sub Report_Activate()
DoCmd.Maximize
End Sub
Private Sub repGroupHeaderAddress_Format(Cancel As Integer, FormatCount As Integer)
' очистка
strPeoples = ""
End Sub
Private Sub repDataArea_Format(Cancel As Integer, FormatCount As Integer)
' агрегирование подчиненных данных
strPeoples = strPeoples & ";" & Me.Nam & " " & Me.Otc
End Sub
Private Sub repGroupFooterAddress_Format(Cancel As Integer, FormatCount As Integer)
Dim A01() As String
Dim C01 As Integer
Dim C02 As Integer
Dim I01 As Integer
Dim S01 As String
' финальное форматирование
S01 = ""
If Len(strPeoples) > 0 Then
A01 = Split(Mid(strPeoples, 2), ";")
C01 = LBound(A01)
C02 = UBound(A01)
If C02 = C01 Then
S01 = A01(C01)
Me.SUFFIX = IIf(Me.Sex = "М", "ый ", "ая ") ' определение окончания
Else
For I01 = C01 To C02 - 1
S01 = S01 & ", " & A01(I01)
Next
S01 = Mid(S01, 3) & " и " & A01(C02)
Me.SUFFIX = "ые "
End If
End If
Me.SUM_PEOPLES = S01
End Sub
У вас нет доступа для просмотра вложений в этом сообщении.