0
dmino
21.08.12
✎
17:49
|
Доброго времени суток! Помогите с запросом. Смысл запроса - Выбрать все товары по заданным параметрам характеристик, характеристик может быть несколько
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ЗначенияСвойствОбъектов.Объект.Владелец КАК Ссылка
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов1 ПО ЗначенияСвойствОбъектов.Объект = ЗначенияСвойствОбъектов1.Объект
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов2
ПО ЗначенияСвойствОбъектов.Объект = ЗначенияСвойствОбъектов2.Объект
ГДЕ
1 = 1
И ЗначенияСвойствОбъектов.Свойство = &Свойство
И ЗначенияСвойствОбъектов.Значение = &Значение
И ЗначенияСвойствОбъектов1.Свойство = &Свойство2
И ЗначенияСвойствОбъектов1.Значение = &Значение2
И ЗначенияСвойствОбъектов2.Свойство = &Свойство3
И ЗначенияСвойствОбъектов2.Значение = &Значение3
Работает корректно, но как-то криво написано :) подскажите направление в котором подумать?
|
|
3
dmino
21.08.12
✎
17:52
|
(2) внутреннее быстрее работать будет?
PS: 1 = 1 сделано на случай если ни одну характеристику не выбрали. в оригинале выглядит примерно так:
Для Каждого Строка Из Характеристики Цикл
Условие = Условие + " И ЗначенияСвойствОбъектов.Свойство = &Свойство"+Строка(Строка.НомерСтроки)+" И ЗначенияСвойствОбъектов.Значение = &Значение"+Строка(Строка.НомерСтроки);
Выборка = Выборка + " ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов" + Строка(Строка.НомерСтроки) + " ПО ЗначенияСвойствОбъектов.Объект = ЗначенияСвойствОбъектов" + Строка(Строка.НомерСтроки) + ".Объект ";
Запрос.УстановитьПараметр("Свойство"+Строка(Строка.НомерСтроки), Строка.ИмяХаракетристика);
Запрос.УстановитьПараметр("Значение"+Строка(Строка.НомерСтроки), Строка.Значение);
КонецЦикла;
Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ЗначенияСвойствОбъектов.Объект.Владелец КАК Ссылка
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| " + Выборка + "
|ГДЕ
| 1 = 1 " + Условие;
|
|