Добрый день!

Возникла проблема. Необходимо вывести в отчете записи в соответствии с условиями:
1. Если заполнен документ-основание;
2. Если не заполнен документ-основание;
3. Не учитывать заполненность.

Написала запрос:

```1c
    ВЫБРАТЬ
    ПеремещениеТоваровТовары.Номенклатура,
    ПеремещениеТоваровТовары.Количество,
    ПеремещениеТоваров.Ссылка КАК Перемещение,
    ПеремещениеТоваров.Комментарий,
    ПеремещениеТоваров.ДокументОснование
    ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
    ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
    ГДЕ
    ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
    И ВЫБОР
    КОГДА &ДокНеЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОГДА &ДокЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка > 0
    КОГДА &НеУчитывать ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка > 0
    ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ
    {ГДЕ
    (ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
    (ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
```

На форме создала реквизит ПолеВыбора, для него сделала следующее:

```1c
    Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(1, "Не учитывать");
    ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(2, "Заполнен");
    ЭлементыФормы.ПолеВыбора.СписокВыбора.Добавить(3, "Не заполнен");
    КонецПроцедуры

    Процедура ПолеВыбораПриИзменении(Элемент)
    Если ПолеВыбора = 1 Тогда
    ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
    ПараметрДок.Использование = Истина;
    ПараметрДок.Значение = ПолеВыбора;
    ИначеЕсли ПолеВыбора = 2 Тогда
    ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
    ПараметрДок.Использование = Истина;
    ПараметрДок.Значение = ПолеВыбора;
    ИначеЕсли ПолеВыбора = 3 Тогда
    ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
    ПараметрДок.Использование = Истина;
    ПараметрДок.Значение = ПолеВыбора;
    КонецЕсли;
    КонецПроцедуры
```

При формировании отчета в режиме предприятия выскакивает ошибка (см. прикрепленный файл).
Полагаю, что ошибка из-за того, что я сравниваю значение с нулем вот здесь:

```1c
    ВЫБОР
    КОГДА &ДокНеЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОГДА &ДокЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка > 0
    КОГДА &НеУчитывать ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка > 0
    ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ
```

Если мое предположение верно, как сделать проверку иначе? Если нет, то где могла ошибиться?
---
Как ж я не заметил...Остальные параметры тоже нужно установить

Процедура ПолеВыбораПриИзменении(Элемент)
    Если ПолеВыбора = 1 Тогда
        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = истина;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

    ИначеЕсли ПолеВыбора = 2 Тогда
        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Истина;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

    ИначеЕсли ПолеВыбора = 3 Тогда
.............................
    КонецЕсли;
КонецПроцедуры
---
```1c
    ВЫБРАТЬ
    ПеремещениеТоваровТовары.Номенклатура,
    ПеремещениеТоваровТовары.Количество,
    ПеремещениеТоваров.Ссылка КАК Перемещение,
    ПеремещениеТоваров.Комментарий,
    ПеремещениеТоваров.ДокументОснование
    ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
    ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
    ГДЕ
    ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
    И ВЫБОР
    КОГДА &ДокНеЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОГДА &ДокЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
    КОГДА &НеУчитывать ТОГДА //нужно ли какое-то условие, если требуется не учитывать. Может стоит вообще отказаться от этого условия?
    // ПеремещениеТоваров.ДокументОснование.Ссылка > 0
    // ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ
    {ГДЕ
    (ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
    (ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
```
---
Если заполненность документа не учитывается, необходимо вывести все записи
---
значит убери условие, если не нужно фильтровать)
---
Но у меня три условия. Как выполнится третье, если совсем не задавать?

Я поправило на IS NOT NULL -- ошибка не исчезла
---
как нужно фильтровать исходные данные при условии 3 - "Неучитывать". Какое условие отбора документов?
Допустим есть 100 документов. Какие из них нужно выбрать и по какому принципу?

Я поправило на IS NOT NULL -- ошибка не исчезла - а 3 условие закоментировано?
---
Условие 3 закоментировала

1. Выводит документы, у которых есть документ-основание (к примеру, 20 шт).
2. Выводит документы, у которых нет документа-основания (их, получается, 80 шт).
3. Выводит все 100 документов вне зависимости от наличия документа-основания.
---
Хорошо. Сделайте так.

ВЫБРАТЬ
 ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура,
 ПеремещениеТоваровТовары.Количество КАК Количество,
 ПеремещениеТоваров.Ссылка КАК Перемещение,
 ПеремещениеТоваров.Комментарий КАК Комментарий,
 ПеремещениеТоваров.ДокументОснование КАК ДокументОснование
ИЗ
 Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
  ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
  ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
 ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
 И &НеУчитывать = ИСТИНА

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ПеремещениеТоваровТовары.Номенклатура,
 ПеремещениеТоваровТовары.Количество,
 ПеремещениеТоваров.Ссылка,
 ПеремещениеТоваров.Комментарий,
 ПеремещениеТоваров.ДокументОснование
ИЗ
 Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
  ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
  ПО (ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка)
ГДЕ
 ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
 И ВЫБОР
   КОГДА &ДокНеЗаполнен
    ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
   ИНАЧЕ ЛОЖЬ
  КОНЕЦ

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 ПеремещениеТоваровТовары.Номенклатура,
 ПеремещениеТоваровТовары.Количество,
 ПеремещениеТоваров.Ссылка,
 ПеремещениеТоваров.Комментарий,
 ПеремещениеТоваров.ДокументОснование
ИЗ
 Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
  ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
  ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
ГДЕ
 ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
 И ВЫБОР
   КОГДА &ДокЗаполнен
    ТОГДА ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ НЕ NULL
    ИНАЧЕ ЛОЖЬ

 КОНЕЦ
---
Сейчас попробую
---
Все та же ошибка...(
---
Как ж я не заметил...Остальные параметры тоже нужно установить

Процедура ПолеВыбораПриИзменении(Элемент)
    Если ПолеВыбора = 1 Тогда
        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = истина;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

    ИначеЕсли ПолеВыбора = 2 Тогда
        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НеУчитывать");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Истина;

        ПараметрДок = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДокНеЗаполнен");
        ПараметрДок.Использование = Истина;
        ПараметрДок.Значение = Ложь;

    ИначеЕсли ПолеВыбора = 3 Тогда
.............................
    КонецЕсли;
КонецПроцедуры
---
ОГО! Сработало!!! Большое спасибо!
А почему нужно расписывать параметры так подробно, так и не поняла... Почему не работало так, как написала я?
---
Если не установить параметры, то они Неопределено.

Если в запросе написать КОГДА &ДокЗаполнен = ИСТИНА ТОГДА т.е явно указать что мы ожидаем, то все будет хорошо (ну условие будет ложным т.к. неопределено <> ИСТИНА )
В случае, если просто указать КОГДА &ДокЗаполнен ТОГДА, то платформа ожидает тип булево т.е ДокЗаполнен = или истина или ложь, а у него неопределено. Вот и ошибка
---
Спасибо!
---
Спасибо.
---
Попробуй так второе условие:

```1c
    НЕ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
```

Третье по идее не нужно вовсе.
---
Ошибка все равно выскакивает
---
Покажите, что получилось
---
Пробовала в консоли проверить без третьего условия, не сработало, поэтому оставила его.

Получилось вот так, в итоге:

```1c
    ВЫБРАТЬ
    ПеремещениеТоваровТовары.Номенклатура,
    ПеремещениеТоваровТовары.Количество,
    ПеремещениеТоваров.Ссылка КАК Перемещение,
    ПеремещениеТоваров.Комментарий,
    ПеремещениеТоваров.ДокументОснование
    ИЗ
    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
    ПО ПеремещениеТоваровТовары.Ссылка = ПеремещениеТоваров.Ссылка
    ГДЕ
    ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
    И ВЫБОР
    КОГДА &ДокНеЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОГДА &ДокЗаполнен ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
    КОГДА &НеУчитывать ТОГДА
    ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
    ИЛИ ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
    КОНЕЦ
    {ГДЕ
    (ПеремещениеТоваров.СкладОтправитель = &СкладОтправитель),
    (ПеремещениеТоваров.СкладПолучатель = &СкладПолучатель)}
```
---
Если я правильно понял, то напишите проще, если Вы хотите чтобы при &НеУчитывать выводились все записи (то есть как бы игнорировать данное условие) тогда напишите так

...
...
ГДЕ
    ПеремещениеТоваров.Дата МЕЖДУ &ДатаНачало И &ДатаОкончание
    И ВЫБОР
        КОГДА &ДокНеЗаполнен ТОГДА
              ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL
           КОГДА &ДокЗаполнен ТОГДА
              ПеремещениеТоваров.ДокументОснование.Ссылка IS NOT NULL
           КОГДА &НеУчитывать ТОГДА
               ИСТИНА
    КОНЕЦ

И все у вас третье условие будет всегда в ИСТИНА то есть выводится данные
---
Да, так и сделала уже
---
ПеремещениеТоваров.ДокументОснование.Ссылка ЕСТЬ NULL

Зачем эта .Ссылка?
ПеремещениеТоваров.ДокументОснование.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка.Ссылка ЕСТЬ NULL
так тоже можно.

достаточно
ПеремещениеТоваров.ДокументОснование ЕСТЬ NULL