|
Входные параметры отчета
Input Parameters
Применительно Аксесс 2000 и выше, ADP
Для того чтобы использовать в качестве источника данных отчета
хранимую процедуру MSSQL Server с параметрами
входные параметры хранимой процедуры должны
быть указаны в соответствующем свойстве отчета.
В отличие от форм, в отчетах смена Входных параметров
по событию открытие не приводит
к изменению в содержимом отчета.
Поэтому приходится прибегать
к некоторым трюкам чтобы
получить возможность динамически
определять получаемые данные.
Самый простой способ получить желаемый результат
состоит в том что
часть строкового значения
свойства отчета "Input Parameters"
может быть вычислена из функций VBA.
Задача:
Передать из отчета "finctrl_platlist" два параметра "@prj" и "@Dohod"
Решение:
Создаем в отчете две ПУБЛИЧНЫЕ ФУНКЦИИ:
Public Function GetReportdohod()
GetReportdohod = Dohod 'Присвоим функции значение внутренней переменной отчета
End Function
Public Function GetReportprj()
GetReportprj = prj
End Function
При этом свойство "Input Parameters" отчета "finctrl_platlist" должно иметь следующий вид:
@prj nvarchar(50)= reports!finctrl_platlist.GetReportprj , @dohod bit = reports!finctrl_platlist.GetReportdohod
Формат:
@ИмяПеременнойХП ТипДанныхTSQL = reports!ИмяОтчета.НазваниеПубФункцииОтчета , следующий параметр в таком же формате
Обратите внимание что при использовании функций отчета
во входных параметрах
функция при вызове
не завершается скобками.
Существует принципиальное отличие
при использовании функций
ОБЩИХ МОДУЛЕЙ ПРОЕКТА.
В том случае если функция расположена не в модуле отчета,
а в ОБЩЕМ МОДУЛЕ
строка входные параметры имеет такой вид:
@prj nvarchar(50)= GetReportprj() , @dohod bit = GetReportdohod()
т.е. должны присутствовать скобки,
а имя модуля в котором эти функции расположены
указывать не обязательно.
Полный листинг модуля отчета:
Option Compare Database
Option Explicit
Private Dohod As Integer
Private prj As String
Private Sub Report_Open(Cancel As Integer)
'Прием аргументов открытия отчета и разбор строки на параметры
'OpenArgs в отчетах начиная с Access XP !!!!
If Nz(Me.OpenArgs, "") = "" Then Exit Sub
Dim Ta
Ta = Split(Me.OpenArgs, "<nextfield>", , vbTextCompare)
prj = Ta(0)
Dohod = Ta(1)
If Dohod = 0 Then
Me.Caption = "Фактические расходы по проекту"
Else
Me.Caption = "Фактические доходы по проекту"
End If
'Этого было бы достаточно в случае с формой
'Me.InputParameters = "@prj = '" & prj & "', @dohod = " & Dohod
End Sub
Public Function GetReportdohod()
GetReportdohod = Dohod
End Function
Public Function GetReportprj()
GetReportprj = prj
End Function
| |