Имя: Пароль:
1C
1С v8
Запрос к внешнему источнику данных.
0 nomid
 
24.11.15
10:35
Доброго времени. Помогите, кому не лень.
Подключен внешний источник данных ODBC, FireBird 2.5
Делаю запрос к таблице ВИД:

&НаСервере
    Функция ЗапросНаСервере
    
        ВыбрБаза = ПоучитьВыбраннуюБазу();
        ВнешнийИсточник = "ВнешнийИсточникДанных."+ВыбрБаза+".Таблица.OSZNCHANGE";
    
        ТабЗнач = Новый ТаблицаЗначений();
        Запрос = Новый Запрос;
        МенеджерВТ = Новый МенеджерВременныхТаблиц;
    
        Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
        Запрос.Текст = "ВЫБРАТЬ *
                        |ПОМЕСТИТЬ ВР    
                        |ИЗ
                        |    
                        |    &ВнешнийИсточник КАК ВнешнийИсточник";
                    
        Запрос.УстановитьПараметр("ВнешнийИсточник",ВнешнийИсточник);
        ТабЗнач = Запрос.Выполнить().Выгрузить();
    
        Возврат ТабЗнач;
    КонецФункции

Получаю ошибку:    
    Неверные параметры "ВнешнийИсточник"
<<?>>&ВнешнийИсточник КАК ВнешнийИсточник

Выичисляю выражение "ВнешнийИсточник", получаю:
"ВнешнийИсточникДанных.VID.Таблица.OSZNCHANGE"

Если я не помещаю во врменную таблицу и не использую МВТ, то ошибка следующая:
"Содержимое объекта данных может быть выбрано только во временную таблицу"

При этом, указав полную строку в запросе, все отрабатывает.
1 VikingKosmo
 
24.11.15
10:37
А результаты запроса к внешним источникам нельзя соединять в запросе с таблицами БД, внезапно, правда?
2 VikingKosmo
 
24.11.15
10:38
Сначала выгрузи данных из внешнего источника в ТЗ, а потом уж делай с этой ТЗ, что хочешь
3 nomid
 
24.11.15
10:48
Собственно проблема не в выгрузки данных, а как засунуть ВИД в переменную. То есть при выборе определенного источника в форме, запрос уходит к нему.

Если я делаю без установки параметров, запрос вида:

"ВЫБРАТЬ *
         |ИЗ
         |    
         |  ВнешнийИсточникДанных.VID.Таблица.OSZNCHANGE   КАК ВнешнийИсточник";

Проходит нормально и я получаю ТЗ.
А вот как мне вместо "VID" подставлять разное значение ума не приложу. Или это не реализуемо?
4 НЕА123
 
24.11.15
10:55
Запрос.УстановитьПараметр("ВнешнийИсточник",ВнешнийИсточник);
<- Запрос.Текст = СтрЗаменить("&ВнешнийИсточник", ВнешнийИсточник);
5 НЕА123
 
24.11.15
10:56
*
СтрЗаменить(Запрос.Текст, "&ВнешнийИсточник", ВнешнийИсточник);
6 Живой Ископаемый
 
24.11.15
10:57
2(3) Никак. Выгрузить результат запроса к ВИДу в ТЗ, ТЗ запихнуть в переменную.
7 Живой Ископаемый
 
24.11.15
11:01
а, ну да, меняя сам запрос
8 nomid
 
24.11.15
11:28
(5) Огромное спасибо. Сам бы не допер.
Рабочий результат, вдруг кому пригодится:

&НаСервере
Функция ЗапросНаСервере()
    
    ВыбрБаза = ПоучитьВыбраннуюБазу();
    ВнешнийИсточник = "ВнешнийИсточникДанных."+ВыбрБаза+".Таблица.OSZNCHANGE";
    
    ТабЗнач = Новый ТаблицаЗначений();
    Запрос = Новый Запрос;
    
    Запрос.Текст = "ВЫБРАТЬ *
                    |    
                    |ИЗ
                    |    
                    |    &ВнешнийИсточник КАК ВнешнийИсточник";
                    
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"&ВнешнийИсточник", ВнешнийИсточник);
    ТабЗнач = Запрос.Выполнить().Выгрузить();
    
    Возврат ТабЗнач;
    
КонецФункции
9 User_Agronom
 
24.11.15
11:28
(0) Собирай текст запроса демонически.