powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли отчет формировать на основании массива?
5 сообщений из 5, страница 1 из 1
Можно ли отчет формировать на основании массива?
    #32330238
Vvvvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно создать гибкий отчет с возможностью вывода отмеченных "галочками" столбцов и группировок (цена, скидка, сумма и т.д., ... товар, регион, клиент и т.д.) и выбранным порядком группировки (порядок выбирается из списка, пользователь двигает их "вверх", "вниз" одноименными кнопками (товар, регион, клиент и т.д.)).
Вижу такое решение сделать запрос по всему, передать данные в массив, обработать массив сгруппировав согласно выставленым на форме позициям и найдя итоги по уровням группировок а затем выводить отчет извлекая данные из массива.
Или может быть есть более красивое решение?
...
Рейтинг: 0 / 0
Можно ли отчет формировать на основании массива?
    #32330257
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что мешает соотв. образом насторить GroupLevel для отчёта и ControlSource для полей при открытии отчёта?
...
Рейтинг: 0 / 0
Можно ли отчет формировать на основании массива?
    #32330281
Можно сделать отчет без RecordSource.
Источником записей может служить Recordset, Collection, массив и т.п., доступный на уровне модуля или проекта.
У отчета есть свойство NextRecord, которое в данном случае весьма полезно.
По событию Format области данных нужно заполнять несвязанные поля данными, перемещаться на следующий элемент массива, а затем Me.NextRecord = False, пока не будет обработан последний элемент.
Группировку в таком отчете, естественно, не применишь.
...
Рейтинг: 0 / 0
Можно ли отчет формировать на основании массива?
    #32330284
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо
Для MDB:
локальная таблица, в которую данные заливаются (с предварительной очисткой) вместо массива - отчет по этой таблице.

Для ADP:
источник отчета хранимая процедура, с необходимыми параметрами и наворотами.
...
Рейтинг: 0 / 0
Можно ли отчет формировать на основании массива?
    #32330295
Фотография Serafim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-нибудь вроде такого - это маленький кусок, управляет группировками - там еще много чего, но общая канва такая

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
Private Sub Report_Open(Cancel As Integer)
Dim grName As String, n As Byte
Const fTOT As String =  " & ', total'" 

Set frm = Forms( "pmPrint" )

isCapt = frm.isCap
If frm.isInd Then cInd = frm.tw
maxCapLen = DMax( "Len(sName)" ,  "zBudgGrBy" )

If Not CBool(frm.C1) Then GoTo ISDETAIL
    n =  0 
    grName = setRepGrp(frm.C1, n)
    Me.L0.ControlSource = grName
    If frm.F1 And CBool(frm.C2) Then Me.F0.ControlSource = grName & fTOT
    If frm.F1 And frm.H1 Then Me.gF0.BackColor = vbYellow
If Not CBool(frm.C2) Then GoTo ISDETAIL
    n =  1 
    grName = setRepGrp(frm.C2, n)


    Me.L1.ControlSource = grName
    If frm.F2 And CBool(frm.C3) Then Me.F1.ControlSource = grName & fTOT
    If frm.F2 And frm.H2 Then Me.gF1.BackColor = vbYellow
If Not CBool(frm.C3) Then GoTo ISDETAIL
    n =  2 
    grName = setRepGrp(frm.C3, n)
    Me.L2.ControlSource = grName
    If frm.F3 And CBool(frm.C4) Then Me.F2.ControlSource = grName & fTOT
    If frm.F3 And frm.H3 Then Me.gF2.BackColor = vbYellow
If Not CBool(frm.C4) Then GoTo ISDETAIL
    n =  3 
    grName = setRepGrp(frm.C4, n)
    Me.L3.ControlSource = grName
    If frm.F4 And CBool(frm.C5) Then Me.F3.ControlSource = grName & fTOT
    If frm.F4 And frm.H4 Then Me.gF3.BackColor = vbYellow
If Not CBool(frm.C5) Then GoTo ISDETAIL
    n =  4 
    grName = setRepGrp(frm.C5, n)
    Me.L4.ControlSource = grName
    If frm.F5 And CBool(frm.C6) Then Me.F4.ControlSource = grName & fTOT
    If frm.F5 And frm.H5 Then Me.gF4.BackColor = vbYellow
If Not CBool(frm.C6) Then GoTo ISDETAIL
    n =  5 
    grName = setRepGrp(frm.C6, n)
    Me.L5.ControlSource = grName
    If frm.F6 And CBool(frm.C7) Then Me.F5.ControlSource = grName & fTOT
    If frm.F6 And frm.H6 Then Me.gF5.BackColor = vbYellow
If Not CBool(frm.C7) Then GoTo ISDETAIL
    n =  6 
    grName = setRepGrp(frm.C7, n)
    Me.L6.ControlSource = grName
    If frm.F7 And CBool(frm.D0) Then Me.F6.ControlSource = grName & fTOT
    If frm.F7 And frm.H7 Then Me.gF6.BackColor = vbYellow
ISDETAIL:
If CBool(frm.D0) Then
    If isCapt Then
        Me.CD.ControlSource =  "= '" & Space((n + 1) * cInd) & frm.D0.Column(1) & ": ' & ["  & frm.D0.Column( 2 ) &  "]" 
            Else
        Me.CD.ControlSource = frm.D0.Column( 2 )
    End If
End If
End Sub


Private Function setRepGrp(Ctrl As Control, n As Byte) As String
Dim myCap As String, myLab As String
    With Ctrl
        myCap = Trim(.Column( 2 ))
        GroupLevel(n).ControlSource = myCap
        If isCapt Then
            myLab = Trim(.Column( 1 ))
            myLab = myLab &  ":"  & Space(maxCapLen - Len(myLab))
            setRepGrp =  "= '" & Space(n * cInd) & myLab & " ' & ["  & myCap &  "]" 
                Else
            setRepGrp =  "=["  & myCap &  "]" 
        End If
    End With
End Function
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли отчет формировать на основании массива?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]