База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как добавить условие в запрос 1С с использованием тернарного оператора?
- В этой теме 1 ответ, 2 участника, последнее обновление 4 недели назад сделано  Odin — Одинэсник. Odin — Одинэсник.
- 
		АвторСообщения
- 
		
			- 
1 октября 2025 в 12:45 #33627 OdineskiУчастник OdineskiУчастник|»+?(ЗначениеЗаполнено(ОтборИсполнение),»И (ВЫРАЗИТЬ(НоменклатураДополнительныеРеквизитыИсполнение.Значение КАК Справочник.ЗначенияСвойствОбъектов) = &ОтборИсполнение)»,»»)+» 
- 
1 октября 2025 в 12:45 #33628 Odin — ОдинэсникУчастник 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/
 
- 
- 
		АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.
