Имя: Пароль:
1C
 
СКД : Соединение в запросе или в СКД.
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
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
Тьфу. "Упростить запросы".