Входные параметры отчета

Источник: msdatabase

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  
 
 


Страница сайта http://185.71.96.61
Оригинал находится по адресу http://185.71.96.61/home.asp?artId=8389