Версия для печати темы (https://pro1c.org.ua/index.php?s=138a782aefb468052427770a5cd403c0&showtopic=61781)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Объединение виртуальных таблиц.

Автор: Bon Jovi 24.09.20, 17:05

Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста в следующем. Хочу написать запрос, который будет формироваться по ходу обхода цикла, то есть каждая строка будет добавлять часть кода. Проблема в том, что я хочу объединить очень много таблиц в одну (полей всего два и они общие, есть у всех таблиц). Но на сколько я понимаю, нельзя объединять виртуальные таблицы. То есть такой метод не работает и выдаёт ошибку "Содержимое объекта данных может быть выбрано только во временную таблицу":

ВЫБРАТЬ
    ТЗ.Элемент1 КАК Элемент1 ,
    ТЗ.Элемент2 КАК Элемент2
ИЗ
    &ТЗ КАК ТЗ

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ТЗ2.Элемент1 ,
    ТЗ2.Элемент2
ИЗ
    &ТЗ2 КАК ТЗ2


Поделитесь информацией по этому поводу. Нужно именно таким способом, то есть каждая строка цикла должна добавить очередной кусок объединения.

Автор: Bernet 24.09.20, 17:52

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

Автор: sava1 24.09.20, 19:23

Bon Jovi @ Сегодня, 18:05 * ,

стесняюсь спросить - а зачем такое объединение?

Автор: Bon Jovi 25.09.20, 9:09

Bernet @ Вчера, 18:52 * ,
Немного ошибся (за что стыдно) ... Объединить не виртуальные, а временные таблицы...
И о таком методе как вы предложили я знаю, не подходит

sava1 @ Вчера, 20:23 * ,

Цитата
хочу объединить очень много таблиц в одну

Автор: Vofka 25.09.20, 9:12

Цитата(Bon Jovi @ 25.09.20, 10:09) *
И о таком методе как вы предложили я знаю, не подходит

В смысле не подходит? Код выше обхъдиняет временные таблицы.

Автор: Bon Jovi 01.10.20, 11:38

Vofka @ 25.09.20, 10:12 * ,
Вот как с этой задачей справился я:

ТекстЗапроса1 = ""; ТекстЗапроса2 = ""; Счётчик = 0;
    Для каждого СтрокаПараметра Из Параметры Цикл    
        
        Если НЕ ТипЗнч(ЗначениеИзСтрокиВнутр(СтрокаПараметра)) = Тип("ТаблицаЗначений") ИЛИ ЗначениеИзСтрокиВнутр(СтрокаПараметра).Количество() = 0 Тогда
            Продолжить;            
        КонецЕсли;    
        
        Счётчик = Счётчик + 1;
        
        ТекстЗапроса1 = ТекстЗапроса1 + "ВЫБРАТЬ ТЗ" + Счётчик + ".Номенклатура, ТЗ" + Счётчик + ".Склад ПОМЕСТИТЬ ТЗ" + Счётчик + " ИЗ &ТЗ" + Счётчик + " КАК ТЗ" + Счётчик + ";";        
        ТекстЗапроса2 = ТекстЗапроса2 + "ВЫБРАТЬ ТЗ" + Счётчик + ".Номенклатура, ТЗ" + Счётчик + ".Склад ИЗ ТЗ" + Счётчик + " КАК ТЗ" + Счётчик + "";
        
        Если Счётчик <> 1 Тогда
            ТекстЗапроса2 = СтрЗаменить(ТекстЗапроса2, "ВЫБРАТЬ ТЗ" + Счётчик, " ОБЪЕДИНИТЬ ВЫБРАТЬ ТЗ" + Счётчик);        
        КонецЕсли;
        
        Запрос.УстановитьПараметр("ТЗ" + Счётчик, ЗначениеИзСтрокиВнутр(СтрокаПараметра).Скопировать(, "Номенклатура, Склад"));                         
        
    КонецЦикла;      
    
    Если Счётчик = 0 Тогда
        Возврат;
    КонецЕсли;

    Запрос.Текст = ТекстЗапроса1 + ТекстЗапроса2;

Автор: Petre 01.10.20, 11:58

Bon Jovi @ Today, 11:38 * ,
И в чем разница между

QUOTE (Bernet @ 24.09.20, 17:52) *
сначала помещаете каждую из таблиц во временную таблицу, а потом уже объединяете результат

???

Автор: Bon Jovi 01.10.20, 12:02

Petre @ Сегодня, 12:58 * ,
Вопрос был в том, как это сделать автоматически к большому количеству таблиц значений. Сам принцип объединения временных таблиц мне был понятен и известен.

Автор: twilight_dream 05.10.20, 12:46

Цитата(Bon Jovi @ 01.10.20, 13:02) *
Вопрос был в том, как это сделать автоматически к большому количеству таблиц значений. Сам принцип объединения временных таблиц мне был понятен и известен.

Обычно это делают с помощью набора программного кода. Можно заплатить кому то - и за вас наберут. Или заставить с помощью лести, лжи, угроз, чтобы кто то написал за вас.

Автор: Bon Jovi 05.10.20, 12:56

twilight_dream @ Сегодня, 13:46 * ,
Большое спасибо. Задание давно готово и написано личной мной. Да и вначале я не просил за меня работу делать, а только дать идею реализации задачи, но видно для гуру программистов оказать помощь это слишком, но вот оставить язвителный комментарии это они могут

Автор: twilight_dream 05.10.20, 14:37

Цитата(Bon Jovi @ 05.10.20, 13:56) *
но вот оставить язвителный комментарии это они могут


Чесно, первый раз в жизни. Больше так не буду.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua