15 мая 2017 г.

Получение данных из нескольких источников недопустимо

Есть ограничения в платформе 1С:Підприємство 8.3 (8.3.10.2168), ну и ниже версий.

Нельзя использовать одновременно соединение таблиц базы данных (например таблицы регистра) и данные из ВнешнеИсточникиДанных в запросах.

Обойти это ограничение возможно сначала обратиться к ВнешниеИсточникиДанных с помощью запроса, а результат запроса выгрузить в таблицу значений.

Далее сделать еще один запрос и в качестве источника данных выбрать ранее выгруженную таблицу значений.
А далее в этом запросе готовую таблицу значений соединяем с нашими данными из базы 1С (например, регистром сведений).

У меня данный пример реализован в функции ПолучитьТЗ()

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
 
 //так как нельзя использовать в одном запросе обращение к таблицам внешних 
 //источников данных и таблицам информационной базы 1С делаем такой ход
 ТаблицаЗначенийРезультат = ПолучитьТЗ();
 //получим ТЗ и ее запихнем в отчет
 
 Если ТаблицаЗначенийРезультат.Количество() = 0 Тогда 
  Возврат;
 КонецЕсли;
 
 СтандартнаяОбработка = Ложь; 
 СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
 
 Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
 
 ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; 
 КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
 
 МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
 
 //поместим ТЗ в отчет
 ВнешнийНаборДанных = Новый Структура("fdu92doc", ТаблицаЗначенийРезультат);
 
 ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
 ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
 
 ДокументРезультат.Очистить();
 
 ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
 ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
 ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
 
КонецПроцедуры

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

Комментариев нет:

Отправить комментарий

 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07