Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Открыть отчет с разными RecordSourse
 
 автор: Lobo   (22.07.2010 в 15:04)   личное сообщение
 
 

есть отчет -Отчет1 - его нужно в зависимости от переключателя на форме открывать с источником строк Запрос1 или 2й вариант - Запрос2 Пишу так в форме
If vibSort = 1 Then
strMy = "Запрос1"
else
strMy = "Зарпос2"
End If
Reports![Отчет1].RecordSourse = strMy - - при этом выдает ошибку что нет такого отчета в базе или ошибка в имени отчета
Если писать в отчете в событии Open или Load - то тоже возникает ошибка - что отчет уже открыт и нельзя поменять recordSourse

  Ответить  
 
 автор: osmor   (22.07.2010 в 15:25)   личное сообщение
 
 

отчет попадает в Reports только после того как открыт.
давно с отчетами не работал... но если на Open не получается (хотя вроде должно), то можно менять свойство SQL запроса прописанного в отчет.

If vibSort = 1 Then
currentdb.querydefs("ЗапросДляОтчета").sql = "select ......"
else
currentdb.querydefs("ЗапросДляОтчета").sql = "select ......"
End If
Docmd.OpenReport ....

  Ответить  
 
 автор: lobo   (22.07.2010 в 15:28)   личное сообщение
 
 

спасибо - попробую так . У меня по сути только сортировки в запросе разные .

  Ответить  
 
 автор: osmor   (22.07.2010 в 15:34)   личное сообщение
 
 

я вас наверное огорчу, но сортировки в запросе не влияют на сортировку в отчете

  Ответить  
 
 автор: Lukas   (22.07.2010 в 15:54)   личное сообщение
16 Кб.
 
 

Источник для отчета нужно передавать через OpenArgs, и в процедуре открытия менять.
Если убрать сортировки в отчете, то по одному столбцу можно попытаться отсортировать в запросе. =>

  Ответить  
 
 автор: Lobo   (22.07.2010 в 16:07)   личное сообщение
 
 

да поздно огорчать - только что этот вывод сам напросился - - recordsourse меняется , а отчет все равно выводится по наименовниям .Это что выходит - надо "плодить" отчет в 3х вариантах ?

  Ответить  
 
 автор: kot_k_k   (22.07.2010 в 17:27)   личное сообщение
 
 

а если


Функция CreateGroupLevel задает поле или выражение, по которому выполняется группировка или сортировка данных в отчете.
Предположим, что требуется разработать специальную программу мастера, предоставляющего пользователю при разработке отчета возможность выбрать поля, по которым производится группировка данных в отчете. В этом случае следует вызвать в программе мастера функцию CreateGroupLevel для создания групп в соответствие с выбором пользователя.

Синтаксис

CreateGroupLevel(отчет, выражение, заголовок, примечание)



или вот


Свойство Сортировка (SortOrder) определяет порядок сортировки для полей и выражений в отчете. Например, при печати списка поставщиков можно расположить записи по названиям организаций.

Значения

Свойство Сортировка (SortOrder) может иметь следующие значения.

Значение Описание Visual Basic
По возрастанию (Значение по умолчанию). Сортировка значений по возрастанию («A»-«Я», 0-9). False (0)
По убыванию Сортировка значений по убыванию («Я»-«А», 9-0). True (–1)
Значение свойства Сортировка (SortOrder) задается в окне Сортировка и группировка, в макросе или в программе Visual Basic.
В программе Visual Basic значение свойства Сортировка (SortOrder) можно задать в режиме конструктора отчета или в процедуре обработки события Открытие (Open) отчета с помощью свойства Уровень группировки (GroupLevel).



я правда не пробовал

  Ответить  
 
 автор: Lukas   (22.07.2010 в 17:41)   личное сообщение
 
 

CreateGroupLevel - это для режима конструктора.

Для безгруппового отчета можно так:

Private Sub Report_Open(Cancel As Integer)
    Me.OrderBy = "FieldName1 Asc, FieldName2 Desc"
End Sub

  Ответить  
 
 автор: Дядя Федор   (23.07.2010 в 08:29)   личное сообщение
68 Кб.
 
 

У меня работает такой код.
'форма ждите
DoCmd.OpenForm "FrmWaitPP"
DoEvents
'формирую таблицу запроса

Call repPlPrKVARTAL(MYGOD(), MYSNIMOK())
'данные по сортировкам и группировкам из формы frmPlanPrognosFiltrRepIzdeliaV_ALL
'start = 10 * 567 '10 sm это для масштаьирования
With Forms!frmPlanPrognosFiltrRepIzdelia V_ALL
isort = !grmeskv + !grrazbivka
ksb = !sb.Value / 100
Select Case isort
Case 11: vid = "MR"
Case 12: vid = "MV"
Case 13: vid = "MI"
Case 21: vid = "KR"
Case 22: vid = "KV"
Case 23: vid = "KI"
End Select
isort = !grpSort ' метод сортировки
End With

If Me.OpenArgs = "ГОД" Then '"поле год добавлено в группу, чтобы убирать/показывать группу
' год есть у всех записей, поэтому группировка по нему фактически убирает группировку.
Me.GroupLevel(0).ControlSource = "God"
Me.GroupLevel(0).SortOrder = True
'Me.OrderBy = "ItogoSum DESC" 'сортировка по убыванию
'Me.OrderByOn = True
Me.ЗаголовокГруппы0.Visible = False
Me.ЗаголовокГруппы0.Height = 0
argsort = " - без группировки" ' 'эта строка далее используется в колонтикуле
Else
Me.GroupLevel(0).ControlSource = "NaimSector"
Me.GroupLevel(0).SortOrder = False
isort = Forms!frmPlanPrognosFiltrRepIzdelia V_ALL!grpSort
Select Case isort
Case 2:
Me.OrderBy = "NaimPrice"
Case 1:
Me.OrderBy = "Cena"
Case 3:
Me.OrderBy = "ItogoSum"
End Select
If Not Forms!frmPlanPrognosFiltrRepIzdelia V_ALL!fdesc Then
Me.OrderBy = Me.OrderBy & " DESC"
End If
Me.OrderByOn = True
Me.ЗаголовокГруппы0.Visible = True
argsort = " - с группировкой по направлениям"
End If
...... и т.д.

frmPlanPrognosFiltrRepIzdeliaV_ALL - форма управления отчетом, всегда висит.

  Ответить  
 
 автор: lobo   (29.07.2010 в 14:07)   личное сообщение
 
 

Спасибо за примеры
Получилось ..почти порядок сортировки выбираю по переключателю на форме
Select Case vib
Case 1
Me.GroupLevel(0).ControlSource = "[Shifr]"
Me.GroupLevel(0).SortOrder = False
Me.GroupLevel(1).ControlSource = "[Shifr_Kyda]"
Me.GroupLevel(1).SortOrder = False
..... и так далее
А как сделать чтобы сортировка в 0 группе была по 2м полям - Shifr,Name_Shifr , а в 1й группе Shifr_Kyda, Name_Shifr_Kyda ?

  Ответить  
 
 автор: Lukas   (29.07.2010 в 14:45)   личное сообщение
 
 

Сортировка в GroupLevel может быть только по одному полю.
Поэтому следом за GroupLevel(0) должна быть GroupLevel(1) без заголовка и примечания группы,
где и указать сортировку по второму полю:
...
Me.GroupLevel(0).ControlSource = "[Shifr]"
Me.GroupLevel(0).SortOrder = False
Me.GroupLevel(1).ControlSource = "[Name_Shifr]"
Me.GroupLevel(1).SortOrder = False
...

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList