а если у меня реквизит это фильтр по СубконтоДт - у которого переменный тип?
При этом мне нужно в запросе проверить пустое СубконтоДт или содержит значение! Как?
Т.е. у меня например справочник "ОтборыПоСубконто.СубконтоДт1_Счет311" - я делаю запрос по этому справочнику и указывают в параметрах запроса
а в запросе пишу "выбрать когда ОтборыПоСубконто.СубконтоДт1_Счет311 есть null или ОтборыПоСубконто.СубконтоДт1_Счет311= &СубконтоДт1_Счет311_Значение"
только такой запрос в моем случае - НЕ ПОМОЖЕТ, т.к. ОтборыПоСубконто.СубконтоДт1_Счет311 значение хоть и пустое, но не есть NULL
а указать как в [6] Контрагент.Ссылка <> Значение(Справочник.Контрагенты.ПустаяСсылка) - я не могу потому что переменный тип.
ВЫБОР
КОГДА &СчетДт в (ОтборыПоСубконто.Счет)
И (ОтборыПоСубконто.Субконто1.Ссылка ЕСТЬ NULL ИЛИ ОтборыПоСубконто.Субконто1 = &СубконтоДт1)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
Если вы пытаетесь проверить неогранниченное текстовое поле на "заполненность" в запросе, это можно сделать через выражение и временную таблицу, например так:
ВЫБРАТЬ
Контрагенты.Код,
ВЫРАЗИТЬ(Контрагенты.НеограниченноеПоле КАК СТРОКА(100)) КАК НеограниченноеПоле
ПОМЕСТИТЬ ВЫБОРКА
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.ПометкаУдаления = ЛОЖЬ
И Контрагенты.ЭтоГруппа = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЫБОРКА.Код,
ВЫБОРКА.НеограниченноеПоле
ИЗ
ВЫБОРКА КАК ВЫБОРКА
ГДЕ
ВЫБОРКА.НеограниченноеПоле <> ""
(20) А зачем временная таблица? Сразу в условиях прописать:
ВЫБРАТЬ
Контрагенты.Код,
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.ПометкаУдаления = ЛОЖЬ
И Контрагенты.ЭтоГруппа = ЛОЖЬ
И ВЫРАЗИТЬ(Контрагенты.НеограниченноеПоле КАК СТРОКА(100)) <> ""
Может кому то будет интересно - в запросе к полю, которое может хранить несколько разных Типов значения и которое не заполнено вернётся Неопределено.
Т.е. для таких полей достаточно сравнить с Неопределено, пример:
ВЫБРАТЬ РАЗЛИЧНЫЕ
ИсполнителиЗадач.РольИсполнителя КАК РольИсполнителя
ИЗ
РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач
ГДЕ
ИсполнителиЗадач.ДополнительныйОбъектАдресации = НЕОПРЕДЕЛЕНО
Если поле составного типа то тип может быть указан, а значение не заполнено, для того чтобы обрабатывать эту ситуацию нужно писать:
ВЫБРАТЬ РАЗЛИЧНЫЕ
ИсполнителиЗадач.РольИсполнителя КАК РольИсполнителя
ИЗ
РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач
ГДЕ
ИсполнителиЗадач.ДополнительныйОбъектАдресации = НЕОПРЕДЕЛЕНО
ИЛИ ИсполнителиЗадач.ДополнительныйОбъектАдресации.Ссылка ЕСТЬ NULL
1. Если это составной тип, то запрос будет выполняться для каждого типа.
2. НЕОПРЕДЕЛЕНО - это тип. И 1С будет сравнивать не значение, а пытаться определить тип и с типом сравнивать.
ВЫБРАТЬ
ОбщепитРецептураТовары.Номенклатура КАК Номенклатура,
ОбщепитРецептураТовары.Номенклатура.Код КАК Код,
ОбщепитРецептураТовары.Ссылка КАК Ссылка
ИЗ
Документ.ОбщепитРецептура.Товары КАК ОбщепитРецептураТовары
ГДЕ
ВЫБОР
КОГДА ОбщепитРецептураТовары.Номенклатура.Ссылка ЕСТЬ NULL
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ
ВЫБРАТЬ
ОбщепитРецептураТовары.Номенклатура КАК Номенклатура,
ОбщепитРецептураТовары.Номенклатура.Код КАК Код,
ОбщепитРецептураТовары.Ссылка КАК Ссылка
ИЗ
Документ.ОбщепитРецептура.Товары КАК ОбщепитРецептураТовары
ГДЕ
НЕ ОбщепитРецептураТовары.Номенклатура.Ссылка ЕСТЬ NULL
Бухи убирают из документов "ПоступлениеТоваровУслуг" счет расчета по авансам 60.02. Как в запросе проверить поле СчетУчетаРасчетаПоАвансам на пустое значение?
Да простят меня (4),(8),(9) и сам автор , но если в названии темы употреблено выражение "пустое значение" , то
правильным ответом является только (6).
NULL - это не пустое значение , это NULL.
Вариант (6) срабатывает тоже, если указывать не Контрагент.Ссылка а просто Контрагент. А вот для выражения ЕСТЬ NULL необходимо указывать ссылочное значение.
Только что проверил на 1С:Предприятие 8.3 (8.3.10.2299), УПП 1.3 обычное (неуправляемые формы) приложение.
Для ссылок на один-единственный тип данных работает ЕСТЬ NULL.
Для ссылок, у которых составной тип данных, работает Неопределено.
Вот как всё запутано :(
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1 Значение
|ИЗ
| (ВЫБРАТЬ Значение
| ИЗ РегистрСведений.ЗначенияСвойствОбъектов
| ГДЕ Объект = &Объект
| И Свойство = &Свойство
| ОБЪЕДИНИТЬ ВСЕ
| ВЫБРАТЬ &ТЕКСТ) КАК ЗначенияСвойствОбъектов";
ЗапросДанных.УстановитьПараметр("Текст", "не задан");
ЗапросДанных.УстановитьПараметр("Объект", Справочники.Номенклатура);
ЗапросДанных.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Температурный режим"));
Если составной тип данных в данном реквизите, для начала необходимо использовать: сначала выразить а потому уже проверять на соответствие Null {ВЫРАЗИТЬ( Значение КАК <тип>) есть NULL}