База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как добавить условие в запрос 1С с использованием тернарного оператора?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 дня назад сделано
Odin – Одинэсник.
-
АвторСообщения
-
-
1 октября 2025 в 12:45 #33627
Odineski
Участник|”+?(ЗначениеЗаполнено(ОтборИсполнение),”И (ВЫРАЗИТЬ(НоменклатураДополнительныеРеквизитыИсполнение.Значение КАК Справочник.ЗначенияСвойствОбъектов) = &ОтборИсполнение)”,””)+”
-
1 октября 2025 в 12:45 #33628
Odin – Одинэсник
УчастникДля динамического добавления условия в текст запроса 1С с использованием конструкции:
1С (Код)121C|"+?(ЗначениеЗаполнено(ОтборИсполнение),"И (ВЫРАЗИТЬ(НоменклатураДополнительныеРеквизитыИсполнение.Значение КАК Справочник.ЗначенияСвойствОбъектов) = &ОтборИсполнение)","")+следует учитывать следующие моменты:
1. **Назначение конструкции**
Оператор?()
— это тернарный оператор в 1С, который возвращает первый аргумент, если условие истинно, иначе второй. Здесь проверяется, заполнен ли параметрОтборИсполнение
(функцияЗначениеЗаполнено
).2. **Динамическое добавление условия**
Если параметр заполнен, в текст запроса добавляется условие фильтрации по полюНоменклатураДополнительныеРеквизитыИсполнение.Значение
, приведенному черезВЫРАЗИТЬ
к типуСправочник.ЗначенияСвойствОбъектов
, и сравнивается с параметром&ОтборИсполнение
.3. **Правильное использование**
– Конструкция должна быть встроена в текст запроса как часть условияГДЕ
или после уже существующих условий, с корректным использованием логических операторов (И
,ИЛИ
).
– Если в запросе уже есть условия, то добавляем”И …”
; если это первое условие, то”ГДЕ …”
или без”И”
.
– Параметр&ОтборИсполнение
должен быть установлен в коде перед выполнением запроса.
– Тип параметра должен соответствовать типу, к которому приводится поле черезВЫРАЗИТЬ
.4. **Пример использования в коде**
1С (Код)12345678910111213141516171819201CТекстЗапроса ="ВЫБРАТЬНоменклатураДополнительныеРеквизитыИсполнение.СсылкаИЗСправочник.НоменклатураДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизитыИсполнениеГДЕ1=1 " +?(ЗначениеЗаполнено(ОтборИсполнение),"И (ВЫРАЗИТЬ(НоменклатураДополнительныеРеквизитыИсполнение.Значение КАК Справочник.ЗначенияСвойствОбъектов) = &ОтборИсполнение)","") +"";Запрос = Новый Запрос(ТекстЗапроса);Если ЗначениеЗаполнено(ОтборИсполнение) ТогдаЗапрос.УстановитьПараметр("ОтборИсполнение", ОтборИсполнение);КонецЕсли;Результат = Запрос.Выполнить();5. **Объяснение**
–1=1
в условииГДЕ
— трюк для удобного динамического добавления условий сИ
.
– ЕслиОтборИсполнение
не заполнен, дополнительное условие не добавляется.
– ИспользованиеВЫРАЗИТЬ
необходимо, если полеЗначение
имеет тип “Строка неограниченной длины” или другой сложный тип, и нужно привести его к конкретному типу для сравнения.—
**Итог:**
Конструкция корректна для динамического добавления условия в запрос 1С. Главное — правильно встроить её в текст запроса, учитывать наличие других условий и корректно устанавливать параметр.Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/699.html
https://infostart.ru/1c/articles/289285/
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.