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