Версия для печати темы (https://pro1c.org.ua/index.php?s=2a51767fcda472371fdb014e7fff90cd&showtopic=4700)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Параметр запроса пуст, значит - любое его значение

Автор: bolobol 13.09.11, 17:40

Здравствуйте!

Часто в текстах с запросами в стандартных конфигураций встречаются похожие конструкции:

...ГДЕ ЗарплатаКВыплатеОрганизаций.Организация = &Организация...
Если Организация.Пустая() Тогда
   Запрос.Текст= СтрЗаменить(Запрос.Текст, "ГДЕ ЗарплатаКВыплатеОрганизаций.Организация = &Организация", "");


т.е. Если Организация в отборе не указана, то убрать её и из текста условий.
Вопрос: Чем это может быть объяснено, т.к. небольшие изменения в условии запроса - выведут из строя весь запрос алгоритмом замены или не произойдёт сама замена, т.к. между "ГДЕ" и "Зарпла..." может появиться " И ".

Почему не целесообразней использовать следующую конструкцию или её аналог:
ГДЕ (&Организация = &ПустаяОрганизация ИЛИ ЗарплатаКВыплатеОрганизаций.Организация = &Организация)
Запрос.УстановитьПараметр("ПустаяОрганизация", Справочники.Организации.ПустаяСсылка());
Запрос.УстановитьПараметр("Организация", Организация);


Как убрать параметр ПустаяОрганизация и задать это прямо в тексте запроса?

А может есть ещё более изящные конструкции, типа:
ГДЕ 1=1
Если НЕ Организация.Пустая() Тогда
   Запрос.Текст= СтрЗаменить(Запрос.Текст, "1=1", "ЗарплатаКВыплатеОрганизаций.Организация = &Организация");

Автор: Ardi 13.09.11, 19:31

ГДЕ (&ВсеОрганизации ИЛИ ЗарплатаКВыплатеОрганизаций.Организация = &Организация)
Запрос.УстановитьПараметр("ВсеОрганизации", Организация=Справочники.Организации.ПустаяСсылка());
Запрос.УстановитьПараметр("Организация", Организация);

Автор: kivals 17.09.11, 16:04

Цитата(bolobol @ 13.09.11, 18:40) *
Как убрать параметр ПустаяОрганизация и задать это прямо в тексте запроса?


В запросе:
&Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)

Автор: Zaval 17.09.11, 20:52

Господа, будьте проще smile.gif
Достаточно в запросе использовать не "=", а "В" и в качестве параметра установить список значений для отбора.
Отбор не нужен - пустой список. В этом случае "В" дает истину для любого значения.

Автор: Ardi 17.09.11, 23:09

Цитата(Zaval @ 17.09.11, 21:52) *
Отбор не нужен - пустой список. В этом случае "В" дает истину для любого значения.

Не, не работает.

Автор: Batchir 17.09.11, 23:27

Но насколько мне известно конструкции в запросе, типа:

ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)

заметно увеличивают быстродействие запроса, чем это указывать через параметры, хотя Ardi в данном случае предложил на мой взгляд более корректный вариант. Зачем в запросе использовать логическую проверку, когда там можно использовать готовое ИСТИНА или ЛОЖЬ.

Вот написал ответ, и сразу же продолжил smile.gif , так вообще напрямую в запросе отображаем:


ПустаяОрганизация =  Организация = Справочники.Организации.ПустаяСсылка();

"
...
ГДЕ ("+ПустаяОрганизация+" ИЛИ ЗарплатаКВыплатеОрганизаций.Организация = &Организация)
...
"
Запрос.УстановитьПараметр("Организация", Организация);

Автор: Ardi 17.09.11, 23:37

Цитата(Batchir @ 18.09.11, 0:27) *
Вот написал ответ, и сразу же продолжил smile.gif , так вообще напрямую в запросе отображаем:

В таком случае нельзя нажать в конфигураторе правую кнопку мыши и "Конструктор запроса". А это неудобно smile.gif smile.gif smile.gif

Автор: kivals 18.09.11, 13:56

Цитата(Ardi @ 18.09.11, 0:37) http://pro1c.org.ua/index.php?act=findpost&pid=32130
Господа, будьте проще smile.gif
Достаточно в запросе использовать не "=", а "В" и в качестве параметра установить список значений для отбора.
Отбор не нужен - пустой список. В этом случае "В" дает истину для любого значения.

По-моему так было в запросах 7.7, и на мой взгляд это "баг, перекованный в фичу". 8 ИМХО отрабатывает это условие корректно - если список пустой - значит В него ничего не может входить. Кроме того обработка списков происходит медленней, чем сравнение на равно.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua