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

Дополнительные реквииты не могу придумать запрос

Дополнительные реквииты не могу придумать запрос
Я
   НичегоНеПонятно
 
08.07.19 - 18:15
Всем привет! Есть задача отобрать номенклатуру с определенными значениями дополнительных реквизитов. ДопРевизиы хранятся в ТЧ справочника номенклатура. Дополнительных реквизитов в районе 6штук. Но не могу придумать как построить условие вот такой запрос не работает по очевидным причинам:
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
    И НоменклатураДополнительныеРеквизиты.Значение = &Значение
    И НоменклатураДополнительныеРеквизиты.Свойство = &Свойство1
    И НоменклатураДополнительныеРеквизиты.Значение = &Значение1

Нужно искать пары свойство - значение. Как это сделать красиво?
 
 
   Кодер
 
1 - 08.07.19 - 18:17
Где Имя = Зинка
И Имя = Танька
   palsergeich
 
2 - 08.07.19 - 18:17
Красиво не выйдет.
Будет 6 кондовых соединений по ссылке, и свойству
   НичегоНеПонятно
 
3 - 08.07.19 - 18:21
(1)Тогда он отберет и номенклатуру с допреквизитами:
Свойство = Значение
Свойство1 = Значение1//правильно

и также
Свойство = Значение1
Свойство1 = Значение//неправильно
то есть просто проверит, что в тч есть такие свойства, ну и значениия тоже есть, а где они стоят, не так уж важно
   НичегоНеПонятно
 
4 - 08.07.19 - 18:23
(2)Давайте попробуем некрасиво. Какие нужны соединения и где?
   VladZ
 
5 - 08.07.19 - 18:26
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство1
    И НоменклатураДополнительныеРеквизиты.Значение = &Значение1

объединить 

ВЫБРАТЬ РАЗЛИЧНЫЕ
    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство2
    И НоменклатураДополнительныеРеквизиты.Значение = &Значение2

и т.д.
   SleepyHead
 
6 - 08.07.19 - 18:33
Есть методы БСП для чтения доп реквизитов. Пишу с телефона, подробнее не могу, используй как подсказку.
   НичегоНеПонятно
 
7 - 08.07.19 - 18:34
(5)В резульутат запроса попадут те ссылки у которых есть только Свойство1 = Значение1 а надо и  Свойство2 = Значение2. Так же в результат запроса могут попасть ссылки у которых Свойство1 = Значение2. Если оба свойства есть у ссылки.
   SleepyHead
 
8 - 08.07.19 - 18:35
(7) нифига, прочитай запрос повнимательнее
   НичегоНеПонятно
 
9 - 08.07.19 - 18:38
(7)Читать как  "а надо Свойство1 = Значение1  и  Свойство2 = Значение2 одновременно"
   НичегоНеПонятно
 
10 - 08.07.19 - 18:39
(8) Невнятно выразился сорян, см (9)
   Вафель
 
11 - 08.07.19 - 18:44
под каждое свойство нужно ОТДЕЛЬНОЕ соединение
   singlych
 
12 - 08.07.19 - 18:46
выбрать где Свойство1 и Значение1;
выбрать где Свойство2 и Значение2;
соединить внутренне
   НичегоНеПонятно
 
13 - 08.07.19 - 18:49
(12)Попадется ему номенклатура где
Свойство1 = Значение1
Свойство2 = Значение1
Свойство3 = Значение2
И эта ссылка  попадет в результат запроса?
   НичегоНеПонятно
 
14 - 08.07.19 - 18:50
(13)Очень маловероятно конечно, но возможно
   Сияющий в темноте
 
15 - 08.07.19 - 19:11
А в чем проблема выбрать в отдельную таблицу,где поля РеквизитСсылка и Значение из одной табличной части,ничего не соединяя,а потом из этой таблицы выбрать.
   НичегоНеПонятно
 
16 - 08.07.19 - 19:13
   singlych
 
17 - 09.07.19 - 19:01
(13) отвалится по условию "где Свойство2 и Значение2"
   maxkras26
 
18 - 10.07.19 - 05:30
А так свойство=&Свойство1 и Значение=&Значение1 или свойство=&Свойство2 и Значение=&Значение2 или.....
   maxkras26
 
19 - 10.07.19 - 05:32
НУ если твой запрос
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство = &Свойство
    И НоменклатураДополнительныеРеквизиты.Значение = &Значение
    ИЛИ НоменклатураДополнительныеРеквизиты.Свойство = &Свойство1
    И НоменклатураДополнительныеРеквизиты.Значение = &Значение1
    ИЛИ НоменклатураДополнительныеРеквизиты.Свойство = &Свойство2 
    И .....
   seevkik
 
20 - 10.07.19 - 05:35
(19) Читай внимательно (9)
   seevkik
 
21 - 10.07.19 - 05:37
Не пытайся выдумать сильно сложное - отбери сначала по первому условию, потом по второму
   seevkik
 
22 - 10.07.19 - 05:41
Или создай ВТ_ПервоеУсловие и ВТ_ВтороеУсловие и соедини их внутренне
   ILM
 
23 - 10.07.19 - 05:54
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ(ВЫБРАТЬ &Свойство КАК Свойство, &Значение КАК Значение
                      ОБЪЕДИНИТЬ ВСЕ
                      ВЫБРАТЬ &Свойство1, &Значение1
                      ОБЪЕДИНИТЬ ВСЕ 
                      ВЫБРАТЬ &Свойство2, &Значение2
                      ОБЪЕДИНИТЬ ВСЕ 
                      ВЫБРАТЬ &Свойство3, &Значение3
                      ОБЪЕДИНИТЬ ВСЕ 
                      ВЫБРАТЬ &Свойство4, &Значение4
                      ОБЪЕДИНИТЬ ВСЕ 
                      ВЫБРАТЬ &Свойство5, &Значение5
                      ОБЪЕДИНИТЬ ВСЕ 
                      ВЫБРАТЬ &Свойство6, &Значение6) КАК ТабУсловия
ПО 
     НоменклатураДополнительныеРеквизиты.Свойство = ТабУсловия.Свойство
И    НоменклатураДополнительныеРеквизиты.Значение = ТабУсловия.Значение
   seevkik
 
24 - 10.07.19 - 06:15
(23) Круто, но не соответствует
   seevkik
 
25 - 10.07.19 - 06:15
(24) вот этому (13)
   Simod
 
26 - 10.07.19 - 06:26
(23) Если я правильно понял (0), то необходимо выбрать номенклатуру у которой присутствуют сразу несколько требуемых свойств и значений. Поэтому необходимо добавить группировку и отбор по количеству вхождений (ИМЕЮЩИЕ КОЛИЧЕСТВО(НоменклатураДополнительныеРеквизиты.Ссылка) = 6).
   seevkik
 
27 - 10.07.19 - 06:35
(23) также (13) ?
   seevkik
 
28 - 10.07.19 - 06:49
(22) Или выбери в одну таблицу выбранные свойства, соедини по ссылке, условия по свойствам
   seevkik
 
29 - 10.07.19 - 07:05
Короче тут все хвастаются
1.
Выбрать
СправочникДР.Ссылка КАК Ссылка
Поместить ВТ_Свойства
ИЗ
Справочник.Любой.ДополнительныеРеквизиты КАК СправочникДР
ГДЕ
СправочникДР.Свойство = &Свойство
И СправочникДР.Значение = &Значение
;
//

Выбрать
ВТ_Свойства.Ссылка КАК Ссылка
ИЗ
ВТ_Свойства КАК ВТ_Свойства
Внутреннее соединение Справочник.Любой.ДополнительныеРеквизиты КАК СправочникДР2
ПО ВТ_Свойства.Ссылка = СправочникДР2.Ссылка
ГДЕ
СправочникДР2.Свойство = &Свойство2
И СправочникДР2.Значение = &Значение2 

2.
Выбрать
СправочникДР.Ссылка
Поместить ВТ_Свойства
Из Справочник.любой.ДополнительныеРеквизиты КАК Справочник ДР
Где СправочникДР.Свойство = &Свойство
И СпправочникДР.Значение = &Значение
;
//

Выбрать 
СправочникДР.Ссылка
Поместить ВТ_Свойства2
Из Справочник.любой.ДополнительныеРеквизиты КАК Справочник ДР
Где СправочникДР.Свойство = &Свойство2
И СпправочникДР.Значение = &Значение2
;
//

Выбрать 
ВТ_Свойства.Ссылка
Из ВТ_Свойства
Внутреннее соединение ВТ_Свойства2
ПО ВТ_Свойства.Ссылка = ВТ_Свойства2.Ссылка

3.
Выбрать
СправочникДР.Ссылка
Поместить ВТ_Свойства
ИЗ Справочник.Любой.Дополнительныереквизиты КАК СправочникДР
Где СправочникДР.Свойство В(&МассивСвойств)
;
//

Выбрать 
ВТ_Свойства.Ссылка
Из ВТ_Свойства
Внутреннее соединение Вт_Свойства Как Вт_Свойства2
По Вт_Свойства.Ссылка = Вт_Свойства2.Ссылка
Где Вт_Свойства.Свойство = &Свойство
И Вт_Свойства2.Свойство = &Свойство2
И Вт_Свойства.Зачение = &Зачение 
И Вт_Свойства2.Зачение = &Зачение2


Кто что думает по скорости?)
   Simod
 
30 - 10.07.19 - 07:42
(29) Никто не хвастается. Задача элементарная и имеет несколько решений. "Красота" вторична. Имеет значение скорость выполнения и она будет зависеть от типов данных полей условия отбора или соединения, наличия индексов, размера таблиц и т.д.

А автор (0) просто не умеет писать запросы. Могу рекомендовать: http://www.sql-ex.ru/
 
 
   seevkik
 
31 - 10.07.19 - 08:03
(30) ну так предлагают же соединения с сформированной в запросе таблицей, счетчики вхождения и тд - по моему мнению слишком редкое исполнение, как бы "нетиповое". Это я посчитал хвастовством
   seevkik
 
32 - 10.07.19 - 08:05
и да, (26) не правильное решение
   ILM
 
33 - 10.07.19 - 08:52
(25) Да ладно? Вы серьёзно?
   VS-1976
 
34 - 10.07.19 - 09:31
Отбор за 1 раз + группировка (Количество)
   seevkik
 
35 - 10.07.19 - 09:39
(34) А если у них общий список значений и попадется
Свойство1 = Значение6
Свойство2 = Значение5
Свойство3 = Значение4
Свойство4 = Значение3
Свойство5 = Значение2
Свойство6 = Значение1
?
Те свойства? Те. Те значения? Те)
   unregistered
 
36 - 10.07.19 - 09:54
В (23) верное решение.
Что-то вы тут уже перемудрили с какими-то счетчиками и прочими сомнениями типа (35).
   seevkik
 
37 - 10.07.19 - 10:39
(36) искать отдельно вхождения и отдельно свойств это верное решение, ага
   seevkik
 
38 - 10.07.19 - 10:40
(37) опечатался - вхождения отдельно свойств и отдельно значений
   ILM
 
39 - 10.07.19 - 11:52
Если нужны свойства или значения, то используется таблица селектор
ВЫБРАТЬ 1 как селектор
Объединить все 
Выбрать 2.
Потом если 1 то проверяйте "свойства", если 2 то "значения". А если добавить 3, то сможете и пары "свойство+значение" находить.
   leonidk
 
40 - 10.07.19 - 12:11
(0) Красиво  - механизмом характеристик в СКД
   DrZombi
 
41 - 10.07.19 - 12:16
(0) Запомни главное, одно аксиома, Доп реквизит в табличной части всегда один, т.е. физически реквизитов можно туда понадобавлять хоть 999 999 шт, одного и того же свойство, но это чистой воды ошибка и требует вмешательства техю поддержки :)


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