Имя: Пароль:
1C
1С v8
Условие в запросе - найти объект в котором все значения табл части равны массиву
0 Maniac
 
05.06.12
13:59
Чой то голову сломал. Впервые такой момент вылазит.

Справочник характеристик. нужно найти характеристику со свойствами из массива.
Есть массив значений реквизитов.

Нужно найти точный элемент в котором все значения в табличной части входят в массив.

Условие В - не помогает. Находит первый попавшийся элемент в котором первое значение есть в массиве.

поочередное условие с И тоже не помогает..

Вот как делал:
1)

Запрос.Текст = Запрос.Текст + " И ЗначенияСвойствОбъектов.Свойство = &СвойствоХарактеристики"+Строка(НомСвойства);
                   Запрос.Текст = Запрос.Текст + " И ЗначенияСвойствОбъектов.Значение = &УстановитьСвойство"+Строка(НомСвойства);
                   
                   Запрос.УстановитьПараметр("СвойствоХарактеристики"+Строка(НомСвойства), СвойствоХарактеристики);    
                   Запрос.УстановитьПараметр("УстановитьСвойство"+Строка(НомСвойства), УстановитьСвойство);


2)

//Запрос.Текст = Запрос.Текст + " И ЗначенияСвойствОбъектов.Свойство В (&МассивСвойств)";
               //Запрос.Текст = Запрос.Текст + " И ЗначенияСвойствОбъектов.Значение В (&МассивЗначенийСвойств)";
               //
               //Запрос.УстановитьПараметр("МассивСвойств", МассивСвойств);    
               //Запрос.УстановитьПараметр("МассивЗначенийСвойств", МассивЗначенийСвойств);


Оба не работают.
1 Maniac
 
05.06.12
14:01
свойства характеристик это табличная часть доп реквизитов.

например имеем Белый и Широкий (в характеристике)

У нас есть массив значений, в котором Белый, Широкий.

В запросе нужно чтобы все значения характеристик совпадали с переданным массивом (параметром запроса).
Получается что никак не выходит.

Сразу оговорюсь - задача решить запросом. а не перебором.
2 Нуф-Нуф
 
05.06.12
14:04
я нифига не понял...
3 Maniac
 
05.06.12
14:06
(2)
ну например еу тебя есть доки в базе.
У тебя есть заранее известный массив. например три номенклатуры.
Тебе нужно найти док в котором есть эти три товара, не больше и не меньше - а именно эти три.
4 alkov
 
05.06.12
14:06
А нельзя массив предварительно преобразовать в колонку ТЗ, которую и передать в запрос, а в нём уже соединение с этой ТЗ?
5 Maxus43
 
05.06.12
14:06
есть мысль
6 Maniac
 
05.06.12
14:07
+(3) и только эти три.
7 МихаилМ
 
05.06.12
14:18
выбирите уникальные
соедините с набором условий
посчитайте кол-во совпадений (соединений).
где равно заданному кол-ву
8 Maniac
 
05.06.12
14:23
Да видимо надо захонять ТЗ в запрос. соединять внутренним соединением. Делать это вложенным запросом, а на верхнем уровне еще ставить условие что если где то значение пусто то и результата запроса не будет.
9 МихаилМ
 
05.06.12
14:28
+(7)

и учтите, что postgre крацне медленно отрабатывае DISTINCT

те замените на group by
10 Senior-soft
 
05.06.12
14:32
МАКСИМУМ(ВЫБОР
 КОГДА Номенклатура В (&МассивНоменклатуры)
   ТОГДА ИСТИНА
 ИНАЧЕ ЛОЖЬ
КОНЕЦ) КАК ВДокументеЕстьВсяНоменклатураИзМассива
11 Maniac
 
05.06.12
14:41
(10) кажется оно! ВЫБОР делает внутренюю выборку.
12 Maniac
 
05.06.12
14:43
(10) но ты уверен что надо максимум?
если например второй элемент быдет ложь, а последний будет истиной даст истину? или не?
13 Senior-soft
 
05.06.12
14:53
(12) да, МИНИМУМ
14 Maniac
 
05.06.12
15:00
Не болт

"ВЫБРАТЬ ПЕРВЫЕ 1
               |    ЗапросПоХарактеристикам.Номенклатура КАК Номенклатура,
               |    ЗапросПоХарактеристикам.Характеристика КАК Характеристика
               |ИЗ
               |    (ВЫБРАТЬ
               |        ЗначенияСвойствОбъектов.Ссылка.Владелец КАК Номенклатура,
               |        ЗначенияСвойствОбъектов.Ссылка КАК Характеристика,
               |        МИНИМУМ(ВЫБОР
               |                КОГДА ЗначенияСвойствОбъектов.Значение В (&МассивСвойств)
               |                    ТОГДА ИСТИНА
               |                ИНАЧЕ ЛОЖЬ
               |            КОНЕЦ) КАК ЕстьВсеУказанныеХарактеристики
               |    ИЗ
               |        Справочник.ХарактеристикиНоменклатуры.ДополнительныеРеквизиты КАК ЗначенияСвойствОбъектов
               |    ГДЕ
               |        ЗначенияСвойствОбъектов.Ссылка.Владелец = &Номенклатура
               |    
               |    СГРУППИРОВАТЬ ПО
               |        ЗначенияСвойствОбъектов.Ссылка.Владелец,
               |        ЗначенияСвойствОбъектов.Ссылка) КАК ЗапросПоХарактеристикам
               |ГДЕ
               |    ЗапросПоХарактеристикам.ЕстьВсеУказанныеХарактеристики = ИСТИНА";
15 Maniac
 
05.06.12
15:05
Нет! Все работает! Я не тот массив передал.
16 Maniac
 
05.06.12
15:08
(13) Ты мозг! Спасибо!
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший