![]() |
|
Объединить две ТЗ запросом | ☑ | ||
---|---|---|---|---|
0
abask
23.12.22
✎
18:03
|
Всех с пятницей !!!
пытаюсь объединить две ТЗ с неизвестной, но одинаковой структурой без цикла с заданной структурой разобрался Написал вот такую функцию Функция СклеитьТЗ(ТЗ_1, ТЗ_2) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ_1.Период КАК Период |ПОМЕСТИТЬ ВТ_1 |ИЗ | &ТЗ_1 КАК ТЗ_1 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗ_2.Период КАК Период |ПОМЕСТИТЬ ВТ_2 |ИЗ | &ТЗ_2 КАК ТЗ_2 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_1.Период КАК Период |ИЗ | ВТ_1 КАК ВТ_1 | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ | ВТ_2.Период |ИЗ | ВТ_2 КАК ВТ_2"; Запрос.УстановитьПараметр("ТЗ_1", ТЗ_1); Запрос.УстановитьПараметр("ТЗ_2", ТЗ_2); РезультирующаяТЗ = Запрос.Выполнить().Выгрузить(); Возврат РезультирующаяТЗ; КонецФункции Если вместо Период указываю * не работает есть смысл в эту сторону копать? |
|||
1
RomanYS
23.12.22
✎
18:06
|
(0) ну перебери колонки ТЗ и сформируй текст запроса с полями. Есть ли смысл - тебе виднее.
Обычно просто циклом строки добавляют |
|||
2
Timon1405
23.12.22
✎
18:07
|
может нет типизации колонок при передаче в запрос
|
|||
3
abask
23.12.22
✎
18:09
|
(1) Если цикл делать, тогда проще использовать ЗаполнитьЗначенияСвойств
|
|||
4
RomanYS
23.12.22
✎
18:55
|
(3) так и делают. В БСП наверняка это есть
|
|||
5
Chai Nic
23.12.22
✎
19:26
|
(0) Это ты зря. Без цикла, но с передачей данных на sql-сервер туда-сюда.
|
|||
6
ass1c
23.12.22
✎
19:38
|
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ДемоБанковскиеСчета", Новый ОписаниеТипов("СправочникСсылка._ДемоБанковскиеСчета")); ТЗ.Колонки.Добавить("ДемоКассы" , Новый ОписаниеТипов("СправочникСсылка._ДемоКассы")); Строка = ТЗ.Добавить(); Строка.ДемоБанковскиеСчета = Справочники._ДемоБанковскиеСчета.ПустаяСсылка(); Строка.ДемоКассы = Справочники._ДемоКассы.ПустаяСсылка(); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ"; Запрос.УстановитьПараметр("ТЗ", ТЗ); Запрос.Выполнить(); ТЗ2 = Новый ТаблицаЗначений; ТЗ2.Колонки.Добавить("ДемоБанковскиеСчета", Новый ОписаниеТипов("СправочникСсылка._ДемоБанковскиеСчета")); ТЗ2.Колонки.Добавить("ДемоКассы" , Новый ОписаниеТипов("СправочникСсылка._ДемоКассы")); Строка = ТЗ2.Добавить(); Строка.ДемоБанковскиеСчета = Справочники._ДемоБанковскиеСчета.ПустаяСсылка(); Строка.ДемоКассы = Справочники._ДемоКассы.ПустаяСсылка(); Запрос.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ТЗ2 ИЗ &ТЗ КАК ТЗ"; Запрос.УстановитьПараметр("ТЗ", ТЗ); Запрос.Выполнить(); Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | ТЗ КАК ВТ_1 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | * |ИЗ | ТЗ2 КАК ВТ_2"; ТЗИтог = Запрос.Выполнить().Выгрузить(); |
|||
7
SleepyHead
гуру
24.12.22
✎
08:04
|
(3) Это очень медленно, так как каждый раз выполняется сравнение состава колонок таблиц.
Если всего одно поле, как у автора, лучше добавлять строку и присваивать значение периода "китайским кодом". |
|||
8
rudnitskij
24.12.22
✎
12:37
|
Для Каждого Стр Из Таб2 Цикл
НовСТр = Таб1.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр, Стр); КонецЦикла; --------------------------- Этот вариант совсем неприемлемый? Или обязательно нужно чтоб это делал сервер SQL? |
|||
9
abask
24.12.22
✎
12:44
|
(8) вопрос более академический, чем прикладной
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |