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

Для ADP:
источник отчета хранимая процедура, с необходимыми параметрами и наворотами.
...
Рейтинг: 0 / 0
20.11.2003, 15:30
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Можно ли отчет формировать на основании массива? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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