Как передать в запрос параметры при обращении к другой базе через COMObject
Здравствуйте!
Создаю внешний отчет для БП2.0, есть необходимость подтянуть данные из другой базы (ЗУП), привожу отрывок кода:
Возникает ошибка:
Произошла исключительная ситуация (1C:Enterprise 8.3.8.1675): {(8, 2)}: Неверные параметры "ВнешнийИсточник"
Где ВнешнийИсточник - это результат запроса в текушей базе БП, как передать его в параметры такого запроса?
Создаю внешний отчет для БП2.0, есть необходимость подтянуть данные из другой базы (ЗУП), привожу отрывок кода:
v8 = Новый COMObject(УправлениеСоединениямиИБ.ИмяCOMСоединителя());
Открыта = v8.Connect("Srvr =""server"";Ref=Base2;Usr=""***"";Pwd=""***"";");
Query = Открыта.NewObject("Запрос");
Query.Текст =
"ВЫБРАТЬ
| ТЗ.Сумма,
| ТЗ.НоменклатурнаяГруппа,
| ТЗ.ВидДеятельности,
| ТЗ.Период
|ПОМЕСТИТЬ ВТ_05ПРОЦЕНТ
|ИЗ
| &ВнешнийИсточник КАК ТЗ
|; и т.д.
Query.УстановитьПараметр("НачалоПериода", НачалоПериода);
Query.УстановитьПараметр("КонецПериода", КонецПериода);
Query.УстановитьПараметр("ВнешнийИсточник",ЗапросПроценты.Выполнить().Выгрузить));
ПоказатьВозникает ошибка:
Произошла исключительная ситуация (1C:Enterprise 8.3.8.1675): {(8, 2)}: Неверные параметры "ВнешнийИсточник"
Где ВнешнийИсточник - это результат запроса в текушей базе БП, как передать его в параметры такого запроса?
По теме из базы знаний
Найденные решения
Ну или попробуйте так:
P/s (4) опередил
ТекТЗ = ЗапросПроценты.Выполнить().Выгрузить();
КомТЗ = Открыта.NewObject("ТаблицаЗначений");
Для Каждого Стр Из ТекТЗ Цикл
НоваСтрока = КомТЗ.Добавить();
НоваСтрока.Сумма = Стр.Сумма;
НоваСтрока.Период = Стр.СумПериод;
НГ = Открыта.Справочники.НоменклатурнаяГруппа.НайтиПоНаименованию(Стр.НоменклатурнаяГруппа.Наименование);
НоваСтрока.НоменклатурнаяГруппа = НГ;
ВД = Открыта.Справочники.ВидДеятельности.НайтиПоНаименованию(Стр.ВидДеятельности .Наименование);
НоваСтрока.ВидДеятельности = ВД
КонецЦикла
Query.УстановитьПараметр("ВнешнийИсточник",КомТЗ);
ПоказатьP/s (4) опередил
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1)Сдается мне , что так не прокатит. ВнешнийИсточник должен содержать типы конечной базы , т.е что то типа Открыта.NewObject("ТаблицаЗначений"). И внутри это ТЗ должны быть сом объекты
Похожая тема
ВнешнийИсточник заполняйте примерно так...
ВнешнийИсточник = Открыта.NewObject("ТаблицаЗначений");
.....
Выборка = ЗапросПроценты.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ВнешнийИсточник .Добавить();
НоваяСтрока.Колонка1 = Открыта.Справочники.НазваниеСправочника.НийтиПоНаименованию/Коду(Выборка.Колонка1Наименование);
.....
КонецЦикла
Показать
Ну или попробуйте так:
P/s (4) опередил
ТекТЗ = ЗапросПроценты.Выполнить().Выгрузить();
КомТЗ = Открыта.NewObject("ТаблицаЗначений");
Для Каждого Стр Из ТекТЗ Цикл
НоваСтрока = КомТЗ.Добавить();
НоваСтрока.Сумма = Стр.Сумма;
НоваСтрока.Период = Стр.СумПериод;
НГ = Открыта.Справочники.НоменклатурнаяГруппа.НайтиПоНаименованию(Стр.НоменклатурнаяГруппа.Наименование);
НоваСтрока.НоменклатурнаяГруппа = НГ;
ВД = Открыта.Справочники.ВидДеятельности.НайтиПоНаименованию(Стр.ВидДеятельности .Наименование);
НоваСтрока.ВидДеятельности = ВД
КонецЦикла
Query.УстановитьПараметр("ВнешнийИсточник",КомТЗ);
ПоказатьP/s (4) опередил
Здесь http://1c-pro.ru/threads/podkljuchenie-ib-cherez-com-obekt-i-poluchenie-dannyx.42056/ нашёл
Здесьhttp://j008.ru/ps/035_COMConnector_TT предлагают передавать значения через .ЗначениеВСтрокуВнутр() .ЗначениеИзСтрокиВнутр();
Здесьhttp://j008.ru/ps/031_1c_COMConnector_Ex предлагают переделать запрос на стороне com-объекат под возврат простых типов
Здесьhttp://forum.infostart.ru/forum9/topic40234/ есть идея
П.С. Давно понял, что гугль - это квест, а не решебник.
объекты, передаваемые в базу через коннектор должны быть созданы в той базе, структуры и запросы через коннектор не передаются, так же как не передаются и ссылочные типы из текущей базы. если вы получили ссылочный тип из коннектора, его можно передавать в качестве параметров
Здесь
Здесь
| ПРЕДСТАВЛЕНИЕ(ПРЕДСТАВЛЕНИЕССЫЛКИ(Док.Контрагент.Наименование)) как Контрагент
Здесь
Когда в параметр передаете ссылку, то передайте ее так Запрос.УстановитьПараметр("Ссылка", Ссылка.Ref);
но нет подтверждения правильности
П.С. Давно понял, что гугль - это квест, а не решебник.
Пример, который написал Алексей будет работать (и нужно именно так), а тема с конвертацией значений через .ЗначениеВСтрокуВнутр() .ЗначениеИзСтрокиВнутр(); от Роберта прекрасно работает если в базах совпадают ссылки (то есть не нужно по коду или наименованию искать), на худой конец, если не верите этим функциям, то для ссылочных типов можно получить идентификатор, преобразовывать в строку, а в базе удаленной через получитьссылку получать ссылку на элемента ссылочного типа
С оле проще всего работать через внешние отчеты. Премущества отладка и минимум ограничений
http://www.forum.mista.ru/topic.php?id=761328#37
Всем большое спасибо за отклики!
Сделал так:
Но теперь возникает другая ошибка:
Тип не может быть выбран в запросе <<?>>ТЗ.Сумма,
Видимо, нужно сделать примерно так:
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Пробовал так: ВнешнийИсточник.Колонки.Добавить("Сумма", Открыта.NewObject(Открыта.ОписаниеТипов("Число"))); Но не прокатило
Сделал так:
ВнешнийИсточник = Открыта.NewObject("ТаблицаЗначений");
ВнешнийИсточник.Колонки.Добавить("Сумма");
ВнешнийИсточник.Колонки.Добавить("НоменклатурнаяГруппа");
ВнешнийИсточник.Колонки.Добавить("ВидДеятельности");
ВнешнийИсточник.Колонки.Добавить("Период");
Пока Выборка.Следующий() Цикл
НоваяСтрока = ВнешнийИсточник.Добавить();
НоваяСтрока.Сумма = Выборка.Сумма;
НоваяСтрока.НоменклатурнаяГруппа = Выборка.НоменклатурнаяГруппа;
НоваяСтрока.ВидДеятельности = Выборка.ВидДеятельности;
НоваяСтрока.Период = Выборка.Период;
КонецЦикла;
Query.УстановитьПараметр("ВнешнийИсточник", ВнешнийИсточник);
ПоказатьНо теперь возникает другая ошибка:
Тип не может быть выбран в запросе <<?>>ТЗ.Сумма,
Видимо, нужно сделать примерно так:
ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Пробовал так: ВнешнийИсточник.Колонки.Добавить("Сумма", Открыта.NewObject(Открыта.ОписаниеТипов("Число"))); Но не прокатило
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)