|
Объединение виртуальных таблиц. | ☑ | ||
---|---|---|---|---|
0
Bon Jovi
24.09.20
✎
18:07
|
Конфигурация: Trade (10.3.29.1) (http://v8.1c.ru/trade/), версия: 8.3.11.2867, обычные формы.
Добрый день. Подскажите пожалуйста в следующем. Хочу написать запрос, который будет формироваться по ходу обхода цикла, то есть каждая строка будет добавлять часть кода. Проблема в том, что я хочу объединить очень много таблиц в одну (полей всего два и они общие, есть у всех таблиц). Но на сколько я понимаю, нельзя объединять виртуальные таблицы. То есть такой метод не работает и выдаёт ошибку "Содержимое объекта данных может быть выбрано только во временную таблицу": ВЫБРАТЬ ТЗ.Элемент1 КАК Элемент1 , ТЗ.Элемент2 КАК Элемент2 ИЗ &ТЗ КАК ТЗ ОБЪЕДИНИТЬ ВЫБРАТЬ ТЗ2.Элемент1 , ТЗ2.Элемент2 ИЗ &ТЗ2 КАК ТЗ2 Поделитесь информацией по этому поводу. Нужно именно таким способом, то есть каждая строка цикла должна добавить очередной кусок объединения. |
|||
1
shuhard
24.09.20
✎
18:09
|
(0) дык помести во временную таблицу и объединяй
|
|||
2
sqr4
24.09.20
✎
18:10
|
ВЫБРАТЬ
ТЗ.Элемент1 КАК Элемент1, ТЗ.Элемент2 КАК Элемент2 ПОМЕСТИТЬ т1 ИЗ &ТЗ КАК ТЗ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ2.Элемент1 КАК Элемент1, ТЗ2.Элемент2 КАК Элемент2 ПОМЕСТИТЬ т2 ИЗ &ТЗ2 КАК ТЗ2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ т1.Элемент1 КАК Элемент1, т1.Элемент2 КАК Элемент2 ИЗ т1 КАК т1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ т2.Элемент1, т2.Элемент2 ИЗ т2 КАК т2 |
|||
3
Bon Jovi
24.09.20
✎
18:11
|
(1) это понятно, но дело в том, что я могу поместить каждую таблицу из каждой строки цикла в таблицу, но как потом их объединить? Да, я приду к тому, что у меня будет 150 пакетов, которые будут хранить 150 временных таблиц, и как мне в конце, в самом последнем пакете ссылаться на каждый пакет, чтобы составить концовку запроса?
|
|||
4
Bon Jovi
24.09.20
✎
18:12
|
(2) такой же ответ как в (3) .
|
|||
5
sqr4
24.09.20
✎
18:27
|
(4) в цикле
|
|||
6
Bon Jovi
24.09.20
✎
18:30
|
(5) вы меня не поняли...
|
|||
7
sqr4
24.09.20
✎
18:34
|
(6) в первом цикле параллельно формируй верхнюю помещение ТЗ в виртуальные таблицы и последний пакет. Задача как по мне не сложна
|
|||
8
PR
24.09.20
✎
18:35
|
Какие же кретинские у людей решения, мама дорогая
(0) Если тебе не важно, считают ли тебя кретином, то выбирай из разных ТЗ, помещай в разные ВТ, потом выбирай из разных ВТ в одну выборку А если ты готов закончить с кретинским прошлым, то просто предварительно помести все в одну ТЗ, а потом уже из нее выбирай запросом и не трахай наши мозг и чувство прекрасного |
|||
9
Bon Jovi
24.09.20
✎
18:42
|
(8) Спасибо, учту Ваше пожелание.
|
|||
10
Ёпрст
24.09.20
✎
18:45
|
(0) если что, объединять через запрос - это одно из самых медленных решений
|
|||
11
Bon Jovi
24.09.20
✎
18:45
|
(7) Попробовал сделать так, обходя цикл формирую сразу 2 текста запроса: первый - обычный текст запроса, к которому добавляю из каждой строки цикла кусок текста, в котором передаю временную таблицу; второй - формирую концовку, также из каждой строки цикла беру текст, в которому хранится информация об объединении запроса. В самом конце, как вышел из цикла, формирую общий текст (добавляя к основному тексту запроса переменную со второй частью текста), и выполняю запрос всего один раз. Ответ получился нужный, но вот не знаю, не ярый ли костыль такая конструкция ...
|
|||
12
Ёпрст
24.09.20
✎
18:45
|
объединяй свои тз в коде.
|
|||
13
Bon Jovi
24.09.20
✎
18:46
|
(10) подскажите метод более быстрее, который объединит мне 100-1000 таблиц значений в одну?
|
|||
14
PR
24.09.20
✎
18:47
|
(13) Тебе уже хором все сказали, кодом объединяй
|
|||
15
sqr4
24.09.20
✎
18:50
|
Ильдарович делает так http://catalog.mista.ru/1c/articles/306536/ п 18
|
|||
16
Ёпрст
24.09.20
✎
18:52
|
(13) ну так, хотя бы
Для Каждого Строка Из Таблица0 Цикл ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Строка) КонецЦикла; |
|||
17
МихаилМ
24.09.20
✎
21:01
|
(13) Этот код процентов на 30
быстрее чем добавить ззс из (15) адаптируйте его под много тзешность //------------------------------------------------------------------------------------------------------------------------------ Функция УникальноеИмяКолонки() Экспорт Возврат "W"+СтрЗаменить(СокрЛП(Новый УникальныйИдентификатор),"-",""); КонецФункции // //--------------------------------------------------------------------------------------------------------------------- Функция ПолучитьМассивВсехСтрок(ТЗ) Экспорт Перем МассивТекСтрок; Перем Отбор; Перем ИмяВремКолонки; ИмяВремКолонки = УникальноеИмяКолонки(); ТЗ.Колонки.Добавить(ИмяВремКолонки,Новый ОписаниеТипов("Булево")); Отбор = Новый Структура(); Отбор.Вставить(ИмяВремКолонки,FALSE); МассивТекСтрок = ТЗ.НайтиСтроки(Отбор); ТЗ.Колонки.Удалить(ИмяВремКолонки); Возврат МассивТекСтрок; КонецФункции // ПолучитьМассивВсехСтрок //--------------------------------------------------------------------------------------------------------------------- Функция ОбъединитьТЗ_Через_МассивТекСтрок_Отбор_Добавить(Основа,Добавка)Экспорт Перем МассивТекСтрок; Перем НоваяОснова; Перем ТекстрокаДобавки; МассивТекСтрок = МодульНетленка1.ПолучитьМассивВсехСтрок(Основа); Для Каждого ТекстрокаДобавки ИЗ Добавка Цикл МассивТекСтрок.Добавить(ТекстрокаДобавки); КонецЦикла; НоваяОснова = Основа.Скопировать(МассивТекСтрок); Основа = НоваяОснова; Возврат TRUE; КонецФункции //ОбъединитьТЗ_Через_МассивТекСтрок_Отбор_Добавить |
|||
18
Ёпрст
24.09.20
✎
23:30
|
(17) интересный подход, надо поиграться на досуге.
|
|||
19
Ёпрст
24.09.20
✎
23:31
|
Только непонятно, зачем в финале это:
НоваяОснова = Основа.Скопировать(МассивТекСтрок); Основа = НоваяОснова; раз уже через массив строк строки добавили ранее.. ? |
|||
20
МихаилМ
24.09.20
✎
23:51
|
(19) к основе прибавляется добавка. поэтому новая тз копируется в основу. нужен был для унификации тк в добавить ззс онова "вырастает" . всего у меня штук 15 методов объединения тз . и в (17) не
всегда самый эффективный . для разного количества колонок и соотношения строк основы и добавки, и типов данных колонок оптимальны разные методы. |
|||
21
МихаилМ
25.09.20
✎
00:04
|
(18) поиграйтесь .. https://cloud.mail.ru/public/3WBf/3SGRGyqhJ
|
|||
22
Ёпрст
25.09.20
✎
02:37
|
(21) ага, спасибо
|
|||
23
Bon Jovi
25.09.20
✎
10:05
|
Немного ошибся (за что стыдно) ... Объединить не виртуальные, а временные таблицы...
|
|||
24
Simod
25.09.20
✎
11:03
|
В БСП: ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу()
Описание там же. |
|||
25
Bon Jovi
01.10.20
✎
12:46
|
Вот как с этой задачей справился я:
ТекстЗапроса1 = ""; ТекстЗапроса2 = ""; Счётчик = 0;
|
|||
26
МихаилМ
01.10.20
✎
13:00
|
(25)
ну и объединяйте строки внутренние . для 2 колонок тз будет раз в 50 быстрее чем ВАш код. |
|||
27
Bon Jovi
01.10.20
✎
13:04
|
(26) Спорить не буду, не проверял. Но это лучший вариант из того, что мне предлагали выше...
|
|||
28
TormozIT
гуру
01.10.20
✎
13:31
|
Да что за болезнь такая у многих называть временные таблицы виртуальными? Надо выявить основных разносчиков и активно лечить их =)
|
|||
29
МихаилМ
01.10.20
✎
14:34
|
(28) 80% задающих здесь вопросы - случайные люди ит индустрии.
|
|||
30
Bon Jovi
01.10.20
✎
15:01
|
(28) Я уже извинился по этому поводу...
|
|||
31
Bon Jovi
01.10.20
✎
15:03
|
(29) Интересно, а какой процент людей, которые действительно дают дельные советы, а не такие как "объединить 100+ таблиц в одну путём сравнивания строк между одной таблицей с другой"...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |