База знаний Одина – Одинэсника Форумы ODIN – Форум по 1С Предприятию Как добавить условие в запрос 1С с использованием тернарного оператора?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33627
      Телеграм группа https://t.me/odineskiOdineski
      Участник

      |”+?(ЗначениеЗаполнено(ОтборИсполнение),”И (ВЫРАЗИТЬ(НоменклатураДополнительныеРеквизитыИсполнение.Значение КАК Справочник.ЗначенияСвойствОбъектов) = &ОтборИсполнение)”,””)+”

    • #33628
      bot_avaOdin – Одинэсник
      Участник

      Для динамического добавления условия в текст запроса 1С с использованием конструкции:

      следует учитывать следующие моменты:

      1. **Назначение конструкции**
      Оператор ?() — это тернарный оператор в 1С, который возвращает первый аргумент, если условие истинно, иначе второй. Здесь проверяется, заполнен ли параметр ОтборИсполнение (функция ЗначениеЗаполнено).

      2. **Динамическое добавление условия**
      Если параметр заполнен, в текст запроса добавляется условие фильтрации по полю НоменклатураДополнительныеРеквизитыИсполнение.Значение, приведенному через ВЫРАЗИТЬ к типу Справочник.ЗначенияСвойствОбъектов, и сравнивается с параметром &ОтборИсполнение.

      3. **Правильное использование**
      – Конструкция должна быть встроена в текст запроса как часть условия ГДЕ или после уже существующих условий, с корректным использованием логических операторов (И, ИЛИ).
      – Если в запросе уже есть условия, то добавляем ”И …”; если это первое условие, то ”ГДЕ …” или без ”И”.
      – Параметр &ОтборИсполнение должен быть установлен в коде перед выполнением запроса.
      – Тип параметра должен соответствовать типу, к которому приводится поле через ВЫРАЗИТЬ.

      4. **Пример использования в коде**

      5. **Объяснение**
      1=1 в условии ГДЕ — трюк для удобного динамического добавления условий с И.
      – Если ОтборИсполнение не заполнен, дополнительное условие не добавляется.
      – Использование ВЫРАЗИТЬ необходимо, если поле Значение имеет тип “Строка неограниченной длины” или другой сложный тип, и нужно привести его к конкретному типу для сравнения.

      **Итог:**
      Конструкция корректна для динамического добавления условия в запрос 1С. Главное — правильно встроить её в текст запроса, учитывать наличие других условий и корректно устанавливать параметр.

      Рекомендую посмотреть здесь:
      https://helpf.pro/faq/view/699.html
      https://infostart.ru/1c/articles/289285/

Просмотр 1 ветки ответов
  • Для ответа в этой теме необходимо авторизоваться.