|
Как проверить параметр на Неопределено в запросе? | ☑ | ||
---|---|---|---|---|
0
tciban
15.09.16
✎
09:35
|
Уважаемые коллеги! Туплю! (или дурак?) Есть в запросе проверка:
ГДЕ &Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка) ИЛИ Номенклатура.Производитель = &Производитель Но вот проблема! У меня в запросе в парамет приходит значение Неопределено. И условие не работает! Если неопределено заменяю на Справочники.Постащики.ПустаяСсылка() - работает. Так как же написать в запросе, что бы на Неопределено проверяла? |
|||
1
Nuobu
15.09.16
✎
09:37
|
= Неопределено??
|
|||
2
jsmith
15.09.16
✎
09:39
|
(1) + &Производитель ССЫЛКА Справочник.Производители
|
|||
3
tciban
15.09.16
✎
09:39
|
(1) Не понял вопрос!
|
|||
4
tciban
15.09.16
✎
09:40
|
Поясняю - суть условия - сверять реквизит Производитель, но только в том случае если он указан.
|
|||
5
Nuobu
15.09.16
✎
09:41
|
(4) Добавь отдельную переменную.
|
|||
6
tciban
15.09.16
✎
09:43
|
(5) я примерно так и делаю:
Запрос.УстановитьПараметр("Производитель", ?(Производитель=Неопределено, Справочники.Производители.ПустаяСсылка(), Производитель)); Но хочется понять можно ли все в запросе делать, без лишних строк кода, без костылей |
|||
7
Nuobu
15.09.16
✎
09:43
|
Можно. Построителем.
|
|||
8
tciban
15.09.16
✎
09:51
|
(7) Как? Какое должно быть условие?
|
|||
9
hhhh
15.09.16
✎
09:57
|
ГДЕ {Номенклатура.Производитель.*}
|
|||
10
aleks_default
15.09.16
✎
09:58
|
ГДЕ &Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка)
ИЛИ &Производитель = НЕОПРЕДЕЛЕНО ИЛИ Номенклатура.Производитель = &Производитель но условие тупое |
|||
11
tciban
15.09.16
✎
10:01
|
(10) Чем же тупое? Возможно первая часть (&Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка)) лишняя, счас проверю
|
|||
12
pavelul73
15.09.16
✎
10:05
|
ВЫБОР КОГДА &Производитель = НЕОПРЕДЕЛЕНО ТОГДА
ИСТИНА ИНАЧЕ твое условие Но лучше все же описать это иначе. Например, после запроса, но до его обработки проверить это условие и если неопределено, то изменить текст запроса через СтрЗаменить() |
|||
13
tciban
15.09.16
✎
10:08
|
(12) "Но лучше все же описать это иначе" Это для улучшения производительности? В теории интересно конечно какой из 3-х вариантов быстрее - через &Производитель = НЕОПРЕДЕЛЕНО, через выбор или через изменение текста запрос, но по сути задачи у меня это не массовая операция, так что не проверить. Почему хочется засунуть все в запрос? Я полагаю, что SQL сервер все сделает быстрее, чем сервер 1С.
|
|||
14
aleks_default
15.09.16
✎
10:09
|
(11)Потому не надо пихать в условие запроса проверки на все типы параметра, которые он может принимать, а нужно передавать в запрос параметр с нужным типом.
Иначе текст запроса становится нечитаемым. |
|||
15
Новиков
15.09.16
✎
10:11
|
ВЫБРАТЬ
Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ ВЫБОР КОГДА &Производитель = НЕОПРЕДЕЛЕНО ТОГДА Номенклатура.Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка) ИНАЧЕ Номенклатура.Производитель = &Производитель КОНЕЦ |
|||
16
tciban
15.09.16
✎
10:15
|
Эксперимент показал, что условие
Номенклатура.Производитель = &Производитель ИЛИ &Производитель = НЕОПРЕДЕЛЕНО работает. Хотя полагаю что по использование ВЫБОР сделает запрос понятнее, но это вопрос для дискуссии. Мне вот понятнее первая нотация услови. Т.е. условие выполняется если реквизит Производитель равен переданному параметру или параметр не задан. |
|||
17
shadow_sw
15.09.16
✎
10:15
|
(15) правильный пример
|
|||
18
aleks_default
15.09.16
✎
10:16
|
(15)Неправильно
|
|||
19
tciban
15.09.16
✎
10:16
|
Да, забыл указать, что условие
Номенклатура.Производитель = &Производитель ИЛИ &Производитель = НЕОПРЕДЕЛЕНО работает во всех 3-х случаях - и когда параметр не задан и когда параметр пустая ссылка и когда параметр задан :) |
|||
20
MaXpaT
15.09.16
✎
10:17
|
ГДЕ &Производитель В (НЕОПРЕДЕЛЕНО,Значение(Справочник.Производители.ПустаяСсылка),NULL) ИЛИ Номенклатура.Производитель = &Производитель
|
|||
21
shadow_sw
15.09.16
✎
10:20
|
(18) чем неправильный? проверка в проверке
|
|||
22
tciban
15.09.16
✎
10:23
|
(20) Интересный вариант...
Но Номенклатура.Производитель = &Производитель ИЛИ &Производитель = НЕОПРЕДЕЛЕНО понятнее. |
|||
23
aleks_default
15.09.16
✎
10:24
|
Если значение параметра - пустая ссылка, то вторая проверка
Номенклатура.Производитель = &Производитель не нужна. Посмотрите как должно отрабатывать в (0). |
|||
24
Новиков
15.09.16
✎
10:34
|
(19) в (15) работает тоже в трех случаях :)
|
|||
25
xafavute
15.09.16
✎
10:36
|
Производитель В (ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка), НЕОПРЕДЕЛЕНО)
|
|||
26
tciban
15.09.16
✎
10:39
|
Да не надо на пустую ссылку проврять! Это эквивалентно НЕОПРЕДЕЛЕНО!
|
|||
27
xafavute
15.09.16
✎
10:40
|
(20) В (NULL) всегда ЛОЖЬ, ибо на нул можно только через ЕСТЬ NULL
|
|||
28
hhhh
15.09.16
✎
12:43
|
(24) оно при &Производитель = НЕОПРЕДЕЛЕНО даст пустой результат. А надо наоборот.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |