Всем привет, делаю запрос, нужно для каждой позиции номенклатуры из документа Заказ Покупателя вывести Код,Ссылку на номенклатуру(Номенклаура),Количество, Цена закупа, цена продажи и упущенную прибыль(Количество * (ЦенаЗакупа - ЦенаПродажи)) с условием, что Упущенная прибыль >0. Проблема заключается в том, что при обращении к регистру Цены.СрезПоследних он выводит порядка 20 записей для каждой номенклатуры. Подскажите, пожалуйста, как сделать так, чтобы выводилась только 1 запись.
вот мой Запрос

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

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

```1c
    ВЫБРАТЬ
    ВТ_Цены.Номенклатура КАК Номенклатура,
    ВТ_Цены.Цена КАК Цена,
    ВТ_Цены.ТипЦен КАК ТипЦен,
    ВТ_Цены.Период КАК Период
    ПОМЕСТИТЬ ВТ_ПоследниеЦены
    ИЗ
    ВТ_Цены КАК ВТ_Цены
    ПРАВОЕ СОЕДИНЕНИЕ ВТ_ДатыПоследнихЦен КАК ВТ_ДатыПоследнихЦен
    ПО ВТ_Цены.Номенклатура = ВТ_ДатыПоследнихЦен.Номенклатура
    И ВТ_Цены.Период = ВТ_ДатыПоследнихЦен.Период
    ГДЕ
    ВТ_Цены.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦен.ОсновнойТипЦенЗакупки)
```
---
Включить отбор по виду цены, например.

```1c
    .....
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&КонецПериода, ВидЦены = &ВидЦены) КАК ЦеныСрезПоследних
    ....
```
---
Пробовал, там много измерений по типу контрагента, подразделения и тд. Мне на это всё равно, мне нужно, чтобы из регистра просто выводилась последняя запись.
(2)
---
В таком случае вам не подойдет типовой СрезПоследних, нужно выполнять срез "вручную"

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

И уже полученную ВТ соединять с данными заказа покупателя
---
Я тут сидел и придумал такую схему.

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

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

    СГРУППИРОВАТЬ ПО
    ВТ_Цены.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТ_Цены.Номенклатура КАК Номенклатура,
    ВТ_Цены.Цена КАК Цена,
    ВТ_Цены.ТипЦен КАК ТипЦен,
    ВТ_Цены.Период КАК Период
    ПОМЕСТИТЬ ВТ_ПоследниеЦены
    ИЗ
    ВТ_Цены КАК ВТ_Цены
    ПРАВОЕ СОЕДИНЕНИЕ ВТ_ДатыПоследнихЦен КАК ВТ_ДатыПоследнихЦен
    ПО ВТ_Цены.Номенклатура = ВТ_ДатыПоследнихЦен.Номенклатура
    И ВТ_Цены.Период = ВТ_ДатыПоследнихЦен.Период
    ГДЕ
    ВТ_Цены.ТипЦен = ЗНАЧЕНИЕ(Справочник.ТипыЦен.ОсновнойТипЦенЗакупки)
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЗаказПокупателяТовары.Ссылка КАК Ссылка,
    ЗаказПокупателяТовары.Номенклатура.Код КАК НоменклатураКод,
    ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
    ЗаказПокупателяТовары.Количество КАК Количество,
    ВТ_ПоследниеЦены.Цена КАК ЦенаЗакупочная,
    ЗаказПокупателяТовары.Цена КАК ЦенаПродажи,
    ЗаказПокупателяТовары.Количество * (ВТ_ПоследниеЦены.Цена - ЗаказПокупателяТовары.Цена) КАК УпущеннаяВыгода
    ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПоследниеЦены КАК ВТ_ПоследниеЦены
    ПО ЗаказПокупателяТовары.Номенклатура = ВТ_ПоследниеЦены.Номенклатура
    ГДЕ
    ЗаказПокупателяТовары.Ссылка.Дата <= &КонецПериода
    И ЗаказПокупателяТовары.Ссылка.Дата >= &НачалоПериода
    И НЕ ЗаказПокупателяТовары.Цена = 0
    И ЗаказПокупателяТовары.Количество * (ВТ_ПоследниеЦены.Цена - ЗаказПокупателяТовары.Цена) > 0
```

Но есть проблема, в один и тот же момент времени по некоторым номенклатурам есть 2 записи. И получается так, что в итоговом запросе строки дублируются
---
Но есть проблема, в один и тот же момент времени по некоторым номенклатурам есть 2 записи.

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

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