Условия в запросе могут быть расположены в 4 местах:

  • Основное место: после служебного слова ГДЕ тела запроса.
  • В конструкции ВЫБОР КОГДА
  • В параметрах виртуальных таблиц своство Условие
  • После служебного слова ИМЕЮЩИЕ для условия над уже рассчитанными итогами агрегатных функций.

Особенности использования условных операторов:

  • Операторы сравнения
    • “>”(больше),”<“(меньше),”=”(равно),”<>”(не равно),
    • “В()” (В каком-то массиве, параметре, в вложенном запросе),
    • “В ИЕРАРХИИ()” (в группе справочника,плана видов характеристик, переданных в скобках),
    • ПОДОБНО <шаблон>”(оператор сравнения над строковым значением), ССЫЛКА <ТИП> (для проверки на совпадение ссылочным типом)
  • оператор отрицания “НЕ” ставится в начале выражения через пробел, например: НЕ 1 = 2
  • операторы группировки условий: “И”, “ИЛИ”,”()” Например: (1 = 2) И (3<>4)
  • булево значения ИСТИНА, ЛОЖЬ, например: (1 = 2) = ЛОЖЬ

Эти операторы возможно использовать во всех 4 ситуациях, но контекст (окружаемые переменные у них отличаются).

В первых двух случаях условия накладываются на поля выборки, например:

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК СпрКонтрагенты ГДЕ СпрКонтрагенты.ИНН<>""

Обращение идет через имя таблицы (в простых запросах может опускаться, но в сложных может вызывать неоднозначность поля).

ГДЕ

Данное условие вызывает ограничение выборки (обычно уменьшает ее)

В конструкторе запроса находятся на вкладке условия:

uslovie-gde-v-zaprose

В произвольном варианте пишется текстом, в обычном выбирается поле, оператор сравнения и значение: uslovie-gde-v-zaprose-obychnoe

ВЫБОР КОГДА

Этот условный оператор используется для преобразования значения, ограничивает же выборку только когда расположен после служебного слова ГДЕ.
Допустимо несколько подчиненных условий. Может находится в полях выборки, полях условий ГДЕ, группировок, итогов (универсальный оператор для сложных условий)

Например, так выглядит вариант преобразования:

ВЫБРАТЬ
  ВЫБОР
  КОГДА 1 = 2
    ТОГДА "Никогда не будет истиной"
  КОГДА 1 = 1
    ТОГДА "Всегда будет истиной"
   ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
КОНЕЦ КАК ПолеПредставленияЗначения

Вариант использования в условии ГДЕ, результат выборки должен возвращать булево значение либо сравниваться с чем-то еще

Пример № 1

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК К ГДЕ ВЫБОР КОГДА К.ИНН = "" ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ

Пример № 2:

ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты КАК К ГДЕ ВЫБОР КОГДА К.ИНН = "" ТОГДА "" ИНАЧЕ "Заполнено" КОНЕЦ = "Заполнено"

Параметры виртуальных таблиц

В данном случае оперирование идет с полями таблиц, например ресурсами, измерениями, реквизитами. В этих условиях обращение идет без точки (контекст этого не требует).

Пример:

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта.Код = "RUR")

В конструкторе запроса они находятся вот здесь:

parametry-virtualnoj-tablitsy

Стоит отметить, что обычно используется ограничение над измерениями, так как иначе условие отнесется к выборке для получения, а не на сам результат (на ресурсы ограничения следует наложить в операторе ГДЕ, чтобы получить ожидаемый результат).

Накладывание условия в запросе на измерения, если нет обращения через точку (как в примере выше), ускоряет выборку: на больших таблицах, это будет визуально заметно; на небольших можно использовать как удобно.

ИМЕЮЩИЕ

Для наложения отбора для результата “группировочных” функции

Например:

ВЫБРАТЬ
  Контрагенты.ИНН,
  КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) КАК Ссылка
ИЗ
  Справочник.Контрагенты КАК Контрагенты

СГРУППИРОВАТЬ ПО
  Контрагенты.ИНН

ИМЕЮЩИЕ
  КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагенты.Ссылка) > 1 И
  Контрагенты.ИНН <> ""

В данную выборку попадут дубли ИНН, когда оно вообще заполнено.

В конструкторе запроса также находится на вкладке условия

В этой конструкции также возможно использование “группировочных” операторов И,ИЛИ, но сравнивать можно с константами запроса, с функцией или значением, входящим в группировку (другие реквизиты справочника в данном примере не будут доступны для сравнения -> тогда следует использовать ГДЕ).

Сущность хорошей рекламы не в том, чтобы возбуждать надежду, а в том, чтобы распалять жадность.

— Чарльз Адамс