Вход | Регистрация
 

СКД : Соединение в запросе или в СКД.

СКД : Соединение в запросе или в СКД.
Я
   ЭЦ
 
05.07.21 - 14:13
Господа.

Имется отчет.
В нем два набора данных - оба запросы.
Которые соединяются на закладке "Связи наборов данных"

Прошу подсказть в чем смысл такого соединения если вместо двух запросов все это (включая соединение) межно сделать в одном запросе.

Прошу поделится соображениями.
Спасибо
   aka MIK
 
1 - 05.07.21 - 14:20
Типа так удобнее, передаем параметр в виртуальную таблицу.

На самом деле выходит банальный запрос в цикле
   ДенисЧ
 
2 - 05.07.21 - 14:21
(0) Если в запросе - выполняется на субде. Если в компоновке - то на сервере 1с.
   Ненавижу 1С
 
3 - 05.07.21 - 14:22
(2) ну не факт, наверное может и в СУБД растранслировать
как в LINQ - место выполнения зависит от конкретной реализации
   Йохохо
 
4 - 05.07.21 - 14:27
удобнее объяснять почему надо переделать отчет, при фильтрации до выборки левое соединение становится слегка неожиданным для юзера
   Kassern
 
5 - 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) А в чем неудобство доп. свойства обычным запросом выводить?
   acht
 
9 - 05.07.21 - 14:44
(0) Ты призываешь к гаданию на кофейной гуще, все зависит от конкретного случая.
Вдруг там разработчик свою иерерахию делает?
   ЭЦ
 
10 - 05.07.21 - 14:51
(9) А что в запросе нельзя кауюто иерерхию делать какую в СКД можно?
   Ненавижу 1С
 
11 - 05.07.21 - 14:53
(6) че сразу обзываться
   Kassern
 
12 - 05.07.21 - 14:56
(8) попробуй сделать динамически вывод всех доп свойств одним запросом, чтобы для каждого свойства была своя отдельная колонка.
   Kassern
 
13 - 05.07.21 - 14:57
(12) если нужно вывести пару свойств, то можно без проблем через левое соединение в одном запросе сделать, тупо присоединив табчасть со свойствами, где в связях отобрать по нужным свойствам.
   Said_We
 
14 - 05.07.21 - 15:02
(13) Зачем левое соединение?
   Kassern
 
15 - 05.07.21 - 15:02
(14) а почему бы и нет?
   Said_We
 
16 - 05.07.21 - 15:03
   Said_We
 
17 - 05.07.21 - 15:04
(15) Левое соединение это тормоз. Если можно без него, то нужно без него.
   Said_We
 
18 - 05.07.21 - 15:04
Для пары свойств точно никакие соединения не нужны.
   Малыш Джон
 
19 - 05.07.21 - 15:06
(10) в запросе нельзя сотворить свою иерархию произвольной глубины. При связи наборов(так как по сути это запрос в цикле) - можно.
Но это единственный случай, который я знаю, когда можно сделать связью наборов и нельзя соединением таблиц.
   Kassern
 
20 - 05.07.21 - 15:07
(17) смотри. К примеру у тебя есть результирующая таблица с номенклатурой. Нужно к этой таблице добавить колонку с одним определенным свойством. Чем это будет тормознутее, если я левым соединением к основной таблице прицеплю таблицу дополнительных свойств и в связи укажу номенклатуру и нужное свойство?
   Kassern
 
21 - 05.07.21 - 15:08
(20) по факту отбор в связи отрежет лишние строки у присоединяемой таблице и все сделается очень быстро
   Said_We
 
22 - 05.07.21 - 15:09
(0) Используют для построения иерархии не иерархических данных, например.
т.е. есть произвольные данные не справочники и необходимо выстроить иерархию по каким, то колонкам.
На СКД это делается удобно.
   Said_We
 
23 - 05.07.21 - 15:10
(21) Ссылку в (16) почитай. Там по времени проверили что быстрее и на сколько.
   Kassern
 
24 - 05.07.21 - 15:15
(23) а если нужны ВСЕ данные из результирующей таблицы?
   Said_We
 
25 - 05.07.21 - 15:16
PIVOT тебе в помощь.
Он отработает ещё быстрее - когда его в 1С сделают :-).
   youalex
 
26 - 05.07.21 - 15:16
(12) Характеристики, нет?
   Kassern
 
27 - 05.07.21 - 15:17
(24) круто так взять и обрезать весь результат) В общем в разных случаях используются разные соединения. Мне в большинстве случаев нужно сохранить первую таблицу полностью и добавить данные из второй. Поэтому и левое соединение. А по поводу динамически вывода всех свойств отдельной колонкой я так примера и не увидел в одном запросе. Через наборы это очень просто делается.
   Said_We
 
28 - 05.07.21 - 15:18
(24) Что значит все?
   Почему 1С
 
29 - 05.07.21 - 15:20
(26) Да, но это слишком просто видимо )
   Kassern
 
30 - 05.07.21 - 15:21
(28) У тебя к примеру 20 дополнительных реквизитов в номенклатуре. Нужно всех их вывести в отдельные колонки в отчете в рядом с номенклатурой.
 
 
   Said_We
 
31 - 05.07.21 - 15:22
(27) Читали в ссылке (16) все посты, включая пост 28?
   Said_We
 
32 - 05.07.21 - 15:23
(26) Не знаю почему. Меня всегда удивляет использование левого соединения везде где нужно и не нужно.
   Kassern
 
33 - 05.07.21 - 15:25
(32) я же уже объяснил, что часто нужно сохранить первую таблицу без изменений, вот поэтому и левое.
   Said_We
 
34 - 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

Как тут видно текст запросе не сложно динамически на любое количество построить....
   Said_We
 
35 - 05.07.21 - 15:29
(33) Еще раз пост 28 по ссылке в (16). Не нужно левое соединение. Достаточно объединения.
   Kassern
 
36 - 05.07.21 - 15:29
(34) это не конечное количество, любой менеджер может добавить свойство и оно должно добавиться в отчет автоматом. Проще говоря динамическое количество колонок
   Kassern
 
37 - 05.07.21 - 15:30
(34) могу на почту скинуть пример с наборами где это реализовано для ут11, если интересно
   Classic
 
38 - 05.07.21 - 15:30
(0)
Соединение наборов и левое соединение это не одно и то же
   Said_We
 
39 - 05.07.21 - 15:31
(36) Если СКД, то чем не устраивают характеристики?
Если SQL, то прописывать в любом случае - динамическое количество колонок - значит динамический текст запроса.
   Said_We
 
40 - 05.07.21 - 15:32
(38) ИСТИНУ говоришь :-)
   Classic
 
41 - 05.07.21 - 15:34
(33)
Левое соединение не всегда оставляет левую таблицу без изменений. Частенько дублирует строки в этой самой левой таблице.
   Kassern
 
42 - 05.07.21 - 15:59
(39) Я с характеристиками толком не работал. Да можно их на вкладке указать, а далее без проблем фильтровать отчет по свойствам, но как это поможет динамически создавать колонки без явного указания связи характеристик. Вот пример с оф сайта: https://its.1c.ru/db/metod8dev/content/1795/hdoc
Кусок с примера (и да там левое соединение):
ЫБРАТЬ
 РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура,
 ПРЕДСТАВЛЕНИЕССЫЛКИ(РасходнаяНакладнаяСостав.Номенклатура) КАК НоменклатураПредставление,
 ДопСвойства.Свойство КАК Свойство,
 ДопСвойства1.Свойство КАК Свойство1
ИЗ
 Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства
  ПО (ДопСвойства.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура
    И ДопСвойства.ВидСвойства = &П)
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДопСвойства КАК ДопСвойства1
  ПО (ДопСвойства1.Номенклатура = РасходнаяНакладнаяСостав.Номенклатура
    И ДопСвойства1.ВидСвойства = &П2) 

Вот я и пишу, если свойств будет 50, так же будете все 50 прописывать? Можете мне скинуть простой пример, где с помощью характеристик выводится динамически колонки со свойствами для номенклатуры?
   Said_We
 
43 - 05.07.21 - 16:06
(42) Это плохой пример :-)
   Kassern
 
44 - 05.07.21 - 16:08
(43) другого не нашел)
   Kassern
 
45 - 05.07.21 - 16:10
(43) тем и хороши наборы, что они в цикле все это дело склепают, как тебе надо и при этом минимум кода в запросе
   Said_We
 
46 - 05.07.21 - 16:11
С диска ИТС "
ВЫБРАТЬ
 РасходнаяНакладнаяСостав.Ссылка КАК Документ,
 РасходнаяНакладнаяСостав.Номенклатура,
 РасходнаяНакладнаяСостав.Количество,
 РасходнаяНакладнаяСостав.Цена,
РасходнаяНакладнаяСостав.Сумма,
РасходнаяНакладнаяСостав.НомерСтроки
ИЗ
 Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
{ХАРАКТЕРИСТИКИ
 ТИП(Справочник.Номенклатура)
 СПИСОК ПланВидовХарактеристик.ВидыДопСвойств
 ИДЕНТИФИКАТОР Ссылка
 ИМЯ Наименование
 ТИПЗНАЧЕНИЯ ТипЗначения
 ЗНАЧЕНИЯ РегистрСведений.ДопСвойства
 ОБЪЕКТ Номенклатура
 ХАРАКТЕРИСТИКА ВидСвойства
 ЗНАЧЕНИЕ Свойство }

Запрос, который сгенерирует компоновщик макета компоновки данных, будет выглядеть следующим образом:..." далее из (42)

Если компоновщик генерирует такой запрос, то это очень плохо.
Почему - это работает не быстро, по сравнению с другими вариантами.

Теперь понятно почему чуть что JOIN лепят. Так на дисках ИТС учат иногда. :-)
   Said_We
 
47 - 05.07.21 - 16:14
На дисках ИТС много очень полезной информации, но бывает и так.
   Said_We
 
48 - 05.07.21 - 16:19
(46) На самом деле, надо посмотреть какой запрос при работе с характеристиками приходит на SQL.
У меня есть огромные сомнения, что приходит запрос в (42). Скорее всего так написали, что бы была понятна суть. А прилетает, скорее всего, что-то типа как в (34).
   Said_We
 
49 - 05.07.21 - 16:26
+ к (48) Если без PIVOT, то хотя бы запрос в (16). Он быстрее.
Для DB2 прилететь должен запрос в (16) максимум. В DB2 ранее не было PIVOT.
   Asmody
 
50 - 05.07.21 - 17:30
(46) фишка в том, что фигурные скобки раскроются только для тех свойств, которые будут использованы в итоговой компоновке. а таковых на практике не слишком много
   Said_We
 
51 - 05.07.21 - 18:42
(50) При динамическом построении текста запроса так же.
   Почему 1С
 
52 - 06.07.21 - 07:22
(4) Юзер знать не знает про соединения вообще, что там неожиданного может быть? Левое превратится во внутреннее, ну так от фильтра это и ожидается.
(42) Покажи простой пример, а то я не догоняю о чем спор идет
   youalex
 
53 - 06.07.21 - 07:41
(42) Простой пример - в любой типовой, где от ссылки через точку выводятся значения доп. реквизитов.
Например, для Товаров в УТ.  Единственно, там Характеристики прописаны в самом объекте метаданных, а не в запросе, но там несущественная разница.
   Kassern
 
54 - 06.07.21 - 09:21
(52) простой пример, это в первом наборе результирующая таблица, а во втором значения свойств. Связываешь эти два набора по номенклатуре. В ресурсе просто прописывается значение свойств (без всяких сумма,среднее,максимум..) и делаешь расчет по номенклатуре. В структуре создается таблица, где колонкой будет свойство.
   Said_We
 
55 - 06.07.21 - 10:02
+ к (51)
Фигурные скобки, это и есть динамическая часть построения текста запроса, которая строится в зависимости от...
   fisher
 
56 - 06.07.21 - 11:43
(0) > Прошу подсказть в чем смысл такого соединения если вместо двух запросов все это (включая соединение) межно сделать в одном запросе.
Обычно никакого. Скорее даже отрицательный. Но иногда помогает упростить запросы и разделить сложную логику.
Ну и плюс всякие фокусы, которые запросом в лоб не повторишь. Типа соединения с виртуальной таблицей с передачей параметров или формирования собственной иерархии.
   fisher
 
57 - 06.07.21 - 11:53
(0) Вдогонку по-поводу "простить запросы". У соединений наборов есть особенность - оно отрабатывает уже на результате выполнения запроса. То есть к левому запросу применяются все настройки, получается результирующий текст запроса, он выполняется и уже результат соединяется. И вот эта особенность иногда позволяет решить задачу проще.
   fisher
 
58 - 06.07.21 - 11:53
Тьфу. "Упростить запросы".


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.