Имя: Пароль:
1C
1С v8
Запрос по характеристикам
0 dmino
 
21.08.12
17:49
Доброго времени суток! Помогите с запросом. Смысл запроса - Выбрать все товары по заданным параметрам характеристик, характеристик может быть несколько


ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
   ЗначенияСвойствОбъектов.Объект.Владелец КАК Ссылка
ИЗ
   РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов1 ПО ЗначенияСвойствОбъектов.Объект = ЗначенияСвойствОбъектов1.Объект
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов2
       ПО ЗначенияСвойствОбъектов.Объект = ЗначенияСвойствОбъектов2.Объект
ГДЕ
   1 = 1
   И ЗначенияСвойствОбъектов.Свойство = &Свойство
   И ЗначенияСвойствОбъектов.Значение = &Значение
   И ЗначенияСвойствОбъектов1.Свойство = &Свойство2
   И ЗначенияСвойствОбъектов1.Значение = &Значение2
   И ЗначенияСвойствОбъектов2.Свойство = &Свойство3
   И ЗначенияСвойствОбъектов2.Значение = &Значение3


Работает корректно, но как-то криво написано :) подскажите направление в котором подумать?
1 dmino
 
21.08.12
17:50
А наверное уже понял) несколько запросов собирать левым соединением по объекту?
2 SUA
 
21.08.12
17:50
1=1 удалить =)
и можно внутреннее соединение
3 dmino
 
21.08.12
17:52
(2) внутреннее быстрее работать будет?
PS: 1 = 1 сделано на случай если ни одну характеристику не выбрали. в оригинале выглядит примерно так:


Для Каждого Строка Из Характеристики Цикл
       Условие = Условие + " И ЗначенияСвойствОбъектов.Свойство = &Свойство"+Строка(Строка.НомерСтроки)+" И ЗначенияСвойствОбъектов.Значение = &Значение"+Строка(Строка.НомерСтроки);
       Выборка = Выборка + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов" + Строка(Строка.НомерСтроки) + " ПО ЗначенияСвойствОбъектов.Объект = ЗначенияСвойствОбъектов" + Строка(Строка.НомерСтроки) + ".Объект ";
       Запрос.УстановитьПараметр("Свойство"+Строка(Строка.НомерСтроки), Строка.ИмяХаракетристика);
       Запрос.УстановитьПараметр("Значение"+Строка(Строка.НомерСтроки), Строка.Значение);
   КонецЦикла;
   
   
   
   
   Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
                         |    ЗначенияСвойствОбъектов.Объект.Владелец КАК Ссылка
                         |ИЗ
                         |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                         | " + Выборка + "
                         |ГДЕ
                         |    1 = 1 " + Условие;
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.