Как проверить параметр на Неопределено в запросе? #780768


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

В этой группе 1С