1с условие в запросе если параметр заполнен

Условия в запросе

Условия в запросе

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

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

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

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

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

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

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

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

1с условие в запросе если параметр заполнен

В произвольном варианте пишется текстом, в обычном выбирается поле, оператор сравнения и значение: 1с условие в запросе если параметр заполнен

ВЫБОР КОГДА

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

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

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

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

Пример № 1

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

Пример № 2:

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

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

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

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

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

1с условие в запросе если параметр заполнен

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

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

ИМЕЮЩИЕ

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

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

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

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

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

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

1с условие в запросе если параметр заполнен

Реклама — самый дешевый способ продажи товара, особенно если товар не имеет никакой ценности.

Источник

Как сделать условие в запросе.

В запросе контрагент получается таким образом:

ВЫБРАТЬ
ВЫБОР
КОГДА ЗаказИзделия.Ссылка.ДокументОснование = &ПустойЗамер
ТОГДА ЗаказИзделия.Ссылка.Контрагент
ИНАЧЕ ВЫБОР
КОГДА ЗаказИзделия.Ссылка.ДокументОснование.Контрагент = &ПустойКонтрагент
ТОГДА ВЫРАЗИТЬ(ЗаказИзделия.Ссылка.ДокументОснование.Контрагент КАК СТРОКА(100))
ИНАЧЕ ЗаказИзделия.Ссылка.ДокументОснование.Контрагент
КОНЕЦ
КОНЕЦ КАК Контрагент,

Контрагент, в итоге, либо ссылка на справочник либо просто строка

Мне надо написать в запросе условие подобное
ГДЕ ЗаказИзделия.Ссылка.Контрагент = &Контрагент
но для обоих случаев (ссылка и строка)

Маленькое уточнение:
Логика документов такова:

(4) я не очень силен в запросах..
можно подробней?

Теперь надо отфильтровать все ЗаказИзделия на определнного контрагента.

Можешь что-то подобное привести сюда?

Я сам запрос осилил, а вот как условие к нему прикрутить не знаю 🙁

(5) нужно просто обернуть его другим запросом, и условие тогда можно наложить просто как на поле

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

ВЫБРАТЬ
ЗаказИзделия.Контрагент, ЗаказИзделия.Ссылка
ИЗ

Есть бухгалтерия, которая хочет, чтобы все частные лица во всех документах как контрагент «ЧАСТНОЕ ЛИЦО», и есть менеджеры, которым надо отслеживать документы пофамильно.

(13) сделай все строкой.
(11)+ это лишняя ненужная проверка.

(16) Нельзя. Потому что результат запроса выводиться в ТЗ на форме. А там контрагента надо «просматривать».

(20) понятно. и когда же тип строка = типу ссылка.

Синтаксически возможно так и более правильно, но мне было удобнее так.

Я проверял свой, частный, случай. Реквизит Контрагент в документе ЗамерУстановка имеет составной тип данных: Строка и Справочник.Контрагент.

Проверка в запросе показала, что это условие работает. Работает и для ЗамерУстановка.Контрагент и для второго реквизита. Что я и использовал в своем запросе в условии.

Ладно, думаю что всё это уже не по теме.

Думаю, что уместно закрыть тему.

(37)
бредишь.
ЗаказИзделия.Ссылка.ДокументОснование.Контрагент может быть
ССЫЛКА
СТРОКА
НЕОПРЕДЕЛЕНО
ну и NULL.

если НЕОПРЕДЕЛЕНО то, естественно Выразить как строка даст NULL.

(45)(46)
Почему тип составной я уже ответил в (15).

(48)
1. У тебя во всем условии при всех вариантах возвращается строка, а мне надо чтобы ссылкой, если он ссылка в ЗаказИзделия или ЗаказИзделие.ДокументОснование) и строкой если он строка. Его дальше из ТЗ будут открывать.

2. С группами можно конечно было сделать. Но далеко не на каждый документ «Замер» (он же является ЗаказИзделия.ДокументОснование) будет создан ЗаказИзделия. т.е. очень много замеров с такими контрагентами, которые будут только 1 раз и больше никогда. Руководство решило, что все такие будут проходит в бухгалтерии как «Частное лицо», чтобы справочник контрагентов не рос как на дрожжах, ну а менеджерам естественно нужно пофамильно, чтобы замеры найти. вот и извращаюсь теперь 🙁

(50) И так я тоже делал. Причем с самого начала.

всегда истина, проверено. именно поэтому я стал проверять на пустую ссылку, а не на тип.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *