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
|
|