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

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

объединить

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

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


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

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