Добрый день. Платформа 8.3 (8.3.21.1624). Есть отчет на СКД.
Берутся все записи из справочника Номенклатура и соединяются с виртуальной таблицей ЗапасыОстатки через левое соединение.
Отчет выводит весь список номенклатуры и ее количество, даже если количество =0.
Выглядит это все примерно так:
Запрос
```1c
    ВЫБРАТЬ
    Номенклатура.Ссылка КАК втНоменклатура
    ПОМЕСТИТЬ втСправочникНоменклатура
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Запас)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЗапасыОстатки.КоличествоОстаток КАК Количество,
    втСправочникНоменклатура.втНоменклатура КАК втНоменклатура,
    втСправочникНоменклатура.втНоменклатура.КатегорияНоменклатуры КАК втКатегорияНоменклатуры
    ИЗ
    втСправочникНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки(, ) КАК ЗапасыОстатки
    ПО втСправочникНоменклатура.втНоменклатура = ЗапасыОстатки.Номенклатура
```

Мне нужно условие в запрос: не показывать товары, на которых стоит пометка на удаление и по которым нет остатков. То есть если пометка на удаление стоит, но остатки еще есть, то выводить эти товары нужно. В конструкторе запросов в параметрах виртуальных таблиц нет возможности указать условие ресурсам регистра, только измерениям. Как еще это можно сделать?
---
```1c
    ВЫБРАТЬ
    Номенклатура.Ссылка КАК втНоменклатура
    ПОМЕСТИТЬ втСправочникНоменклатура
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Запас)
    ;

    ////////////////////////////////////////////////////////////­­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК Количество,
    втСправочникНоменклатура.втНоменклатура КАК втНоменклатура,
    втСправочникНоменклатура.втНоменклатура.КатегорияНоменклатуры КАК втКатегорияНоменклатуры
    ИЗ
    втСправочникНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки(, ) КАК ЗапасыОстатки
    ПО втСправочникНоменклатура.втНоменклатура = ЗапасыОстатки.Номенклатура
    ГДЕ
    Не (ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) = 0 И втСправочникНоменклатура.втНоменклатура.ПометкаУдаления)
```

Так будет правильнее, если остаток 0 и стоит пометка, то это исключаем.
---
как-то так:
....

```1c
    ГДЕ
    ВЫБОР
    КОГДА втСправочникНоменклатура.втНоменклатура.ПометкаУдаления
    ТОГДА ЗапасыОстатки.КоличествоОстаток > 0
    ИНАЧЕ ИСТИНА
    КОНЕЦ
```
---
```1c
    ВЫБРАТЬ
    Номенклатура.Ссылка КАК втНоменклатура
    ПОМЕСТИТЬ втСправочникНоменклатура
    ИЗ
    Справочник.Номенклатура КАК Номенклатура
    ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Запас)
    ;

    ////////////////////////////////////////////////////////////­­////////////////////
    ВЫБРАТЬ
    ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК Количество,
    втСправочникНоменклатура.втНоменклатура КАК втНоменклатура,
    втСправочникНоменклатура.втНоменклатура.КатегорияНоменклатуры КАК втКатегорияНоменклатуры
    ИЗ
    втСправочникНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки(, ) КАК ЗапасыОстатки
    ПО втСправочникНоменклатура.втНоменклатура = ЗапасыОстатки.Номенклатура
    ГДЕ
    Не (ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) = 0 И втСправочникНоменклатура.втНоменклатура.ПометкаУдаления)
```

Так будет правильнее, если остаток 0 и стоит пометка, то это исключаем.
---
Соединение нужно поменять все же, так проще будет и условий не нужно

ИЗ
РегистрНакопления.Запасы.Остатки(, )
        ЛЕВОЕ втСправочникНоменклатура) КАК ЗапасыОстатки
        ПО втСправочникНоменклатура.втНоменклатура = ЗапасыОстатки.Номенклатура
---
Вы это серьёзно?
Все записи из регистра с остатками и к ним левое соединение?
---
я поняла автора так, что ему нужна вся номенклатура по которой имеются остатки
---
пишет он одно, а в запросе другое
---
Не нужно, потому что, если остатков вообще не будет, то результат будет пустой, а нужна вся номенклатура, независимо от наличия остатка
---
не вся, там же отбор по типу номенклатуры
---
хорошо. вся определенного типа. так норм?
---
норм
---
Спасибо, это то что было нужно. Но у меня вопрос: разве можно накладывать условия на виртуальные таблицы через ГДЕ? Я много читал, что это плохая практика. Хотя после внесения вашего решения в свой отчет я не увидел никакой разницы в скорости выполнения.
---
все зависит от поставленной задачи. Ваша решается так.
---
Левое Соединение изменить на Внутреннее?
---
а не, неправильно понял задачу
---
А зачем тебе спр.Номенклатура в запросе? Тебе же нужны остатки. Вот и возьми только остатки. Пометка удаления у элемента справочника на запись в РН не влияет. Оттуда же вытащи и тип номенклатуры.
---
что будет в результате такого запроса(без спр.Номенклатура), если остатков совсем не будет?
---
Ничего не будет. ТС же вроде и хочет получить только остатки
---
ТС хочет получить список всей номенклатуры определенного вида + остатки по ней с условием, что если номенклатура помечена на удаление, но по ней есть остаток, то ее так же выводить в список, помеченную на удаление номенклатуру без остатка выводить не надо.
---
Мне нужна абсолютно вся номенклатура, с остатками и без, поэтому я и беру спр.Номенклатура.
---
Это учебное задание?
---
Нет, клиенту так нужно
---
Гы))) У меня в базе 52003 элемента спр.Номенклатура. Так что при виде левого соединения к это справочнику начинает глаз дёргаться)
---
Пока не дергается