Есть задание - отчет остатков по складу в количественном и суммовом виде.
Написал 2 варианта запроса
Первый:

```1c
    ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
    ТоварыНаСкладахОстатки.Товар.Наименование КАК ТоварНаименование,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
    ВЫРАЗИТЬ(ЦеныТоваровСрезПоследних.Цена * ТоварыНаСкладахОстатки.КоличествоОстаток КАК ЧИСЛО(15, 2)) КАК Сумма
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТоваров.СрезПоследних КАК ЦеныТоваровСрезПоследних
    ПО ТоварыНаСкладахОстатки.Товар.Наименование = ЦеныТоваровСрезПоследних.Товар.Наименование
    ГДЕ
    ТоварыНаСкладахОстатки.Склад = &Склад
    И ЦеныТоваровСрезПоследних.ТипЦены = &ТипЦены
```

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

И написал второй запрос с параметрами виртуальной таблицы,без Где

```1c
    ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
    ТоварыНаСкладахОстатки.Товар.Наименование КАК ТоварНаименование,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток,
    ВЫРАЗИТЬ(ЦеныТоваровСрезПоследних.Цена * ТоварыНаСкладахОстатки.КоличествоОстаток КАК ЧИСЛО(15, 2)) КАК Сумма
    ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТоваров.СрезПоследних(, ТипЦены = &ТипЦены) КАК ЦеныТоваровСрезПоследних
    ПО ТоварыНаСкладахОстатки.Товар.Наименование = ЦеныТоваровСрезПоследних.Товар.Наименование
```

его работа заметно отличается от работы в первом случае. Первый мне выводил только те товары которые соответствовали типу цены, а второй выводит абсолютно все товары на складе,даже с другим типом...
---
Потому что у вас полное соединение. В первом запросе оно "преобразуется" к "внутреннему" из-за запроса в секции ГДЕ, а второй сначала отбирает все остатки по складу, потом все цены с типом, потом соединяет и соединяет даже то, что не нужно =)

https://its.1c.ru/db/metod8dev/content/2594/hdoc
---
Что за конфигурация? В УТ 10.3 есть такой отчет)
Вам что нужно видеть?
---
Я делаю в чистой конфигурации
---
Написал 2 варианта запроса
И оба не верные. =)
---
Потому что у вас полное соединение. В первом запросе оно "преобразуется" к "внутреннему" из-за запроса в секции ГДЕ, а второй сначала отбирает все остатки по складу, потом все цены с типом, потом соединяет и соединяет даже то, что не нужно =)

https://its.1c.ru/db/metod8dev/content/2594/hdoc
---
ну а первый запрос правильный на ваш взгляд?
---
на вскидку не скажу, надо подумать =) однозначно не стоит использовать полное соединение.
Вы, кстати, тот парень из "горячего" поста про собеседования? это одно из заданий, да? =)
---
ну да... просто я написал его и вроде тестировал, оно определяет самую свежую цену на товар, по заданию типа цены(оптовая или розничная) и по складу... но вот не знаю...
---
дождитесь, когда комментатор Alex_CheST (8) отредактирует свой запрос, мне нравится ход его мысли =) Он быстрее вам из готового кода сообразит, мне же придется в блокноте набирать - это долго
---
Скажите,пожалуйста,а с чем связано что вы говорите что не нужно использовать полное соединение?
---
Это очень замедляет работу системы и при этом очень редко нужно для решения задач. При написании запросов вы должны стремиться к тому, чтобы получать как можно меньше данных.
---
Вообще, если вы только начинаете свой путь в программировании, советую почитать Хрусталеву Язык запросов, я сама с этого начинала год назад =)
---
Мне кажется должно быть что-то такое

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ.Номенклатура,
    ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК Количество,
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток * ВТ.Цена КАК Сумма
    ИЗ
    ВТ КАК ВТ
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(
    ,
    (Номенклатура, ХарактеристикаНоменклатуры) В
    (ВЫБРАТЬ
    ВТ.Номенклатура,
    ВТ.ХарактеристикаНоменклатуры
    ИЗ
    ВТ КАК ВТ)) КАК ТоварыВРезервеНаСкладахОстатки
    ПО ВТ.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    И ВТ.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладахОстатки.ХарактеристикаНоменклатуры
```
---
То есть только остатки по той номенклатуре, по которой задана цена определенного типа?
Но в чем смысл?
У вас есть остатки на складе номенклатуры, но не выводить их, только потому что кто-то не ввел для них цену?
---
Тут все зависит от конкретной задачи для чего делаем отчет. До конца непонятно что именно нужно вывести автору. Какие разрезы нужны. Нужно ли то что без цен. Я написал как посмотреть по конкретному типу цены , какой количественный и суммовой показатель по всей номенклатуре. И в приоритете именно сумма. Естественно что тип цен должен быть проставлен. Думаю глядя на этот запрос можно понять идею и переделать под себя
---
отчет показывает остатки по выбранному складу в количественном и суммовом виде(по выбранному Типу Цен).
---
поменяйте местами тогда таблицы. Выбирайте все остатки а из цен только то что совпадает по номенклатуре.