Я использую Лоцман-отчеты, которые работают из клиента по sql-процедурам, данные выводятся в шаблон(.xltm).
При выводе отчет использует назначенную процедуру, мне нужно на второй лист полученной книги вывести результат другой(второй) процедуры, не получается вызвать вторую процедуру через GetReport.
Возможно ли вызвать вторую процедуру или как дважды вызвать одну процедуру поменяв параметр?
Вы может код кинете, что Вы делаете и возможно Вам подскажут, где у Вас проблемы.
Сейчас создаю 2 лист через другую процедуры, но не до конца понимаю что нужно передавать в GetDataset, то есть какой метод он должен принимать(мои предположения были что в него нужно передать название процедуры)
Private CurrRow As Range ' Текущая строка, в которую выводим данные отчета
Public Sub StartMacrosLOODSMANEx(RD As Reports.ReportData)
Dim DS As DataProvider.DataSet
Set DS = CreateObject("DataProvider.Dataset")
DS.Data = RD.GetReport.Data ' Получаем данные из первого запроса
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Лист1") ' Первый лист для первой таблицы
Dim dataRowPattern As Range
Set dataRowPattern = ws1.Range("_dataRow") ' Шаблон строки на первом листе
' Перебираем первую таблицу и записываем данные на первый лист
While Not DS.EOF
AddRow dataRowPattern, ws1
CurrRow.Cells(1).Value = DS.FieldValue("id")
CurrRow.Cells(2).Formula = DS.FieldValue("Тип")
CurrRow.Cells(3).Formula = DS.FieldValue("Обозначение")
CurrRow.Cells(4).Formula = DS.FieldValue("Наименование материала")
CurrRow.Cells(5).Formula = DS.FieldValue("Разработал")
DS.Next
Wend
' Выполняем второй запрос через GetDataset
Dim DS2 As DataProvider.DataSet
Set DS2 = CreateObject("DataProvider.Dataset")
DS2.Data = RD.GetDataSet("rep_Info1", "").Data
Dim ws2 As Worksheet
Set ws2 = ThisWorkbook.Sheets("Лист2") ' Второй лист для второй таблицы
Dim dataRowPattern2 As Range
Set dataRowPattern2 = ws2.Range("_dataRow")
' Перебираем вторую таблицу и записываем данные на второй лист
While Not DS2.EOF
AddRow dataRowPattern2, ws2
CurrRow.Cells(1).Value = DS2.FieldValue("Код")
CurrRow.Cells(2).Formula = DS2.FieldValue("Название")
CurrRow.Cells(3).Formula = DS2.FieldValue("Дата")
CurrRow.Cells(4).Formula = DS2.FieldValue("Автор")
DS2.Next
Wend
End Sub
Переделал немного GetDataSet, в метод передаю GetReport, но параметры видимо не совсем верно указываю:
Set DS = RD.GetDataSet("GetReport", ["rep_TestDb","mode=1"])
rep_TestDb - название процедуры
mode=1 - параметр который должен передаваться в процедуры, по цифре определяется какая таблица должна выводиться
Сам код тоже немного подправил:
Public Sub StartMacrosLOODSMANEx(RD As Reports.ReportData)
' Получаем данные для первого листа (mode=0)
Dim DS As DataProvider.DataSet
Set DS = RD.GetDataSet("GetReport", ["rep_TestDb","mode=1"])
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Лист1")
Dim currRow1 As Long
currRow1 = 2
' Перебираем первую таблицу и записываем данные на первый лист
While Not DS.EOF
ws1.Cells(currRow1, 1).Value = DS.FieldValue("Idparent")
ws1.Cells(currRow1, 2).Value = DS.FieldValue("idchild")
ws1.Cells(currRow1, 3).Value = DS.FieldValue("relationname")
currRow1 = currRow1 + 1
DS.Next
Wend
' Получаем данные для второго листа (mode=1)
Dim DS2 As DataProvider.DataSet
Set DS2 = RD.GetDataSet("GetReport", ["rep_TestDb","mode=1"])
Dim ws2 As Worksheet
Set ws2 = ThisWorkbook.Sheets("Лист2")
Dim currRow2 As Long
currRow2 = 2
' Перебираем вторую таблицу и записываем данные на второй лист
While Not DS2.EOF
ws2.Cells(currRow2, 1).Value = DS2.FieldValue("id")
ws2.Cells(currRow2, 2).Value = DS2.FieldValue("type")
ws2.Cells(currRow2, 3).Value = DS2.FieldValue("product")
currRow2 = currRow2 + 1
DS2.Next
Wend
MsgBox "Данные загружены на два листа!"
End Sub
Снова немного изменил:
Set DS = RD.GetDataSet("GetReport", Array("rep_TestDb", "0", "mode=0"))
только осталось понять как передавать id выбранного объекта