|
v7: Прямой запрос. Как правильно отфильтровать? | ☑ | ||
---|---|---|---|---|
0
Dolly_EV
22.05.13
✎
10:25
|
Имеется Справочник "мбИдентификаторы", у которого есть реквизит "Элемент" типа "Справочник" (неопределенного вида). В нем может быть много разных видов справочников. Требуется сделать выборку с разными сочетаниями фильтров: и по видам и по вхождению в список каждого вида. Не могу сообразить как все это прописать в "ГДЕ...". вот что написал, но чувствую - бред :-(
Пните в нужном направлении? ТекстЗапроса= " |ВЫБРАТЬ | ЛЕВО($СпрИДД.Элемент,4) КАК [ВидСпр $ВидСправочника] | ,$СпрИДД.Элемент КАК ЭлементИД | ,$СпрИДД.Элемент КАК [Элемент $Справочник] | ,$СпрИДД.Идентификатор КАК Идентификатор |ИЗ | Справочник.мбИдентификаторы КАК СпрИДД $nolock |ГДЕ | (1=1 И 10=10) ИЛИ (2=2 И 20=20) ИЛИ (3=3 И 30=30) ИЛИ (4=4 И 40=40) ИЛИ (5=5 И 50=50)"; //1. ОбъектМФ.Добавить("Справочник.Фирмы","Фирма","Фирмы",""); //2. ОбъектМФ.Добавить("Справочник.Контрагенты","Клн","Контрагенты",""); //3. ОбъектМФ.Добавить("Справочник.Проекты","Агент","Агенты",""); //4. ОбъектМФ.Добавить("Справочник.Номенклатура","Тов","Номенклатура",""); //5. ОбъектМФ.Добавить("Справочник.МестаХранения","Скл","Склады",""); ОбъектМФ.СформироватьУсловиеЗапроса(ТекстЗапроса,Запрос,"Фирмы","СРЕД($СпрИДД.Элемент,5,6)",,1,1); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"10=10","ЛЕВО($СпрИДД.Элемент,4)=:ВидСправочника.Фирмы"); ОбъектМФ.СформироватьУсловиеЗапроса(ТекстЗапроса,Запрос,"Контрагенты","СРЕД($СпрИДД.Элемент,5,6)",,2,1); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"20=20","ЛЕВО($СпрИДД.Элемент,4)=:ВидСправочника.Контрагенты"); ОбъектМФ.СформироватьУсловиеЗапроса(ТекстЗапроса,Запрос,"Агенты","СРЕД($СпрИДД.Элемент,5,6)",,3,1); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"30=30","ЛЕВО($СпрИДД.Элемент,4)=:ВидСправочника.Проекты"); ОбъектМФ.СформироватьУсловиеЗапроса(ТекстЗапроса,Запрос,"Номенклатура","СРЕД($СпрИДД.Элемент,5,6)",,4,1); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"40=40","ЛЕВО($СпрИДД.Элемент,4)=:ВидСправочника.Номенклатура"); ОбъектМФ.СформироватьУсловиеЗапроса(ТекстЗапроса,Запрос,"Склады","СРЕД($СпрИДД.Элемент,5,6)",,5,1); ТекстЗапроса=СтрЗаменить(ТекстЗапроса,"50=50","ЛЕВО($СпрИДД.Элемент,4)=:ВидСправочника.МестаХранения"); тз = Запрос.Выполнить(,ТекстЗапроса); |
|||
1
viktor_vv
22.05.13
✎
10:28
|
Спраовчник общего вида в базе это поле длиной 13 символов. Первые 4 - вид справочника, остальные 9 - ИД элемента.
Так что СРЕД($СпрИДД.Элемент,5,6) ->> СРЕД($СпрИДД.Элемент,5,9) |
|||
2
viktor_vv
22.05.13
✎
10:32
|
Хотя в качестве праметра лучше передавать сразу с видом, или использовать модификаторы, не знаю есть ли это в классе прямой запрос, похоже это он используется.
|
|||
3
Dolly_EV
22.05.13
✎
10:32
|
П..ть! лошара! ну конечно 9!
(1) спасибо! Тема закрыта. |
|||
4
Dolly_EV
22.05.13
✎
10:33
|
(2) "Хотя в качестве праметра лучше передавать сразу с видом, или использовать модификаторы" не понял, растолкуй подробнее?
|
|||
5
Ёпрст
22.05.13
✎
10:46
|
(4) достраивать до 13
|
|||
6
Ёпрст
22.05.13
✎
10:46
|
т.е вид слева прибавлять в условии, а не кастрировать до id=9
|
|||
7
Ёпрст
22.05.13
✎
10:47
|
id справочников уникальны только в пределах вида, кастрируя в запросе - нарвешься, что получишь не тот вид справочника в итоге, ибо id могут совпадать.
|
|||
8
Андрей_Андреич
naïve
22.05.13
✎
10:50
|
(7) Только хотел спросить, встречалось ли на практике.
И вспомнил - у меня встречалось. |
|||
9
Dolly_EV
22.05.13
✎
11:36
|
(6) т.е. укладывая в список элементы, достраивать их с 9 до 13? и сравнивать со списком уже не СРЕД($СпрИДД.Элемент,5,9), а просто $СпрИДД.Элемент?
но и с условиями в такос виде (И)ИЛИ(И)... какая-то х..ня получается :-( |
|||
10
Dolly_EV
22.05.13
✎
11:42
|
+(9) да и УложитьСписокОбъектов() только CHAR(9) делает и придется все фильтры ручками перебирать :-(
|
|||
11
viktor_vv
22.05.13
✎
11:49
|
Вроде как есть УложитьСписокОбъектов13() укладывает именно так, но он иерархию не укладывает, вернее если в списке группы, то подчиненные не уложит.
|
|||
12
Dolly_EV
22.05.13
✎
11:58
|
(11) угу есть, но иерархию не укладывает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |