Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

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

Как проверить параметр на Неопределено в запросе?
Я
   tciban
 
15.09.16 - 09:35
Уважаемые коллеги! Туплю! (или дурак?) Есть в запросе проверка:
ГДЕ &Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка)
ИЛИ Номенклатура.Производитель = &Производитель

Но вот проблема! У меня в запросе в парамет приходит значение Неопределено. И условие не работает! Если неопределено заменяю на Справочники.Постащики.ПустаяСсылка() - работает. Так как же написать в запросе, что бы на Неопределено проверяла?
 
 
   Nuobu
 
1 - 15.09.16 - 09:37
= Неопределено??
   jsmith
 
2 - 15.09.16 - 09:39
(1) + &Производитель ССЫЛКА Справочник.Производители
   tciban
 
3 - 15.09.16 - 09:39
(1) Не понял вопрос!
   tciban
 
4 - 15.09.16 - 09:40
Поясняю - суть условия - сверять реквизит Производитель, но только в том случае если он указан.
   Nuobu
 
5 - 15.09.16 - 09:41
(4) Добавь отдельную переменную.
   tciban
 
6 - 15.09.16 - 09:43
(5) я примерно так и делаю:
Запрос.УстановитьПараметр("Производитель", ?(Производитель=Неопределено, Справочники.Производители.ПустаяСсылка(), Производитель));

Но хочется понять можно ли все в запросе делать, без лишних строк кода, без костылей
   Nuobu
 
7 - 15.09.16 - 09:43
Можно. Построителем.
   tciban
 
8 - 15.09.16 - 09:51
(7) Как? Какое должно быть условие?
   hhhh
 
9 - 15.09.16 - 09:57
ГДЕ {Номенклатура.Производитель.*}
   aleks_default
 
10 - 15.09.16 - 09:58
ГДЕ &Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка)
ИЛИ &Производитель = НЕОПРЕДЕЛЕНО
ИЛИ Номенклатура.Производитель = &Производитель

но условие тупое
 
 Рекламное место пустует
   tciban
 
11 - 15.09.16 - 10:01
(10) Чем же тупое? Возможно первая часть (&Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка)) лишняя, счас проверю
   pavelul73
 
12 - 15.09.16 - 10:05
ВЫБОР КОГДА &Производитель = НЕОПРЕДЕЛЕНО ТОГДА
ИСТИНА
ИНАЧЕ
твое условие

Но лучше все же описать это иначе.
Например, после запроса, но до его обработки проверить это условие и если неопределено, то изменить текст запроса через СтрЗаменить()
   tciban
 
13 - 15.09.16 - 10:08
(12) "Но лучше все же описать это иначе" Это для улучшения производительности? В теории интересно конечно какой из 3-х вариантов быстрее - через &Производитель = НЕОПРЕДЕЛЕНО, через выбор или через изменение текста запрос, но по сути задачи у меня это не массовая операция, так что не проверить. Почему хочется засунуть все в запрос? Я полагаю, что SQL сервер все сделает быстрее, чем сервер 1С.
   aleks_default
 
14 - 15.09.16 - 10:09
(11)Потому не надо пихать в условие запроса проверки на все типы параметра, которые он может принимать, а нужно передавать в запрос параметр с нужным  типом.
Иначе текст запроса становится нечитаемым.
   Новиков
 
15 - 15.09.16 - 10:11
ВЫБРАТЬ
    Номенклатура.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    ВЫБОР
            КОГДА &Производитель = НЕОПРЕДЕЛЕНО
                ТОГДА Номенклатура.Производитель = ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка)
            ИНАЧЕ Номенклатура.Производитель = &Производитель
        КОНЕЦ
   tciban
 
16 - 15.09.16 - 10:15
Эксперимент показал, что условие

Номенклатура.Производитель = &Производитель ИЛИ &Производитель = НЕОПРЕДЕЛЕНО

работает.

Хотя полагаю что по использование ВЫБОР сделает запрос понятнее, но это вопрос для дискуссии. Мне вот понятнее первая нотация услови. Т.е. условие выполняется если реквизит Производитель равен переданному параметру или параметр не задан.
   shadow_sw
 
17 - 15.09.16 - 10:15
(15) правильный пример
   aleks_default
 
18 - 15.09.16 - 10:16
(15)Неправильно
   tciban
 
19 - 15.09.16 - 10:16
Да, забыл указать, что условие
Номенклатура.Производитель = &Производитель ИЛИ &Производитель = НЕОПРЕДЕЛЕНО 
работает во всех 3-х случаях - и когда параметр не задан и когда параметр пустая ссылка и когда параметр задан :)
   MaXpaT
 
20 - 15.09.16 - 10:17
ГДЕ &Производитель В (НЕОПРЕДЕЛЕНО,Значение(Справочник.Производители.ПустаяСсылка),NULL) ИЛИ Номенклатура.Производитель = &Производитель
   shadow_sw
 
21 - 15.09.16 - 10:20
(18) чем неправильный? проверка в проверке
   tciban
 
22 - 15.09.16 - 10:23
(20) Интересный вариант...
Но

Номенклатура.Производитель = &Производитель ИЛИ &Производитель = НЕОПРЕДЕЛЕНО

понятнее.
   aleks_default
 
23 - 15.09.16 - 10:24
Если значение параметра  - пустая ссылка, то вторая проверка
Номенклатура.Производитель = &Производитель не нужна.
Посмотрите как должно отрабатывать в (0).
   Новиков
 
24 - 15.09.16 - 10:34
(19) в (15) работает тоже в трех случаях :)
   xafavute
 
25 - 15.09.16 - 10:36
Производитель В (ЗНАЧЕНИЕ(Справочник.Производители.ПустаяСсылка), НЕОПРЕДЕЛЕНО)
   tciban
 
26 - 15.09.16 - 10:39
Да не надо на пустую ссылку проврять! Это эквивалентно НЕОПРЕДЕЛЕНО!
   xafavute
 
27 - 15.09.16 - 10:40
(20) В (NULL) всегда ЛОЖЬ, ибо на нул можно только через ЕСТЬ NULL
   hhhh
 
28 - 15.09.16 - 12:43
(24) оно при &Производитель = НЕОПРЕДЕЛЕНО даст пустой результат. А надо наоборот.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует