Ребят есть запрос: выводятся все расходные накладные где они есть в основании у приходных. Так Же выведена колонка с разницей в количестве. Но загвоздка в том что в условии стоит Расх.Номенклатура = Приход.Номенклатура и в эти поля не входят те карточки номенклатуры "которые есть в расходной накладной" но нет "в приходе". Как сделать условие так что бы это тоже учитывалось, вычислив какой номенклатуры нет в приходе указав разницу в количестве, предполагаю условие с пустой ссылкой(Когда расх.номенкл = Прих.номенклат.пустаяссылка тогда...) но не пойму как это реализовать. Заранее спасибо! Запрос может быть корявеньким я студент, не придирайтесь сильно(.

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

    //Запрос.УстановитьПараметр("МоментВремени",ТекущаяДатаСеанса());
    Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач));
    Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
    //Запрос.УстановитьПараметр("Контрагент",Контрагент);
    Документы=Запрос.Выполнить().Выгрузить();
    ЭлементыФормы.Документы.СоздатьКолонки();
```

///Если номенклатура отсутствует в приходной накладной а в расходной она есть, вычисления не производятся эта строка пропускается и не выводится потому что условие стоит

```1c
    | РасходнаяНакладнаяСостав.Номенклатура = ПриходнаяНакладнаяСостав.Номенклатура
```

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

Решение проблемы тривиально: перенесите все условия, связанные с приходной накладной, из секции "ГДЕ" в условия связей таблиц:

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

Решение проблемы тривиально: перенесите все условия, связанные с приходной накладной, из секции "ГДЕ" в условия связей таблиц:

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

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

Вот и все