Всем ДД, вроде и не "новичок", но столкнулся с такой "проблемой":
Завел в справочнике "ФизЛица" дополнительный реквизит - булево. Первоначально не один реквизит не заполнен, т.е. по логике я считал, что там Ложь! Пытаюсь в запросе выбрать все физлица, у которых этот реквизит Ложь. Но выясняется, что если не установлена Истина, то и в дополнительных реквизитах этого Свойства нет. По мне странная логика - подразумевал, что работает принцип Истина, Ложь, ЕстьNull. ЕстьNull в запросе не помогло. Подскажите чем можно это выбрать?
---
Такой запрос должен сработать:
Я беру ФизЛица, у которых в ТЧ ДополнительныеРеквизиты нет строк со свойством СсылкаНаМоеСвойство

```1c
    "ВЫБРАТЬ
    | ФизическиеЛица.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.ФизическиеЛица КАК ФизическиеЛица
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
    | ПО ФизическиеЛицаДополнительныеРеквизиты.Ссылка = ФизическиеЛица.Ссылка
    | И (ФизическиеЛицаКонтактнаяИнформация.Свойство = &СсылкаНаМоеСвойство)
    |ГДЕ
    | ФизическиеЛицаДополнительныеРеквизиты.Значение ЕСТЬ NULL"
```
---
Как уже сказали - левое соединение со справочником физлиц и в отбор добавить условие

```1c
    Где
    ЕстьNull(ЗначениеДопРеквизита, Ложь) = Ложь
```
---
Правильно. Значения дополнительных свойств объектов хранятся в соответствующем справочнике ЗначенияСвойствОбъектов. Чтобы значение там было - его нужно добавить в этот справочник. Даже если это булево со значением ложь. Если вы не добавите его туда, то при левом соединении в запросе значение будет = NULL
---
В БСП 3 редакции доп.реквизиты хранятся в ТЧ ДополнительныеРеквизиты самого объекта. В старых версиях БСП они хранятся в регистре сведений ЗначенияСвойствОбъектов. В любом случае поведение системы следующее: если значение не задано (для булева - Ложь), то и хранить эти данные не нужно, видимо, для экономии места.

Если вы хотите получить физ.лиц без реквизита, обращайтесь к самому справочнику, левым соединением цепляйте доп. реквизиты. Ну а потом можно отбор сделать по NULL.
---
да, возможно. У меня перед глазами только старая версия БСП. но смысл не меняется
---
Коллеги! Вы не внимательно читали! Во-первых это дополнительные РЕКВИЗИТЫ. Во-вторых я знаю где эти реквизиты находятся. В третьих я написал что конструкция ЕстьNull не срабатывает... Выводит пустую таблицу. В таблице дополнительных реквизитов нет таких строк с "нужным" свойством. Универсальный отчет по физлицам.дополнительные реквизиты с отбором по свойству дает пустой список. Попробуйте сами... Вопрос открыт...)
---
```1c
    ВЫБРАТЬ
    | ФизическиеЛицаДополнительныеРеквизиты.Значение КАК Значение,
    | ФизическиеЛицаДополнительныеРеквизиты.Свойство КАК Свойство,
    | ФизическиеЛицаДополнительныеРеквизиты.Ссылка КАК ФизичЛицо
    |ИЗ
    | Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
    |ГДЕ
    | ФизическиеЛицаДополнительныеРеквизиты.Свойство ЕСТЬ NULL
    | И ФизическиеЛицаДополнительныеРеквизиты.Ссылка.ПометкаУдаления = ЛОЖЬ;
```

Пустая таблица
---
попробуйте конструкцию

ВЫБОР КОГДА ЗначениеДополнительногоРеквизита ЕСТЬ NULL Тогда ложь
Иначе
ЗначениеДополнительногоРеквизита
Конец
---
Не помогло - не видит она реквизит...(
---
я вроде программист, но пишу такую фигню...

```1c
    "ВЫБРАТЬ
    | ФизическиеЛицаДополнительныеРеквизиты.Значение КАК Значение,
    | ФизическиеЛицаДополнительныеРеквизиты.Свойство КАК Свойство,
    | ФизическиеЛицаДополнительныеРеквизиты.Ссылка КАК ФизичЛицо
    |ИЗ
    | Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
    |ГДЕ
    | ФизическиеЛицаДополнительныеРеквизиты.Свойство ЕСТЬ NULL
    | И ФизическиеЛицаДополнительныеРеквизиты.Ссылка.ПометкаУдаления = ЛОЖЬ";

    Пустая таблица
```

а попробуйте так

```1c
    "ВЫБРАТЬ
    | ФизическиеЛицаДополнительныеРеквизиты.Значение КАК Значение,
    | ФизическиеЛицаДополнительныеРеквизиты.Свойство КАК Свойство,
    | Спр.Ссылка КАК ФизичЛицо
    |ИЗ
    | Справочник.ФизическиеЛица КАК Спр
    |левое соединение
    | Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
    |по Спр.Ссылка = ФизическиеЛицаДополнительныеРеквизиты.Ссылка
    |и ФизическиеЛицаДополнительныеРеквизиты.Свойство.Наименование = "ИмяВашегоСвойства" //или параметром задать
    |ГДЕ
    | не спр.ПометкаУдаления
    |и ЕстьNull(ФизическиеЛицаДополнительныеРеквизиты.Значение,Ложь) = Ложь";
```
---
Во-первых, как уже говорили, БСП не хранит значение доп. реквизита, если оно равно пустому значению типа этого реквизита. Т.е. для Число это будет 0, для Строка - пустая строка, для Булево - Ложь и т.д. При этом, если сначала значение было заполнено и хранилось в ТЧ, то после его обнуления соответствующая строка удаляется из ТЧ.

Во-вторых, совершена распространенная ошибка в работе с запросами: если делается левое соединение второй таблицы к первой, то нельзя просто вешать условие на вторую таблицу (ВтораяТаблица.Поле = Ложь), без ЕСТЬNULL() или ЕСТЬ NULL, т.к. если записей во второй таблице не будет, то любое поле из второй таблицы будет NULL, а любое сравнение с NULL будет Ложь

В итоге запрос из (7) и (10) не будет работать: в ТЧ нет строк с вашим свойством, если значение свойства - Ложь.

Посмотрите, как происходит создание элементов формы для отображения доп. реквизитов: сначала происходит получение набора свойств, связанных с этим объектом, а потом уже из ТЧ ДополнительныеРеквизиты берутся значения свойств.
---
Такой запрос должен сработать:
Я беру ФизЛица, у которых в ТЧ ДополнительныеРеквизиты нет строк со свойством СсылкаНаМоеСвойство

```1c
    "ВЫБРАТЬ
    | ФизическиеЛица.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.ФизическиеЛица КАК ФизическиеЛица
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
    | ПО ФизическиеЛицаДополнительныеРеквизиты.Ссылка = ФизическиеЛица.Ссылка
    | И (ФизическиеЛицаКонтактнаяИнформация.Свойство = &СсылкаНаМоеСвойство)
    |ГДЕ
    | ФизическиеЛицаДополнительныеРеквизиты.Значение ЕСТЬ NULL"
```
---
"ВЫБРАТЬ

|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
| ПО ФизическиеЛицаДополнительныеРеквизиты.Ссылка = ФизическиеЛица.Ссылка
| И (ФизическиеЛицаКонтактнаяИнформация.Свойство = &СсылкаНаМоеСвойство)
|ГДЕ| ФизическиеЛица.Ссылка КАК Ссылка
| ФизическиеЛицаДополнительныеРеквизиты.Значение ЕСТЬ NULL"

Спс.
У меня получилась такая конструкция:

```1c
    СвойствоРеквизита = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ИмяРеквизита (Физические лица)",,);
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Свойство", СвойствоРеквизита);
    Запрос.Текст =
    "ВЫБРАТЬ
    | ФизическиеЛица.Ссылка КАК Ссылка,
    | ФизическиеЛицаДополнительныеРеквизиты.Свойство КАК Свойство,
    | ФизическиеЛицаДополнительныеРеквизиты.Значение КАК Значение
    |ИЗ
    | Справочник.ФизическиеЛица КАК ФизическиеЛица
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
    | ПО (ФизическиеЛицаДополнительныеРеквизиты.Ссылка = ФизическиеЛица.Ссылка)
    | И (ФизическиеЛицаДополнительныеРеквизиты.Свойство = &Свойство)
    |ГДЕ
    | ФизическиеЛицаДополнительныеРеквизиты.Значение ЕСТЬ NULL";
```

Запрос вывел мне все элементы справочника, у которых в нужном реквизите Ложь. Спасибо всем за обсуждение темы...
---
Собственно, я это и имел в виду в (3) , просто запрос не писал =)
---
А запрос в (10) не будет работать, т.к. условие ФизическиеЛицаДополнительныеРеквизиты.Свойство.Наименование = ""ИмяВашегоСвойства"" будет всегда Ложь, т.к. левая часть всегда будет NULL для нужных нам записей.
---
хм, ну-ну, еще один опытный программист...
а вы попробуйте эту команду

и ФизическиеЛицаДополнительныеРеквизиты.Свойство.Наименование = ""ИмяВашегоСвойства"" //или параметром задать
---
да, перемудрил я что-то, этот запрос будет работать.
---
ДД, вдогонку коллегам с "пытливом" умом добавление:
при дальнейшем использовании запроса увидел "интересное поведение" табличной части "ДополнительныеРеквизиты". Используя перебор списка таблицы со Значением = Истина такой конструкцией:

```1c
    Для каждого Строчка Из Списка Цикл
    Покупатель = Строчка.Ссылка.ПолучитьОбъект();
    СтрДопТабл = Покупатель.ДополнительныеРеквизиты;
    СтрДопТабл[0].Значение = Ложь;
    Покупатель.Записать();
    КонецЦикла
```

получил таблицу ДополнительныеРеквизиты со строкой Свойство (имя свойство) и Значение равно Ложь, т.е. строка осталось и с ней можно работать "обычными" запросами. Для того чтобы использовать "типовое" поведение - нужна конструкция:

```1c
    Для каждого Строчка Из Люди Цикл
    Покупатель = Строчка.Ссылка.ПолучитьОбъект();
    СтрДопТабл = Покупатель.ДополнительныеРеквизиты;
    СтрДопТабл.Удалить(0);
    Покупатель.Записать();
    КонецЦикла
```
---
Вы какие-то неправильные выводы сделали. "Типовая" логика работы не предполагает удаление дополнительного реквизита, если ему нужно установить Ложь.
---
Вы не уловили...Если Вы программно установите реквизит из Истины в Ложь, то строка остается. А если Вы "пальцами" в карточке физлица установите Ложь, то строка у этого физлица пропадет, т.е. отработает "типовая" логика. Пробуйте и обрящите...