Необязательные параметры в запросе СКД (и не только)

При установке параметров запроса часто в 1С применяют следующие конструкции:

//...
"ГДЕ
        НЕ Договор.ПометкаУдаления
        И ВЫБОР
                КОГДА &Контрагент = Неопределено
                        ТОГДА Договор.Контрагент = &Контрагент
                ИНАЧЕ ИСТИНА
        КОНЕЦ"
Запрос.УстановитьПараметр("Контрагент", Контрагент);

или

//...
"ГДЕ
        НЕ Договор.ПометкаУдаления
        И Договор.Контрагент = &Контрагент");
Если ЗначениеЗаполнено(Контрагент) Тогда
        Запрос.УстановитьПараметр("Контрагент", Контрагент); 
Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Договор.Контрагент = &Контрагент", "");
КонецЕсли;

Эти конструкции не оптимальны по понятным причинам.

Если параметр необязателен (может быть заполнен, а может и нет), вместо этих конструкций можно использовать такую:

"(&Контрагент = Неопределено или Договор.Контрагент = &Контрагент)"
//ПОЯСНЕНИЕ:
//1 условие должно приходить в ИСТИНА, если параметр не заполнен
//2 условие - проверка на соответствие

А что насчет СКД?

Есть еще такое понятие как необязательные параметры в запросе СКД.
В СКД проще, необязательные условия можно оформлять фигурными скобками, вот так:

//...
"ГДЕ
        НЕ Договор.ПометкаУдаления
{ГДЕ Договор.Контрагент = &Контрагент}"

Если вам была полезна эта информация, оставьте комментарий)

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии