Здравствуйте, уже почти неделю бьюсь над задачей по внешнему отчету. Подскажите, может, я что-то упускаю из виду?

Задача: Нужно получить продажи по товарам за прошлый и позапрошлый года, а также получить остатки на складах по этим товарам. Вся сложность в том, что товар может храниться на том складе, с которого не продавался, из-за этого отчет формируется не совсем верно.

Логика запроса у меня следующая:
1. Получаю всю номенклатуру складов из справочника:

```1c
    ВЫБРАТЬ
    Склады.Ссылка КАК Склады
    ПОМЕСТИТЬ ВТ3
    ИЗ
    Справочник.Склады КАК Склады
    ;
```

2. Получаю продажи по годам в две разных таблицы:

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

    СГРУППИРОВАТЬ ПО
    ПродажиПрошлый.ДокументПродажи.Склад,
    ПродажиПрошлый.Номенклатура
    ;
```

```1c
    ВЫБРАТЬ
    ПродажиПозапрошлый.Номенклатура КАК НоменклатураПред,
    ПродажиПозапрошлый.ДокументПродажи.Склад КАК СкладПред,
    СУММА(ПродажиПозапрошлый.КоличествоОборот) КАК КоличествоПред
    ПОМЕСТИТЬ ВТ2
    ИЗ
    РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчетаНач, ГОД, -2), ДОБАВИТЬКДАТЕ(&ДатаОтчетаКон, ГОД, -2), , ) КАК ПродажиПозапрошлый
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ3 КАК ВТ3
    ПО ПродажиПозапрошлый.ДокументПродажи.Склад = ВТ3.Склады
    ГДЕ
    ТИПЗНАЧЕНИЯ(ПродажиПозапрошлый.ДокументПродажи.Ссылка) = ТИП(Документ.РеализацияТоваровУслуг)

    СГРУППИРОВАТЬ ПО
    ПродажиПозапрошлый.ДокументПродажи.Склад,
    ПродажиПозапрошлый.Номенклатура
    ;
```

3. Получаю остатки на складах:

```1c
    ВЫБРАТЬ
    Остатки.КоличествоКонечныйОстаток КАК Остатки,
    Остатки.Номенклатура КАК Номенклатура
    ПОМЕСТИТЬ ВТ4
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаОстатка, , , , ) КАК Остатки
    ;
```

4. Объединяю все ВТ в единую таблицу. Привязывая левым соединением ко всем складам данные из таблицы по реализации товаров и к этим данным левым соединением привязываю данные по остаткам, связываю по номенклатуре.

```1c
    ВЫБРАТЬ
    ЕСТЬNULL(ВТ1.Номенклатура, ВТ2.НоменклатураПред) КАК Номенклатура,
    ВТ3.Склады КАК Склады,
    ЕСТЬNULL(ВТ1.Количество, 0) КАК Количество,
    ЕСТЬNULL(ВТ2.КоличествоПред, 0) КАК КоличествоПред,
    ЕСТЬNULL(ВТ4.Остатки, 0) КАК Остатки
    ИЗ
    ВТ3 КАК ВТ3
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ1 КАК ВТ1
    ПОЛНОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
    ПО ВТ1.Номенклатура = ВТ2.НоменклатураПред
    И ВТ1.Склад = ВТ2.СкладПред
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ4 КАК ВТ4
    ПО (ВТ1.Номенклатура = ВТ4.Номенклатура
    ИЛИ ВТ2.НоменклатураПред = ВТ4.Номенклатура)
    ПО (ИСТИНА)
```

Вся проблема в том, что когда я объединяю левое соединение по ИСТИНА, тогда мне выводит все склады из установленного отбора, но данные по количеству и остаткам пишет напротив каждого из складов, хотя по идее должен только напротив одного писать (с какого склада и произошла реализация), а остатки и подавно у каждого склада должны быть свои.

Если же я соединяю не по ИСТИНА, а по складам, которые есть в таблицах продаж (
```1c
    ВТ3.Склады = ВТ1.Склад ИЛИ ВТ3.Склады = ВТ2.Склад
```
), то он выдает правильные данные, но из списка складов остаются только те, что участвовали в продажах. А тот склад, на котором действительно есть остатки, указывается сверху основной таблицы с пустым значением. Все остатки указываются для того склада, через который производилась продажа.

Подскажите, пожалуйста, как сделать так, чтобы склады выводились все и данные указывались верно для каждого из них?
---
Именно, нужны остатки только той номенклатуры, что участвовала ранее в продажах
Решается как минимум 2 способами:

Либо сделать

```1c
    ВЫБРАТЬ
    ВТ4.Номенклатура,
    ВТ4.Склад,
    0 КАК ПродажиПрошлыйГод,
    0 КАК ПродажиПозапрошлыйГод,
    ВТ4.Остатки КАК Остаток
    ПОМЕСТИТЬ ВТПродажиОстатки
    ИЗ
    ВТ4 КАК ВТ4
    ГДЕ
    ВТ4.Номенклатура В (Выбрать Т.Номенклатура ИЗ ВТ1 КАК Т ОБЪЕДИНИТЬ ВЫБРАТЬ Т.Номенклатура ИЗ ВТ2 КАК Т)
```

либо в результирующем запросе:

```1c
    Выбрать
    Номенклатура,
    Склад,
    Сумма(ПродажиПрошлыйГод) Как ПродажиПрошлыйГод,
    Сумма(ПродажиПозапрошлыйГод) Как ПродажиПозапрошлыйГод,
    Сумма(Остаток) как Остаток
    Из
    ВТПродажиОстатки
    СГРУППИРОВАТЬ ПО
    Номенклатура,
    Склад
    ИМЕЮЩИЕ
    Сумма(ПродажиПрошлыйГод) <> 0
    ИЛИ Сумма(ПродажиПозапрошлыйГод) <> 0
```

(10) Да, я заметил, что эти колонки суммируются и выводятся в одной, только не могу разобраться - почему так

Потому что

```1c
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    ......
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    ВТ1.Количество,
    ......
    ИЗ
    ВТ1 КАК ВТ1
```

а должно быть

```1c
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    0,
    ВТ1.Количество,
    ......
    ИЗ
    ВТ1 КАК ВТ1
```
---
Осталось разобраться только с тем, чтобы убрать те позиции номенклатуры, где продаж не было вовсе
По такой номенклатуре не нужны остатки или что?

У вас продажи за разные годы выводятся в одну колонку:

```1c
    .....
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    0,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    ВТ1.Количество,
    0,
    0
    ИЗ
    ВТ1 КАК ВТ1
```
---
Разобрался, сделал так:

```1c
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    0,
    ВТ2.КоличествоПред,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    ВТ1.Количество,
    0,
    0
    ИЗ
    ВТ1 КАК ВТ1
```
---
Пока что пробую через отбор, поставил отбор следующий (рис.1), исчезли остатки (рис.2). Задумка следующая: если есть продажи за первый ИЛИ за второй год, то выводить их по отбору. Как это могло повлиять на остатки - ума не приложу
---
использовать Объединение таблиц вместо Соединения не предлагать?
---
Объединение таблиц

А какие таблицы стоит объединить? Не до конца понимаю, как работает объединение

UPD: Попробовал сделать через объединение ВТ1 и ВТ2, он выводит все тоже самое. Опять пишет количество продаж у тех складов, с которых продажа не производилась. Если же я пытаюсь связать в итоговой таблице ВТ1 (из ВТ1+ВТ2) с ВТ4 по складам, то начинает считать всю сумму полностью. Тех же остатков показывает 114к, причем у каждой позиции номенклатуры.
---
зависит от того, в каком виде нужен результат запроса.

Объединять, ИМХО, нужно ВТ4 с ВТ2 и ВТ3:

```1c
    ВЫБРАТЬ
    Номенклатура,
    Склад,
    0 как продажиПрошлыйГод,
    0 как продажиПозапрошлыйГод,
    Остатки Как Остаток
    Поместить ВТПродажиОстатки
    Из
    ВТ4

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

    Выбрать
    Номенклатура,
    Склад,
    Количество,
    0,
    0
    ИЗ
    ВТ2

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

    ВЫБРАТЬ
    Номенклатура,
    Склад,
    0,
    КоличествоПред,
    0
    ИЗ
    ВТ3
    ;
    Выбрать
    Номенклатура,
    Склад,
    Сумма(ПродажиПрошлыйГод) Как ПродажиПрошлыйГод,
    Сумма(ПродажиПозапрошлыйГод) Как ПродажиПозапрошлыйГод,
    Сумма(Остаток) как Остаток
    Из
    ВТПродажиОстатки
    СГРУППИРОВАТЬ ПО
    Номенклатура,
    Склад
```
---
От таблицы складов я избавился, попробовал вставить ваш код в программу. Подправил ошибки, на которую ругался 1С. Почему-то не дает запустить, пишет, что не найдено поле "номенклатура", хотя везде она вроде указана..

На выходе я хочу получить в столбце номенклатуру с иерархией, внутри каждой позиции номенклатуры склад. В соседних столбцах информация о количестве продаж за позапрошлый год, в следующем - за прошлый и в третьем остатки на каждом складе у каждой номенклатуры

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПродажиПозапрошлый.Номенклатура,
    ПродажиПозапрошлый.ДокументПродажи.Склад КАК Склад,
    ПродажиПозапрошлый.КоличествоОборот КАК Количество,
    ПродажиПозапрошлый.ДокументПродажи.Ссылка
    ПОМЕСТИТЬ ВТ2
    ИЗ
    РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчетаНач, ГОД, -2), ДОБАВИТЬКДАТЕ(&ДатаОтчетаКон, ГОД, -2), , ) КАК ПродажиПозапрошлый
    ГДЕ
    ТИПЗНАЧЕНИЯ(ПродажиПозапрошлый.ДокументПродажи.Ссылка) = ТИП(Документ.РеализацияТоваровУслуг)
    ;

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

    СГРУППИРОВАТЬ ПО
    Остатки.Склад,
    Остатки.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ4.Номенклатура,
    ВТ4.Склад,
    0 КАК ПродажиПрошлыйГод,
    0 КАК ПродажиПозапрошлыйГод,
    ВТ4.Остатки КАК Остаток
    ПОМЕСТИТЬ ВТПродажиОстатки
    ИЗ
    ВТ4 КАК ВТ4

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

    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    0,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПродажиПозапрошлый.Номенклатура,
    ПродажиПозапрошлый.ДокументПродажи.Склад КАК Склад,
    ПродажиПозапрошлый.КоличествоОборот КАК Количество,
    ПродажиПозапрошлый.ДокументПродажи.Ссылка
    ПОМЕСТИТЬ ВТ2
    ИЗ
    РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчетаНач, ГОД, -2), ДОБАВИТЬКДАТЕ(&ДатаОтчетаКон, ГОД, -2), , ) КАК ПродажиПозапрошлый
    ГДЕ
    ТИПЗНАЧЕНИЯ(ПродажиПозапрошлый.ДокументПродажи.Ссылка) = ТИП(Документ.РеализацияТоваровУслуг)
    ;

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

    СГРУППИРОВАТЬ ПО
    Остатки.Склад,
    Остатки.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ4.Номенклатура КАК Номенклатура,
    ВТ4.Склад КАК Склад,
    0 КАК ПродажиПрошлыйГод,
    0 КАК ПродажиПозапрошлыйГод,
    ВТ4.Остатки КАК Остаток
    ИЗ
    ВТ4 КАК ВТ4

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

    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    0,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    ВТ1.Количество,
    0,
    0
    ИЗ
    ВТ1 КАК ВТ1
```
---
Осталось разобраться только с тем, чтобы убрать те позиции номенклатуры, где продаж не было вовсе
По такой номенклатуре не нужны остатки или что?

У вас продажи за разные годы выводятся в одну колонку:

```1c
    .....
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    0,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    ВТ1.Количество,
    0,
    0
    ИЗ
    ВТ1 КАК ВТ1
```
---
По такой номенклатуре не нужны остатки или что?

Именно, нужны остатки только той номенклатуры, что участвовала ранее в продажах

Да, я заметил, что эти колонки суммируются и выводятся в одной, только не могу разобраться - почему так
---
Разобрался, сделал так:

```1c
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    0,
    ВТ2.КоличествоПред,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    ВТ1.Количество,
    0,
    0
    ИЗ
    ВТ1 КАК ВТ1
```
---
Именно, нужны остатки только той номенклатуры, что участвовала ранее в продажах
Решается как минимум 2 способами:

Либо сделать

```1c
    ВЫБРАТЬ
    ВТ4.Номенклатура,
    ВТ4.Склад,
    0 КАК ПродажиПрошлыйГод,
    0 КАК ПродажиПозапрошлыйГод,
    ВТ4.Остатки КАК Остаток
    ПОМЕСТИТЬ ВТПродажиОстатки
    ИЗ
    ВТ4 КАК ВТ4
    ГДЕ
    ВТ4.Номенклатура В (Выбрать Т.Номенклатура ИЗ ВТ1 КАК Т ОБЪЕДИНИТЬ ВЫБРАТЬ Т.Номенклатура ИЗ ВТ2 КАК Т)
```

либо в результирующем запросе:

```1c
    Выбрать
    Номенклатура,
    Склад,
    Сумма(ПродажиПрошлыйГод) Как ПродажиПрошлыйГод,
    Сумма(ПродажиПозапрошлыйГод) Как ПродажиПозапрошлыйГод,
    Сумма(Остаток) как Остаток
    Из
    ВТПродажиОстатки
    СГРУППИРОВАТЬ ПО
    Номенклатура,
    Склад
    ИМЕЮЩИЕ
    Сумма(ПродажиПрошлыйГод) <> 0
    ИЛИ Сумма(ПродажиПозапрошлыйГод) <> 0
```

(10) Да, я заметил, что эти колонки суммируются и выводятся в одной, только не могу разобраться - почему так

Потому что

```1c
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    ......
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    ВТ1.Количество,
    ......
    ИЗ
    ВТ1 КАК ВТ1
```

а должно быть

```1c
    ВЫБРАТЬ
    ВТ2.Номенклатура,
    ВТ2.Склад,
    ВТ2.Количество,
    0
    ИЗ
    ВТ2 КАК ВТ2

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

    ВЫБРАТЬ
    ВТ1.Номенклатура,
    ВТ1.Склад,
    0,
    ВТ1.Количество,
    ......
    ИЗ
    ВТ1 КАК ВТ1
```
---
Пока что пробую через отбор, поставил отбор следующий (рис.1), исчезли остатки (рис.2). Задумка следующая: если есть продажи за первый ИЛИ за второй год, то выводить их по отбору. Как это могло повлиять на остатки - ума не приложу
---
Все, победил! Нужно было отборы из отчета перенести в поле группировки. Спасибо огромное за помощь
---
Добавил условие для соединения итоговой таблицы

```1c
    (ВТ3.Склады = ВТ1.Склад
    ИЛИ ВТ3.Склады = ВТ2.СкладПред
    ИЛИ ВТ3.Склады = ВТ4.Склад)
```

Теперь выводит все склады, по которым были продажи и на которых есть остатки. Остатки показывает верно по складам, но почему-то суммирует эти остатки и выводит для того склада, с которого была осуществлена продажа
---
Избавиться от этой аномалии получилось при помощи удаления таблицы со всеми складами и привязки напрямую таблиц продаж к таблице остатков. Теперь проблема в том, что у одного склада нет остатков по номенклатуре, но с него осуществлялись продажи. А он не выводится в отчете из-за этого, поэтому продажи указываются неверно - напротив складов, с которого по факту не продавалось

```1c
    ВЫБРАТЬ
    ПродажиПрошлый.Номенклатура КАК Номенклатура,
    ПродажиПрошлый.ДокументПродажи.Склад КАК Склад,
    СУММА(ПродажиПрошлый.КоличествоОборот) КАК Количество,
    ПродажиПрошлый.ДокументПродажи.Ссылка КАК ПродажиПрошлыйГод
    ПОМЕСТИТЬ ВТ1
    ИЗ
    РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчетаНач, ГОД, -1), ДОБАВИТЬКДАТЕ(&ДатаОтчетаКон, ГОД, -1), , ) КАК ПродажиПрошлый
    ГДЕ
    ТИПЗНАЧЕНИЯ(ПродажиПрошлый.ДокументПродажи.Ссылка) = ТИП(Документ.РеализацияТоваровУслуг)

    СГРУППИРОВАТЬ ПО
    ПродажиПрошлый.ДокументПродажи.Склад,
    ПродажиПрошлый.ДокументПродажи.Ссылка,
    ПродажиПрошлый.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПродажиПозапрошлый.Номенклатура КАК НоменклатураПред,
    ПродажиПозапрошлый.ДокументПродажи.Склад КАК СкладПред,
    СУММА(ПродажиПозапрошлый.КоличествоОборот) КАК КоличествоПред,
    ПродажиПозапрошлый.ДокументПродажи.Ссылка КАК ПродажиПозапрошлыйГод
    ПОМЕСТИТЬ ВТ2
    ИЗ
    РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаОтчетаНач, ГОД, -2), ДОБАВИТЬКДАТЕ(&ДатаОтчетаКон, ГОД, -2), , ) КАК ПродажиПозапрошлый
    ГДЕ
    ТИПЗНАЧЕНИЯ(ПродажиПозапрошлый.ДокументПродажи.Ссылка) = ТИП(Документ.РеализацияТоваровУслуг)

    СГРУППИРОВАТЬ ПО
    ПродажиПозапрошлый.ДокументПродажи.Склад,
    ПродажиПозапрошлый.ДокументПродажи.Ссылка,
    ПродажиПозапрошлый.Номенклатура
    ;

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

    СГРУППИРОВАТЬ ПО
    Остатки.Склад,
    Остатки.Номенклатура
    ;

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