|
СКД, необязательные таблицы и отбор | ☑ | ||
---|---|---|---|---|
0
Fragster
гуру
25.10.11
✎
18:31
|
Есть запрос в СКД (болванка)
ВЫБРАТЬ ВЫРАЗИТЬ(&Контрагент КАК Справочник.Контрагенты) КАК Контрагент, ВЫРАЗИТЬ(&Договор КАК Справочник.ДоговорыКонтрагентов) КАК Договор, ВЫРАЗИТЬ(&СуммаДокумента КАК ЧИСЛО(15, 2)) КАК СуммаДокумента ПОМЕСТИТЬ ДанныеШапки {ГДЕ (ВЫРАЗИТЬ(&Контрагент КАК Справочник.Контрагенты)).* КАК Контрагент, (ВЫРАЗИТЬ(&Договор КАК Справочник.ДоговорыКонтрагентов)).* КАК Договор, (ВЫРАЗИТЬ(&СуммаДокумента КАК ЧИСЛО(15, 2))) КАК СуммаДокумента} ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПЕРВЫЕ 1 1 КАК Присутствует {ВЫБРАТЬ Присутствует} ИЗ ДанныеШапки КАК ДанныеШапки ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеновыеГруппы.Объект КАК Объект ИЗ РегистрСведений.ЦеновыеГруппы КАК ЦеновыеГруппы ГДЕ ЦеновыеГруппы.ВключаяОбъект {ГДЕ ЦеновыеГруппы.ЦеноваяГруппа.* КАК ЦеноваяГруппаКонтрагента}) КАК ВложенныйЗапрос ПО ДанныеШапки.Контрагент = ВложенныйЗапрос.Объект Нужно сделать так, чтобы если отбор по ЦеноваяГруппаКонтрагента не установлен - он даже не пытался подсоединить таблицу. Если указать таблицу как необязательную - то он ее не присоединяет, даже если условие указано, если как обязательную - то присоединяет в обоих случаях. Пока вижу вариант в обходе отбора и если есть отбор по ЦеноваяГруппаКонтрагента, то добавление в выбранные поля поля Объект, но это ведет к говнокоду. есть ли способ проще? |
|||
1
acsent
25.10.11
✎
18:43
|
Таблицы присоединяются не по условиям, а по выбранным полям
|
|||
2
acsent
25.10.11
✎
18:44
|
А вообще зачем такой изврат?
|
|||
3
Fragster
гуру
25.10.11
✎
18:49
|
(2) это таблица-фильтр (там внутреннее соединение). чтобы прилепляла её только когда отбор установлен, и не тормозила запрос, когда не установлен
|
|||
4
also
25.10.11
✎
18:51
|
Сделать вторым набором данных?
|
|||
5
acsent
25.10.11
✎
18:51
|
А не прще ли так:
ВЫБРАТЬ 1 ИЗ РегистрСведений.ЦеновыеГруппы КАК ЦеновыеГруппы ГДЕ ЦеновыеГруппы.ВключаяОбъект = &Контрагент {ГДЕ ЦеновыеГруппы.ЦеноваяГруппа.* КАК ЦеноваяГруппаКонтрагента |
|||
6
Fragster
гуру
25.10.11
✎
18:53
|
(5) а если нет отбора по ценовым группам, но есть отбор по договор.видДоговора? или контрагент не входит ни в одну группу?
|
|||
7
Fragster
гуру
25.10.11
✎
18:54
|
это извращенная фантазия маркетоидов - сделать так, чтобы у маркетинговых акций можно было б указывать относительно произвольные условия.
|
|||
8
also
25.10.11
✎
18:55
|
реально извращенцы
|
|||
9
acsent
25.10.11
✎
18:55
|
ВЫБРАТЬ
1 ИЗ РегистрСведений.ЦеновыеГруппы КАК ЦеновыеГруппы ГДЕ ЦеновыеГруппы.ВключаяОбъект = &Контрагент {ГДЕ ЦеновыеГруппы.ЦеноваяГруппа.* КАК ЦеноваяГруппаКонтрагента (ВЫРАЗИТЬ(&Договор КАК Справочник.ДоговорыКонтрагентов)).* КАК Договор, (ВЫРАЗИТЬ(&СуммаДокумента КАК ЧИСЛО(15, 2))) КАК СуммаДокумента} |
|||
10
Fragster
гуру
25.10.11
✎
18:57
|
(9) не решает проблему, если контрагент не входит ни в одну группу
|
|||
11
acsent
25.10.11
✎
18:59
|
(10) результат запроса будет абсолютно такой же. У тебя ведь ВНУТРЕННЕЕ соединение
|
|||
12
Fragster
гуру
25.10.11
✎
19:00
|
(11) в том то и дело, хочу, чтобы если не установлен отбор - то не соединять...
|
|||
13
acsent
25.10.11
✎
19:02
|
через объединение делай
|
|||
14
Fragster
гуру
25.10.11
✎
19:04
|
(13) тогда отбор по группе работать и не будет ;)
ларчик просто открывался, нужно добавить условие еще и во внешнюю таблицу, тогда присоединяется только если отбор есть: ВЫБРАТЬ ВЫРАЗИТЬ(&Контрагент КАК Справочник.Контрагенты) КАК Контрагент, ВЫРАЗИТЬ(&Договор КАК Справочник.ДоговорыКонтрагентов) КАК Договор, ВЫРАЗИТЬ(&СуммаДокумента КАК ЧИСЛО(15, 2)) КАК СуммаДокумента ПОМЕСТИТЬ ДанныеШапки {ГДЕ (ВЫРАЗИТЬ(&Контрагент КАК Справочник.Контрагенты)).* КАК Контрагент, (ВЫРАЗИТЬ(&Договор КАК Справочник.ДоговорыКонтрагентов)).* КАК Договор, (ВЫРАЗИТЬ(&СуммаДокумента КАК ЧИСЛО(15, 2))) КАК СуммаДокумента} ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПЕРВЫЕ 1 1 КАК Присутствует {ВЫБРАТЬ Присутствует} ИЗ ДанныеШапки КАК ДанныеШапки {ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеновыеГруппы.Объект КАК Объект, ЦеновыеГруппы.ЦеноваяГруппа КАК ЦеноваяГруппа ИЗ РегистрСведений.ЦеновыеГруппы КАК ЦеновыеГруппы ГДЕ ЦеновыеГруппы.ВключаяОбъект {ГДЕ ЦеновыеГруппы.ЦеноваяГруппа.* КАК ЦеноваяГруппаКонтрагента}) КАК ВложенныйЗапрос ПО ДанныеШапки.Контрагент = ВложенныйЗапрос.Объект} {ГДЕ ВложенныйЗапрос.ЦеноваяГруппа.* КАК ЦеноваяГруппаКонтрагента} |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |