Имя: Пароль:
1C
1С v8
Запрос на Выборку данных с условием
,
0 Zhenek1980
 
26.12.19
10:31
есть запрос в котором есть условие:
ГДЕ
                       |            (Номенклатура.Тип = &ЗнТип
                       |            И Номенклатура.Сотрудник = &ЗнСотрудник
                       |            И Номенклатура.Отдел = &ЗнОтдел
            |            И Номенклатура.Статус = &ЗнСтатус)

ВОПРОС:

как сделать так что если значение "&ЗнТип" не заданно, это значение исключалось из условия

Пример:

в форме есть 4 поля для ввода значений:  ЗнТип, ЗнСотрудник, ЗнОтдел,  ЗнСтатус
Если пользователь заполняеть все 4 поля то запрос отрабатывает нормально, а вот если одно поле оставляет пустое  то запрос не чего не возвращает.
Необходимо сделать так что бы при незаполненном поле  оно не учитывалось в запросе
1 Волшебник
 
модератор
26.12.19
10:34
ГДЕ (&ЕстьОтборПоТипу И Номенклатура.Тип = &ЗнТип)
И (&ЕстьОтборПоСотруднику И Номенклатура.Сотрудник = &ЗнСотрудник)
...
2 Полька
 
26.12.19
10:34
Если ЗначениеЗаполнено(ЗнТип) Тогда
ТекстЗапроса=ТекстЗапроса+"
  |            И Номенклатура.Тип = &ЗнТип"
КонецЕсли;
3 Автосервис
 
26.12.19
10:36
Куча вариантов. Один из них "ВЫБОР КОГДА ... ТОГДА Истина ИНАЧЕ ... "
4 shadow_sw
 
26.12.19
10:36
(2) опередила
5 ДенисЧ
 
26.12.19
10:36
(&ЗнТип = Неопределено ИЛИ Номенклатура.Тип = &ЗнТип)
6 piter3
 
26.12.19
10:36
(3) лучше собрать текст запроса,в вашем варианте запутаться легко
7 Автосервис
 
26.12.19
10:37
(2) Не очень хороший вариант в плане дальнейшей отладки, т.к. в конструктор запросов потом не залезет
8 Kigo_Kigo
 
26.12.19
10:38
А что в восьмерке конструкция Номенклатура.Тип В &ЗнТип не работает уже?
9 shadow_sw
 
26.12.19
10:43
(7) что мешает динамически собрать отладкой запрос и проверить его в консоли?
10 Автосервис
 
26.12.19
10:47
(9) Неудобно. Так вы можете запихать его в консоль, но если найдете ошибку и подправите? Так легко подправленный запрос назад в код вы уже его не вернете
11 AAA
 
26.12.19
11:17
Я за вариант (2). Просто и понятно. Как правило, такое условие не одно, а много. Все собрано в одном месте, все читабельно.
12 Михаил Козлов
 
26.12.19
11:39
Если ОФ, то удобно использовать Построитель отчета.
13 Дмитрий
 
26.12.19
11:53
(7) пихать в текст запроса все отборы. потом проверки и стрзаменить(запрос.текст, ляляля, "")
14 Полька
 
26.12.19
12:13
(10) отладить на примере. потом разбить с учетом (2)
15 Zhenek1980
 
26.12.19
13:13
сделал так:
    |ГДЕ
    |     ВЫБОР  
    |        КОГДА &ЗнТипПусто = ЛОЖЬ
    |        ТОГДА    Номенклатура.Тип = &ЗнТип
    |        ИНАЧЕ    Номенклатура.Тип <> &ЗнТип
    |    КОНЕЦ
16 D_E_S_131
 
26.12.19
14:04
Вариант (2) вообще богомерзкий:
1. Не откроешь конструктор (как выше писали)
2. Анахронизм - есть уже объект "Конструктор текста запроса".