Установка необязательного параметра запроса

10.02.23

Разработка - Запросы

Как установить необязательный параметр запроса без изменения его текста.

Бывает, что при открытии формы отчета или обработки с динамическим списком, нам нужно установить отключаемый или необязательный параметр запроса.

 

 

Например, в нем есть условие.

ВЫБРАТЬ Док.Ссылка ИЗ Документы.Реализация КАК Док
ГДЕ Док.Организация = &Организация

 

Если это обязательный параметр, то все просто. Но если у пользователя есть возможность его не заполнять или отключать, то такой запрос выдаст пустой результат, а должен наоборот отключаться отбор и выводиться все подряд. Тогда приходится прибегать к некоторым хитростям.

Часто используют метод изменения самого текста запроса, просто вырезая из него участки с ненужными условиями.

Но это не наш метод. Мы будем использовать такую конструкцию:

ГДЕ (&ОтборПоОрганизации = ЛОЖЬ ИЛИ Док.Организация = &Организация)

 

Тогда в модуле формы в процедуре ПриОткрытии нам нужно установить параметр ОтборПоОрганизации

ОтборПоОрганизации = ЗначениеЗаполнено(Организация);
Запрос.УстановитьПараметр("ОтборПоОрганизации", ОтборПоОрганизации);

 

Такой же код будет и в процедуре ОрганизацияПриИзменении

При этом несмотря на то, что в условии запроса есть оператор ИЛИ, такое условие не приводит к замедлению запроса, индекс все равно используется.

Запросы параметры динамический список

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121557    670    389    

709

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5738    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1999    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6276    30    mkalimulin    25    

49

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1739    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5382    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16161    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sapervodichka 6697 10.02.23 09:23 Сейчас в теме
Выбор &Организация = Значение(Справочник.Организации.ПустаяСсылка) Тогда Истина Иначе Док.Организация = &Организация Конец
корум; DrAku1a; GutaGroup; demon_infernal; TitBit_infostart; +5 Ответить
3. Serg2000mr 311 10.02.23 10:37 Сейчас в теме
(1) ВЫБОР - это функция. Ее использование в условиях запроса и условиях соединения приводит к невозможности использования индекса и радикальному замедлению работы запроса.
6. sapervodichka 6697 10.02.23 10:40 Сейчас в теме
(3) а о каком индексе идет речь если обход всех организаций ведется? (если только поле Организация стоит индексировать в документе, а если не стоит?...)
8. Serg2000mr 311 10.02.23 11:29 Сейчас в теме
(6)
о каком индексе идет речь


Как правило, это не единственное условие в запросе. Короткий запрос был приведен для упрощения восприятия.
9. user1146461 10.02.23 15:00 Сейчас в теме
(6) а если я передам в параметр НЕОПРЕДЕЛЕНО))
10. sapervodichka 6697 10.02.23 15:39 Сейчас в теме
(9) &Организация В (Значение(Справочник.Организации.ПустаяСсылка), НЕОПРЕДЕЛЕНО, NULL)
12. Serg2000mr 311 10.02.23 18:55 Сейчас в теме
(10) Тоже хана использованию индекса. Не учите плохому )
13. sapervodichka 6697 10.02.23 20:37 Сейчас в теме
(12) а ты научись учить и контекст выделать: показать как и учить плохому - это совершенно разные вещи (про твой индекс я уже два раза ответил, его для реквизитов документа нет, если не поставить вручную)
14. Serg2000mr 311 10.02.23 20:40 Сейчас в теме
(13) тыкать не нужно, равно как и командовать.
15. sapervodichka 6697 10.02.23 21:12 Сейчас в теме
(14) тыкать и говорить ты как равному - это разные вещи, пока тогда (показанный в статье отбор является 100% стандартным из любой конфигурации: Использовать отбор + сам отбор, лично мне не особо интересен)
2. SerVer1C 748 10.02.23 09:52 Сейчас в теме
ГДЕ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) ИЛИ Док.Организация = &Организация
DrAku1a; akR00b; +2 Ответить
4. Serg2000mr 311 10.02.23 10:39 Сейчас в теме
(2) Тоже вариант неправильный, выведутся результаты только с незаполненной организацией, а нужны все результаты без отбора
5. SerVer1C 748 10.02.23 10:40 Сейчас в теме
11. Serg2000mr 311 10.02.23 18:52 Сейчас в теме
(5) Ошибся, вариант правильный, можно и так. Насчет использования индекса не могу сказать, план запроса не проверял для такого условия.
7. sapervodichka 6697 10.02.23 10:52 Сейчас в теме
(4) у SerVer1C рабочий вариант =)) в моём я его тык-тык написал поиск по индексу использоваться не будет, но у Организации и индекса то по умолчанию нет, это же реквизит (в системные индексы по умолчанию не входит если не отметить к индексированию). В остальном ты прав +100 Выбор не индексируется, а вот у SerVer1C как раз норм вариант
16. TMV 14 10.02.23 22:36 Сейчас в теме
Это ж отчет на СКД. Какие параметры при открытии формы?! Все гораздо проще:
ВЫБРАТЬ
	АвансовыйОтчет.Ссылка КАК Ссылка
ИЗ
	Документ.АвансовыйОтчет КАК АвансовыйОтчет
{ГДЕ
	АвансовыйОтчет.Организация.*}
EvgeniyOlxovskiy; аколит; DrAku1a; bilex; Рамзес; Zergej; Dimkasan; Invocater; +8 Ответить
17. Serg2000mr 311 18.02.23 19:55 Сейчас в теме
Про такой вариант я знаю, можно и так. Но я описал универсальный подход для любых запросов. В том числе и в отчетах на СКД, формах с динамическими списками и т.д.
18. exciter 18.03.23 18:24 Сейчас в теме
И (НЕ &ОтборПоОрганизации или Организация = &Организация)
19. user1126480 16 25.11.23 12:33 Сейчас в теме
А как в параметрах виртуальной таблицы не пробовали? У меня не получается, скобки убираются конструктором и ошибка.

РегистрНакопления.ЗаказыПокупателей.Остатки(
| ,
| &ОтборПоКонтрагент = ЛОЖЬ
| ИЛИ ЗаказПокупателя.Контрагент = &Контрагент) КАК РегистрНакопленияЗаказыПокупателейОстатки
20. user1126480 16 25.11.23 21:27 Сейчас в теме
(19) получилось:

|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Остатки(
| ,
| (&ОтборПоКонтрагенту = ЛОЖЬ
| ИЛИ ЗаказПокупателя.Контрагент = &Контрагент)
| И (&ОтборПоОрганизации = ЛОЖЬ
| ИЛИ ЗаказПокупателя.Организация = &Организация)
| И (&ОтборПоПодразделениюОрганизации = ЛОЖЬ
| ИЛИ ЗаказПокупателя.СтруктурнаяЕдиницаПродажи = &ПодразделениеОрганизации)) КАК РегистрНакопленияЗаказыПокупателейОстатки
21. user1126480 16 06.02.24 13:04 Сейчас в теме
Почему не добавили второй параметр, что б получился рабочий вариант?

Работать будет так:

ГДЕ (&ОтборПоОрганизации = ЛОЖЬ ИЛИ Док.Организация = &Организация)

.........

ОтборПоОрганизации = ЗначениеЗаполнено(Организация);
Запрос.УстановитьПараметр("ОтборПоОрганизации", ОтборПоОрганизации);
Запрос.УстановитьПараметр("Организация", Организация);
Оставьте свое сообщение