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

Запрос по характеристикам

Запрос по характеристикам
Я
   trialex3
 
15.06.21 - 11:19
Добрый день. Прошу подсказать самый правильный и самый быстрый варианты (возможно это рне одно и то же) получения списка характеристик с всеми свойствами из регистра Значение свойств объектов. Что бы на выходе был следующий результат -

Из

Характеристика1 | СвойствоА
Характеристика1 | СвойствоБ
Характеристика1 | СвойствоВ

В

Характеристика1 | СвойствоА | СвойствоБ | СвойствоВ
На данный момент я решаю это соединением по каждому свойству. 5 свойств - 5 соединений. Не уверен что это правильно - слишком медленно все работает.
   arsik
 
1 - 15.06.21 - 11:23
Соединение достаточно быстро работает. Показывай запрос.
   ДенисЧ
 
2 - 15.06.21 - 11:24
А если будет 20 свойств?
   trialex3
 
3 - 15.06.21 - 11:24
(1) Это и есть максимально удобное соединение? А если например список свойств меняется? Сразу соединять все возможные свойства? У нас их в характеристике штук 15.
   trialex3
 
4 - 15.06.21 - 11:25
(2) Все 20 в ряд. В идеале. А пока приходится соединять.
   ДедМорроз
 
5 - 15.06.21 - 11:26
Сначала получить свойства в индексированную таблицу.
Потом или ее соединять или через СКД.
   ДенисЧ
 
6 - 15.06.21 - 11:26
Для таких вещей умные люди используют СКД )))
   ДедМорроз
 
7 - 15.06.21 - 11:28
(6) СКД работает в памяти сервера,и не всегда быстрее, но удобнее.

И можно сделать на каждое свойство отдельную таблицу,а уже ее проиндексированную по характеристике соединять в итоговую,по идее,будет быстрее.
   trialex3
 
8 - 15.06.21 - 11:48
Спасибо всем большое за ответы. А я наивный думал есть какое-то простое решение)
   Said_We
 
9 - 15.06.21 - 12:56
(0) А зачем соединение?
   trialex3
 
10 - 15.06.21 - 13:02
(9) Много задач где мне очень полезно бы иметь все свойства одной строкой. Например поиск характеристики по свойствам. Конкретно сейчас мне нужно найти характеристику, которая ПОЧТИ по всем свойствам должна совпадать с другой изначально заданной характеристикой.
   trialex3
 
11 - 15.06.21 - 14:05
(7) Странно но без индексации работает быстрее
   Said_We
 
12 - 15.06.21 - 14:50
(0) Так зачем соединение?
   Said_We
 
13 - 15.06.21 - 15:20
ВТ_Данные подразумевается, что содержит три колонки: Характеристика = поле к чему относятся свойства; НПП = номер свойства для Св_А это 1, для Св_Б = 2 и т.д.; Поле Св = значению свойства.
Предварительно из (0) НПП необходимо создать и заполнить.

ВЫБРАТЬ
    т.Характеристика КАК Характеристика,
    т.Св_А КАК Св_А,
    т.Св_Б КАК Св_Б,
    т.Св_В КАК Св_В
ИЗ
    (ВЫБРАТЬ
        т.Характеристика КАК Характеристика,
        МАКСИМУМ(ВЫБОР
                КОГДА т.НПП = 1
                    ТОГДА т.Св
                ИНАЧЕ NULL
            КОНЕЦ) КАК Св_А,
        МАКСИМУМ(ВЫБОР
                КОГДА т.НПП = 2
                    ТОГДА т.Св
                ИНАЧЕ NULL
            КОНЕЦ) КАК Св_Б,
        МАКСИМУМ(ВЫБОР
                КОГДА т.НПП = 3
                    ТОГДА т.Св
                ИНАЧЕ NULL
            КОНЕЦ) КАК Св_В
    ИЗ
        ВТ_Данные КАК т
    
    СГРУППИРОВАТЬ ПО
        т.Характеристика) КАК т
   Said_We
 
14 - 15.06.21 - 15:52
А запросе не на 1С это выглядел бы с использованием PIVOT или UNPIVOT, в зависимости в какую сторону разворачивается таблица.
   acanta
 
15 - 15.06.21 - 15:56
(11) кстати да...
   Said_We
 
16 - 15.06.21 - 15:57
По поводу НПП. Оно не нужно если известно, что СвойствоА это именно СвойствоА, а не СвойствоБ или СвойствоХ.
Т.е. на входе не две колонки, а три:
Характеристика1 | СвойствоА | ЗначениеСвойстваА
Характеристика1 | СвойствоБ | ЗначениеСвойстваБ
Характеристика1 | СвойствоВ | ЗначениеСвойстваВ

Тогда вместо НПП сразу использовать вторую колонку.
   Said_We
 
17 - 15.06.21 - 16:00
(15) На индексацию тоже тратится время и ресурсы. Зависит, что вы и как индексируете. Может у вас индексируемое поле - это страшно составной тип или тип все ссылки.
   Said_We
 
18 - 15.06.21 - 16:01
(0) Так всё-таки - зачем соединение?
   trialex3
 
19 - 15.06.21 - 17:27
(18) Так я писал выше. Стоит задача. Найти аналог по характеристике, который содержит почти тот же набор свойств. Если бы я смог представить регистр свойств объектов в нужном мне виде, то мог бы взять необходимые свойства из первой характеристики и циклом прописать в условия. Найти характеристику где св1 = св1, св2 = св2 и т д
   trialex3
 
20 - 15.06.21 - 17:28
(16) Я не понял примера, если честно. Пока как тут советовали делаю через соединение (как вы тут код скрываете под спойлер?)


ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) КАК Объект,
    ЗначенияСвойствОбъектов.Свойство КАК Свойство,
    ЗначенияСвойствОбъектов.Значение КАК Значение
ПОМЕСТИТЬ Марка
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &Марка

//ИНДЕКСИРОВАТЬ ПО

//    Объект
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) КАК Объект,
    ЗначенияСвойствОбъектов.Свойство КАК Свойство,
    ЗначенияСвойствОбъектов.Значение КАК Значение
ПОМЕСТИТЬ РазмерА
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &РазмерА

//ИНДЕКСИРОВАТЬ ПО

//    Объект
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) КАК Объект,
    ЗначенияСвойствОбъектов.Свойство КАК Свойство,
    ЗначенияСвойствОбъектов.Значение КАК Значение
ПОМЕСТИТЬ РазмерБ
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &РазмерБ

//ИНДЕКСИРОВАТЬ ПО

//    Объект
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) КАК Объект,
    ЗначенияСвойствОбъектов.Свойство КАК Свойство,
    ЗначенияСвойствОбъектов.Значение КАК Значение
ПОМЕСТИТЬ РазмерФ
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &РазмерФ

//ИНДЕКСИРОВАТЬ ПО

//    Объект
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) КАК Объект,
    ЗначенияСвойствОбъектов.Свойство КАК Свойство,
    ЗначенияСвойствОбъектов.Значение КАК Значение
ПОМЕСТИТЬ Огнеустойчивость
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство = &Огнестойкость

//ИНДЕКСИРОВАТЬ ПО

//    Объект
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Ссылка КАК Ссылка,
    Марка.Значение КАК Марка,
    Огнеустойчивость.Значение КАК Огнестойкость,
    РазмерА.Значение КАК РазмерА,
    РазмерБ.Значение КАК РазмерБ,
    РазмерФ.Значение КАК РазмерФ
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Марка КАК Марка
        ПО ХарактеристикиНоменклатуры.Ссылка = Марка.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ РазмерА КАК РазмерА
        ПО ХарактеристикиНоменклатуры.Ссылка = РазмерА.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ РазмерБ КАК РазмерБ
        ПО ХарактеристикиНоменклатуры.Ссылка = РазмерБ.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ РазмерФ КАК РазмерФ
        ПО ХарактеристикиНоменклатуры.Ссылка = РазмерФ.Объект
        ЛЕВОЕ СОЕДИНЕНИЕ Огнеустойчивость КАК Огнеустойчивость
        ПО ХарактеристикиНоменклатуры.Ссылка = Огнеустойчивость.Объект
ГДЕ
    ХарактеристикиНоменклатуры.Ссылка = &СсылкаНаХарку
   sitex
 
21 - 15.06.21 - 17:36
(0) А  БПС смотрел ?
   sitex
 
22 - 15.06.21 - 17:36
+БСП*
   sitex
 
23 - 15.06.21 - 17:41
(0) Конфа типовая ?
   trialex3
 
24 - 15.06.21 - 17:45
(23) Нет, УППшка с доработками.
   sitex
 
25 - 15.06.21 - 17:58
(24) Ну ка проверь общий модуль УправлениеСвойствами
   trialex3
 
26 - 16.06.21 - 09:03
(25) Нет такого
   Said_We
 
27 - 16.06.21 - 09:48
(20) А чего не понял в примере?
   Said_We
 
28 - 16.06.21 - 10:46
(20) Ну, примерно как-то так....
Писал на коленке, поэтому мог что-то упустить в синтаксисе, но тут главное суть....
Соединений нет, но есть объединение, что бы даже если нет ни одного свойства у номенклатуры, то в результат запроса всё равно попадал результат. И нет приведения NULL к типу значения, так как я их не знаю. Но это нужно добавить "ЕстьNULL(МАКСИМУМ(т.Марка), <Тип, используемый для свойства марки>)".


ВЫБРАТЬ
    т.Ссылка,
    МАКСИМУМ(т.Марка) КАК Марка,
    МАКСИМУМ(т.Огнестойкость) КАК Огнестойкость,
    МАКСИМУМ(т.РазмерА) КАК РазмерА,
    МАКСИМУМ(т.РазмерБ) КАК РазмерБ,
    МАКСИМУМ(т.РазмерФ) КАК РазмерФ
ИЗ
(ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Ссылка КАК Ссылка,
    NULL КАК Марка,
    NULL КАК Огнестойкость,
    NULL КАК РазмерА,
    NULL КАК РазмерБ,
    NULL КАК РазмерФ
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Ссылка = &СсылкаНаХарку

union all

ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) КАК Объект,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &Марка
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &РазмерА
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &РазмерБ
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &РазмерФ
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &Огнестойкость
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) = &СсылкаНаХарку
    И ЗначенияСвойствОбъектов.Свойство in (&Марка, &РазмерА, &РазмерБ, &РазмерФ, &Огнестойкость)
) как т

СГРУППИРОВАТЬ ПО
        т.Ссылка
   Said_We
 
29 - 16.06.21 - 10:59
(20) "ЛЕВОЕ СОЕДИНЕНИЕ", "ПРАВОЕ СОЕДИНЕНИЕ", и т.д. в общем случае соединение - это "УБИЙЦА" производительности запроса. Если можно обойтись без соединения, то НУЖНО обходиться без него.
Бывает такое, что соединение почти не влияет на производительность - бывает, но это когда при использовании соединения правильно используются индексы, условия соединения не сложные и т.д.
   Said_We
 
30 - 16.06.21 - 12:53
(25) А чего там полезного можно найти? То как ранее писать код при 8.0 и 8.1 считалось плохим тоном.
Сплошные Запрос.Выполнить.Выгрузить(), а далее как в 7.7 работа с ТЗ. В цикле по ТЗ_1 поиски по другой ТЗ_2? Где например, собственно ТЗ_1 свойства, а ТЗ_2 доп реквизиты (НаборыДополнительныхРеквизитовИСведений).
 
 
   Said_We
 
31 - 16.06.21 - 13:38
(0) в (28) пример понятен или нет?
   trialex3
 
32 - 16.06.21 - 14:16
(30) Прошу прощения, а что плохого в " Запрос.Выполнить.Выгрузить(), а далее как в 7.7 работа с ТЗ"? Спрашиваю, так как иногда использую эти методы.
(31) Сейчас буду разбирать ваш пример. Спасибо большое за запрос
   trialex3
 
33 - 16.06.21 - 14:20
(28) Обалдеть, скорость выполнения запросы в три 3 выше в вашем примере.
   trialex3
 
34 - 16.06.21 - 14:24
(31) Вы сначала получаете несколько строк с одной характеристикой, но заполненными свойствами. Далее вы их объединяете с справочником ХарактеристикиНоменклатуры, но в полях ставите нуллы для соответствия количества колонок. А вот последний шаг не очень понятен. Каким образом вы из 5 строк с нулами и свойствами делаете одну строку. Где происходит группировка?
   RetardedToBoot
 
35 - 16.06.21 - 14:29
(33) так у Вас в три раза больше запросов
   Said_We
 
36 - 16.06.21 - 14:34
(35) Получилось - значит уже хорошо.
(36)
Максимум(ЛюбоеЗначениеНеNULL, NULL) = ЛюбоеЗначениеНеNULL
Максимум(NULL, NULL) = NULL
Минимум(ЛюбоеЗначениеНеNULL, NULL) = ЛюбоеЗначениеНеNULL
Минимум(NULL, NULL) = NULL

Группировка происходит при вычислении Максимума и сама группировка в самом конце "СГРУППИРОВАТЬ ПО т.Ссылка".
   trialex3
 
37 - 16.06.21 - 14:42
(36) Спасибо за разъяснение. Еще один вопрос есть. Объект в регистре это и есть по факту характеристика. Значит объединение с справочником ХарактеристикиНоменклатуры можно в принципе выкинуть? Цель (Характеристику) я получу из объекта.
   Said_We
 
38 - 16.06.21 - 14:44
Этот момент я уже пояснил в (28).
"Соединений нет, но есть объединение, что бы даже если нет ни одного свойства у номенклатуры, то в результат запроса всё равно попадал результат."

Т.е. если даже по номенклатуре не введена ни одно интересующее вас свойство в результат запроса данные по этой номенклатуре попадали.
   trialex3
 
39 - 16.06.21 - 14:46
(38) Благодарствую за подробное объяснение! Хорошего вам дня:)
   Said_We
 
40 - 16.06.21 - 14:56
(39) Не за что.
(33) С использованием PIVOT и UNPIVOT работает ещё в несколько раз быстрее. И текст запроса получается короче в разы. Но язык SQL внутри 1С данные конструкции не поддерживает.
   Said_We
 
41 - 16.06.21 - 15:00
(32) "Прошу прощения, а что плохого в " Запрос.Выполнить.Выгрузить(), а далее как в 7.7 работа с ТЗ" - об этом много и подробно написано в статьях на дисках ИТС самой фирмой 1С.
При сдаче на специалист по платформе - выгрузка в ТЗ и дальнейшая обработка результата является ошибкой, которая серьёзно снижает баллы на экзамене. Это указано в требованиях к экзамену на специалиста по платформе 1С.
   apdate by
 
42 - 16.06.21 - 15:07
Не знаю как в 1С 

но что то подобное этому

SELECT DISTINCT
            х.наименование,
        с.наименование
         
            FROM __характеристики х
            LEFT JOIN __свойства с ON с.ссылка на характеристику=х.ссылка
            WHERE
                1 
                GROUP BY х.ссылка
            1000
   Said_We
 
43 - 16.06.21 - 15:11
(42) В (33) уже написали, что такой запрос с LEFT JOIN в три раза медленнее чем пример в (28) на данных, которые у автора темы.
   apdate by
 
44 - 16.06.21 - 15:15
(43) да быть не может!

если я верно понял структуру его БД
   apdate by
 
45 - 16.06.21 - 15:19
(28) типа создаются два массива

и объединяются?

так а где ж его скорость то?

если в хараткреистиках то мы заюзали отбор а для свойств как я понимаю выливаются все (а их больше чем характеристик)

а затем объединяются и не нужные отсекаются?

или я не верно понял?
   apdate by
 
46 - 16.06.21 - 15:20
мнда видимо неверно

так как честно говоря не очеьн понимаю что есть МАКСИМУМ(ВЫБОР
   Said_We
 
47 - 16.06.21 - 15:25
(46) Автор подтвердил в (39), что всё понял. Значит информации в ветке уже достаточно.
Удачного дня :-)
   trialex3
 
48 - 16.06.21 - 15:39
(43) Я перепутал не в три раза а больше. Конкретные цифры на тестовом примере 4.5-5 сек мой вариант с соединением и 0.3-0.4 сек вариант в объединением.
   Said_We
 
49 - 16.06.21 - 15:47
(48) В 10 раз примерно быстрее на 5-ти свойствах.
А если свойств необходимо будет не 5, а 15, то разница будет только расти, так как запрос в (28) будет в этом случае примерно тот же результат давать, что и при 5-ти свойствах, а запрос с левым соединением будет увеличивать время выполнения.
   apdate by
 
50 - 16.06.21 - 17:09
(49) возьму себе в заметку
   trialex3
 
51 - 17.06.21 - 10:59
(49) Решил попробовать улучшить обработку по подбору характеристик, которую нам делал сторонний программист. Он тоже использует соединение, но оно почему-то работает очень быстро. Почему так может быть?
Запрос Объединение:

  выбрать РАЗРЕШЕННЫЕ
    т.Ссылка,
    МАКСИМУМ(т.Марка) КАК Марка,
    МАКСИМУМ(т.Огнестойкость) КАК Огнестойкость,
    МАКСИМУМ(т.РазмерА) КАК РазмерА,
    МАКСИМУМ(т.РазмерБ) КАК РазмерБ,
    МАКСИМУМ(т.РазмерФ) КАК РазмерФ
ИЗ
(ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Ссылка КАК Ссылка,
    NULL КАК Марка,
    NULL КАК Огнестойкость,
    NULL КАК РазмерА,
    NULL КАК РазмерБ,
    NULL КАК РазмерФ
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Ссылка = &СсылкаНаХарку

union all

ВЫБРАТЬ
    ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) КАК Объект,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &Марка
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &РазмерА
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &РазмерБ
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &РазмерФ
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
         КОГДА ЗначенияСвойствОбъектов.Свойство = &Огнестойкость
             ТОГДА ЗначенияСвойствОбъектов.Значение
             ИНАЧЕ NULL
    КОНЕЦ
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
  // ВЫРАЗИТЬ(ЗначенияСвойствОбъектов.Объект КАК Справочник.ХарактеристикиНоменклатуры) = &СсылкаНаХарку

    ЗначенияСвойствОбъектов.Свойство in (&Марка, &РазмерА, &РазмерБ, &РазмерФ, &Огнестойкость)
    И Объект.Владелец = &Номенклатура
) как т

СГРУППИРОВАТЬ ПО
        т.Ссылка

Запрос Соединение:

ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    ЗначенияСвойств1.Объект КАК Характеристика,
    ЗначенияСвойств1.Значение КАК Марка,
    ЗначенияСвойств2.Значение КАК ПоМонтажу,
    ЗначенияСвойств3.Значение КАК РазмерА,
    ЗначенияСвойств4.Значение КАК РазмерБ,
    ЗначенияСвойств5.Значение КАК Напряжение
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств1
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств2
    ПО ЗначенияСвойств2.Объект = ЗначенияСвойств1.Объект 
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств3
    ПО ЗначенияСвойств3.Объект = ЗначенияСвойств2.Объект 
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств4
    ПО ЗначенияСвойств4.Объект = ЗначенияСвойств3.Объект 
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств5
    ПО ЗначенияСвойств5.Объект = ЗначенияСвойств4.Объект 
 ГДЕ
    ИСТИНА
    И ЗначенияСвойств1.Объект.Владелец = &Номенклатура
    И ЗначенияСвойств1.Свойство = &Свойство1
    И ЗначенияСвойств1.Значение = &Значение1
    И ЗначенияСвойств2.Объект.Владелец = &Номенклатура
    И ЗначенияСвойств2.Свойство = &Свойство2
    И ЗначенияСвойств2.Значение = &Значение2
    И ЗначенияСвойств3.Объект.Владелец = &Номенклатура
    И ЗначенияСвойств3.Свойство = &Свойство3
    И ЗначенияСвойств3.Значение = &Значение3
    И ЗначенияСвойств4.Объект.Владелец = &Номенклатура
    И ЗначенияСвойств4.Свойство = &Свойство4
    И ЗначенияСвойств4.Значение = &Значение4
    И ЗначенияСвойств5.Объект.Владелец = &Номенклатура
    И ЗначенияСвойств5.Свойство = &Свойство5
    И ЗначенияСвойств5.Значение = &Значение5
   Said_We
 
52 - 17.06.21 - 11:13
(51) Потому что соединение "Внутреннее".
Если у номенклатуры не будет одного из свойств, то в результат запроса информация по данной номенклатуре не попадет.
+ Есть дополнительное условие на значение "&Значение1, &Значение2 ..." - оно серьезно сужает выборку.

Другими словами эти два запроса не эквивалентны друг другу и будут в общем случае давать разный результат.


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