|
СКД : Соединение в запросе или в СКД. | ☑ | ||
---|---|---|---|---|
0
ЭЦ
05.07.21
✎
14:13
|
Господа.
Имется отчет. В нем два набора данных - оба запросы. Которые соединяются на закладке "Связи наборов данных" Прошу подсказть в чем смысл такого соединения если вместо двух запросов все это (включая соединение) межно сделать в одном запросе. Прошу поделится соображениями. Спасибо |
|||
1
aka MIK
05.07.21
✎
14:20
|
Типа так удобнее, передаем параметр в виртуальную таблицу.
На самом деле выходит банальный запрос в цикле |
|||
2
ДенисЧ
05.07.21
✎
14:21
|
(0) Если в запросе - выполняется на субде. Если в компоновке - то на сервере 1с.
|
|||
3
Ненавижу 1С
гуру
05.07.21
✎
14:22
|
(2) ну не факт, наверное может и в СУБД растранслировать
как в LINQ - место выполнения зависит от конкретной реализации |
|||
4
Йохохо
05.07.21
✎
14:27
|
удобнее объяснять почему надо переделать отчет, при фильтрации до выборки левое соединение становится слегка неожиданным для юзера
|
|||
5
Kassern
05.07.21
✎
14:30
|
(0) таким макаром можно удобно вывести все доп свойства динамически той же номенклатуры через связь наборов.
|
|||
6
ДенисЧ
05.07.21
✎
14:42
|
(3) Какой linq, акстись, Аксинья, это же 1с...
|
|||
7
ЭЦ
05.07.21
✎
14:43
|
(2) На СУБД - должно быть быстрее - но то он серрвер - запросы обрабатывать.
(3) А в чем неудобство доп. свойства обычным запросом выводить? |
|||
8
ЭЦ
05.07.21
✎
14:44
|
(5) А в чем неудобство доп. свойства обычным запросом выводить?
|
|||
9
acht
05.07.21
✎
14:44
|
(0) Ты призываешь к гаданию на кофейной гуще, все зависит от конкретного случая.
Вдруг там разработчик свою иерерахию делает? |
|||
10
ЭЦ
05.07.21
✎
14:51
|
(9) А что в запросе нельзя кауюто иерерхию делать какую в СКД можно?
|
|||
11
Ненавижу 1С
гуру
05.07.21
✎
14:53
|
(6) че сразу обзываться
|
|||
12
Kassern
05.07.21
✎
14:56
|
(8) попробуй сделать динамически вывод всех доп свойств одним запросом, чтобы для каждого свойства была своя отдельная колонка.
|
|||
13
Kassern
05.07.21
✎
14:57
|
(12) если нужно вывести пару свойств, то можно без проблем через левое соединение в одном запросе сделать, тупо присоединив табчасть со свойствами, где в связях отобрать по нужным свойствам.
|
|||
14
Said_We
05.07.21
✎
15:02
|
(13) Зачем левое соединение?
|
|||
15
Kassern
05.07.21
✎
15:02
|
(14) а почему бы и нет?
|
|||
16
Said_We
05.07.21
✎
15:03
|
(15) А так:
Запрос по характеристикам |
|||
17
Said_We
05.07.21
✎
15:04
|
(15) Левое соединение это тормоз. Если можно без него, то нужно без него.
|
|||
18
Said_We
05.07.21
✎
15:04
|
Для пары свойств точно никакие соединения не нужны.
|
|||
19
Малыш Джон
05.07.21
✎
15:06
|
(10) в запросе нельзя сотворить свою иерархию произвольной глубины. При связи наборов(так как по сути это запрос в цикле) - можно.
Но это единственный случай, который я знаю, когда можно сделать связью наборов и нельзя соединением таблиц. |
|||
20
Kassern
05.07.21
✎
15:07
|
(17) смотри. К примеру у тебя есть результирующая таблица с номенклатурой. Нужно к этой таблице добавить колонку с одним определенным свойством. Чем это будет тормознутее, если я левым соединением к основной таблице прицеплю таблицу дополнительных свойств и в связи укажу номенклатуру и нужное свойство?
|
|||
21
Kassern
05.07.21
✎
15:08
|
(20) по факту отбор в связи отрежет лишние строки у присоединяемой таблице и все сделается очень быстро
|
|||
22
Said_We
05.07.21
✎
15:09
|
(0) Используют для построения иерархии не иерархических данных, например.
т.е. есть произвольные данные не справочники и необходимо выстроить иерархию по каким, то колонкам. На СКД это делается удобно. |
|||
23
Said_We
05.07.21
✎
15:10
|
(21) Ссылку в (16) почитай. Там по времени проверили что быстрее и на сколько.
|
|||
24
Kassern
05.07.21
✎
15:15
|
(23) а если нужны ВСЕ данные из результирующей таблицы?
|
|||
25
Said_We
05.07.21
✎
15:16
|
PIVOT тебе в помощь.
Он отработает ещё быстрее - когда его в 1С сделают :-). |
|||
26
youalex
05.07.21
✎
15:16
|
(12) Характеристики, нет?
|
|||
27
Kassern
05.07.21
✎
15:17
|
(24) круто так взять и обрезать весь результат) В общем в разных случаях используются разные соединения. Мне в большинстве случаев нужно сохранить первую таблицу полностью и добавить данные из второй. Поэтому и левое соединение. А по поводу динамически вывода всех свойств отдельной колонкой я так примера и не увидел в одном запросе. Через наборы это очень просто делается.
|
|||
28
Said_We
05.07.21
✎
15:18
|
(24) Что значит все?
|
|||
29
Почему 1С
05.07.21
✎
15:20
|
(26) Да, но это слишком просто видимо )
|
|||
30
Kassern
05.07.21
✎
15:21
|
(28) У тебя к примеру 20 дополнительных реквизитов в номенклатуре. Нужно всех их вывести в отдельные колонки в отчете в рядом с номенклатурой.
|
|||
31
Said_We
05.07.21
✎
15:22
|
(27) Читали в ссылке (16) все посты, включая пост 28?
|
|||
32
Said_We
05.07.21
✎
15:23
|
(26) Не знаю почему. Меня всегда удивляет использование левого соединения везде где нужно и не нужно.
|
|||
33
Kassern
05.07.21
✎
15:25
|
(32) я же уже объяснил, что часто нужно сохранить первую таблицу без изменений, вот поэтому и левое.
|
|||
34
Said_We
05.07.21
✎
15:28
|
(30) Это количество же конечное? Всего 20-ть.
SELECT [1] AS А1 ,[2] AS А2 ,[3] AS А3 ,[4] AS A4 ,[5] AS A5 ,[6] AS A6 FROM data as t pivot ( max(t.aa) for t.npp in ([1],[2],[3],[4],[5],[6]) ) as pvt Как тут видно текст запросе не сложно динамически на любое количество построить.... |
|||
35
Said_We
05.07.21
✎
15:29
|
(33) Еще раз пост 28 по ссылке в (16). Не нужно левое соединение. Достаточно объединения.
|
|||
36
Kassern
05.07.21
✎
15:29
|
(34) это не конечное количество, любой менеджер может добавить свойство и оно должно добавиться в отчет автоматом. Проще говоря динамическое количество колонок
|
|||
37
Kassern
05.07.21
✎
15:30
|
(34) могу на почту скинуть пример с наборами где это реализовано для ут11, если интересно
|
|||
38
Classic
05.07.21
✎
15:30
|
(0)
Соединение наборов и левое соединение это не одно и то же |
|||
39
Said_We
05.07.21
✎
15:31
|
(36) Если СКД, то чем не устраивают характеристики?
Если SQL, то прописывать в любом случае - динамическое количество колонок - значит динамический текст запроса. |
|||
40
Said_We
05.07.21
✎
15:32
|
(38) ИСТИНУ говоришь :-)
|
|||
41
Classic
05.07.21
✎
15:34
|
(33)
Левое соединение не всегда оставляет левую таблицу без изменений. Частенько дублирует строки в этой самой левой таблице. |
|||
42
Kassern
05.07.21
✎
15:59
|
(39) Я с характеристиками толком не работал. Да можно их на вкладке указать, а далее без проблем фильтровать отчет по свойствам, но как это поможет динамически создавать колонки без явного указания связи характеристик. Вот пример с оф сайта: https://its.1c.ru/db/metod8dev/content/1795/hdoc
Кусок с примера (и да там левое соединение): ЫБРАТЬ РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, ПРЕДСТАВЛЕНИЕССЫЛКИ(РасходнаяНакладнаяСостав.Номенклатура) КАК НоменклатураПредставление, ДопСвойства.Свойство КАК Свойство, ДопСвойства1.Свойство КАК Свойство1 ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства ПО (ДопСвойства.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура И ДопСвойства.ВидСвойства = &П) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства1 ПО (ДопСвойства1.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура И ДопСвойства1.ВидСвойства = &П2) Вот я и пишу, если свойств будет 50, так же будете все 50 прописывать? Можете мне скинуть простой пример, где с помощью характеристик выводится динамически колонки со свойствами для номенклатуры? |
|||
43
Said_We
05.07.21
✎
16:06
|
(42) Это плохой пример :-)
|
|||
44
Kassern
05.07.21
✎
16:08
|
(43) другого не нашел)
|
|||
45
Kassern
05.07.21
✎
16:10
|
(43) тем и хороши наборы, что они в цикле все это дело склепают, как тебе надо и при этом минимум кода в запросе
|
|||
46
Said_We
05.07.21
✎
16:11
|
С диска ИТС "
ВЫБРАТЬ РасходнаяНакладнаяСостав.Ссылка КАК Документ, РасходнаяНакладнаяСостав.Номенклатура, РасходнаяНакладнаяСостав.Количество, РасходнаяНакладнаяСостав.Цена, РасходнаяНакладнаяСостав.Сумма, РасходнаяНакладнаяСостав.НомерСтроки ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав {ХАРАКТЕРИСТИКИ ТИП(Справочник.Номенклатура) СПИСОК ПланВидовХарактеристик.ВидыДопСвойств ИДЕНТИФИКАТОР Ссылка ИМЯ Наименование ТИПЗНАЧЕНИЯ ТипЗначения ЗНАЧЕНИЯ РегистрСведений.ДопСвойства ОБЪЕКТ Номенклатура ХАРАКТЕРИСТИКА ВидСвойства ЗНАЧЕНИЕ Свойство } Запрос, который сгенерирует компоновщик макета компоновки данных, будет выглядеть следующим образом:..." далее из (42) Если компоновщик генерирует такой запрос, то это очень плохо. Почему - это работает не быстро, по сравнению с другими вариантами. Теперь понятно почему чуть что JOIN лепят. Так на дисках ИТС учат иногда. :-) |
|||
47
Said_We
05.07.21
✎
16:14
|
На дисках ИТС много очень полезной информации, но бывает и так.
|
|||
48
Said_We
05.07.21
✎
16:19
|
(46) На самом деле, надо посмотреть какой запрос при работе с характеристиками приходит на SQL.
У меня есть огромные сомнения, что приходит запрос в (42). Скорее всего так написали, что бы была понятна суть. А прилетает, скорее всего, что-то типа как в (34). |
|||
49
Said_We
05.07.21
✎
16:26
|
+ к (48) Если без PIVOT, то хотя бы запрос в (16). Он быстрее.
Для DB2 прилететь должен запрос в (16) максимум. В DB2 ранее не было PIVOT. |
|||
50
Asmody
05.07.21
✎
17:30
|
(46) фишка в том, что фигурные скобки раскроются только для тех свойств, которые будут использованы в итоговой компоновке. а таковых на практике не слишком много
|
|||
51
Said_We
05.07.21
✎
18:42
|
(50) При динамическом построении текста запроса так же.
|
|||
52
Почему 1С
06.07.21
✎
07:22
|
(4) Юзер знать не знает про соединения вообще, что там неожиданного может быть? Левое превратится во внутреннее, ну так от фильтра это и ожидается.
(42) Покажи простой пример, а то я не догоняю о чем спор идет |
|||
53
youalex
06.07.21
✎
07:41
|
(42) Простой пример - в любой типовой, где от ссылки через точку выводятся значения доп. реквизитов.
Например, для Товаров в УТ. Единственно, там Характеристики прописаны в самом объекте метаданных, а не в запросе, но там несущественная разница. |
|||
54
Kassern
06.07.21
✎
09:21
|
(52) простой пример, это в первом наборе результирующая таблица, а во втором значения свойств. Связываешь эти два набора по номенклатуре. В ресурсе просто прописывается значение свойств (без всяких сумма,среднее,максимум..) и делаешь расчет по номенклатуре. В структуре создается таблица, где колонкой будет свойство.
|
|||
55
Said_We
06.07.21
✎
10:02
|
+ к (51)
Фигурные скобки, это и есть динамическая часть построения текста запроса, которая строится в зависимости от... |
|||
56
fisher
06.07.21
✎
11:43
|
(0) > Прошу подсказть в чем смысл такого соединения если вместо двух запросов все это (включая соединение) межно сделать в одном запросе.
Обычно никакого. Скорее даже отрицательный. Но иногда помогает упростить запросы и разделить сложную логику. Ну и плюс всякие фокусы, которые запросом в лоб не повторишь. Типа соединения с виртуальной таблицей с передачей параметров или формирования собственной иерархии. |
|||
57
fisher
06.07.21
✎
11:53
|
(0) Вдогонку по-поводу "простить запросы". У соединений наборов есть особенность - оно отрабатывает уже на результате выполнения запроса. То есть к левому запросу применяются все настройки, получается результирующий текст запроса, он выполняется и уже результат соединяется. И вот эта особенность иногда позволяет решить задачу проще.
|
|||
58
fisher
06.07.21
✎
11:53
|
Тьфу. "Упростить запросы".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |