Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста в следующем. Хочу написать запрос, который будет формироваться по ходу обхода цикла, то есть каждая строка будет добавлять часть кода. Проблема в том, что я хочу объединить очень много таблиц в одну (полей всего два и они общие, есть у всех таблиц). Но на сколько я понимаю, нельзя объединять виртуальные таблицы. То есть такой метод не работает и выдаёт ошибку "Содержимое объекта данных может быть выбрано только во временную таблицу":
ВЫБРАТЬ
ТЗ.Элемент1 КАК Элемент1 ,
ТЗ.Элемент2 КАК Элемент2
ИЗ
&ТЗ КАК ТЗ
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ТЗ2.Элемент1 ,
ТЗ2.Элемент2
ИЗ
&ТЗ2 КАК ТЗ2
Bon Jovi @ Сегодня, 18:05
,
сначала помещаете каждую из таблиц во временную таблицу, а потом уже объединяете результат
т.е.
ВЫБРАТЬ
ТЗ.Элемент1 КАК Элемент1 ,
ТЗ.Элемент2 КАК Элемент2
ПОМЕСТИТЬ ВТ1
ИЗ
&ТЗ КАК ТЗ
;
///////////////////////////////////////////////
ВЫБРАТЬ
ТЗ2.Элемент1 ,
ТЗ2.Элемент2
ПОМЕСТИТЬ ВТ2
ИЗ
&ТЗ2 КАК ТЗ2
;
///////////////////////////////////////////////
ВЫБРАТЬ
ВТ1.Элемент1 КАК Элемент1 ,
ВТ1.Элемент2 КАК Элемент2
ИЗ
ВТ1 КАК ВТ1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВТ2.Элемент1 ,
ВТ2.Элемент2
ИЗ
ВТ2 КАК ВТ2
Bon Jovi @ Сегодня, 18:05
,
стесняюсь спросить - а зачем такое объединение?
Bernet @ Вчера, 18:52
,
Немного ошибся (за что стыдно) ... Объединить не виртуальные, а временные таблицы...
И о таком методе как вы предложили я знаю, не подходит
sava1 @ Вчера, 20:23
,
Vofka @ 25.09.20, 10:12
,
Вот как с этой задачей справился я:
ТекстЗапроса1 = ""; ТекстЗапроса2 = ""; Счётчик = 0;
Для каждого СтрокаПараметра Из Параметры Цикл
Если НЕ ТипЗнч(ЗначениеИзСтрокиВнутр(СтрокаПараметра)) = Тип("ТаблицаЗначений") ИЛИ ЗначениеИзСтрокиВнутр(СтрокаПараметра).Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Счётчик = Счётчик + 1;
ТекстЗапроса1 = ТекстЗапроса1 + "ВЫБРАТЬ ТЗ" + Счётчик + ".Номенклатура, ТЗ" + Счётчик + ".Склад ПОМЕСТИТЬ ТЗ" + Счётчик + " ИЗ &ТЗ" + Счётчик + " КАК ТЗ" + Счётчик + ";";
ТекстЗапроса2 = ТекстЗапроса2 + "ВЫБРАТЬ ТЗ" + Счётчик + ".Номенклатура, ТЗ" + Счётчик + ".Склад ИЗ ТЗ" + Счётчик + " КАК ТЗ" + Счётчик + "";
Если Счётчик <> 1 Тогда
ТекстЗапроса2 = СтрЗаменить(ТекстЗапроса2, "ВЫБРАТЬ ТЗ" + Счётчик, " ОБЪЕДИНИТЬ ВЫБРАТЬ ТЗ" + Счётчик);
КонецЕсли;
Запрос.УстановитьПараметр("ТЗ" + Счётчик, ЗначениеИзСтрокиВнутр(СтрокаПараметра).Скопировать(, "Номенклатура, Склад"));
КонецЦикла;
Если Счётчик = 0 Тогда
Возврат;
КонецЕсли;
Запрос.Текст = ТекстЗапроса1 + ТекстЗапроса2;
Bon Jovi @ Today, 11:38
,
И в чем разница между
Petre @ Сегодня, 12:58
,
Вопрос был в том, как это сделать автоматически к большому количеству таблиц значений. Сам принцип объединения временных таблиц мне был понятен и известен.
twilight_dream @ Сегодня, 13:46
,
Большое спасибо. Задание давно готово и написано личной мной. Да и вначале я не просил за меня работу делать, а только дать идею реализации задачи, но видно для гуру программистов оказать помощь это слишком, но вот оставить язвителный комментарии это они могут
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua