Здравствуйте.
Стоит задача сравнить закупочную цену с последней установленной ценой на этот товар. Пишу запрос:

```1c
    ВЫБРАТЬ
    УстановкаЦенНоменклатурыТовары.Номенклатура,
    УстановкаЦенНоменклатурыТовары.ТипЦен,
    УстановкаЦенНоменклатурыТовары.Цена
    ПОМЕСТИТЬ Док
    ИЗ
    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
    ГДЕ
    УстановкаЦенНоменклатурыТовары.Ссылка = &Ссылка
    И УстановкаЦенНоменклатурыТовары.ТипЦен = &ТипЦен
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена
    ПОМЕСТИТЬ Срез
    ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
    ЦеныНоменклатурыСрезПоследних.ТипЦен <> &ТипЦен
    И ЦеныНоменклатурыСрезПоследних.Регистратор <> &Ссылка
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Док.Номенклатура,
    Док.Цена,
    Срез.Цена КАК Цена1
    ИЗ
    Док КАК Док
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Срез КАК Срез
    ПО Док.Номенклатура = Срез.Номенклатура
    И Док.Цена > Срез.Цена
```

В принципе данные он мне выдает правильные, но в счет того, что типов цен несколько, одна и та же номенклатура в результате повторяется несколько раз (по количеству типов цен в регистре).
Не могу понять, как мне выбрать последнюю установленную цену на номенклатуру независимо от типов цен, при это тип цен закупки должен быть исключен.
---
Как получить именно последнюю запись по регистру - я не знаю. Но может вопрос можно решить по другому, например:

1) берём номенклатуру и дату установки цены (дата регистратора или период) - таблица "ВТ_ПериодыНом"
Запрос группируем по номенклатуре, а дату берём максимальную

2) берём Номенклатуру, дату установки цены (дату регистратора или период) и цену - таблица "ВТ_ЦеныНомПоПериодам"
тут группируем по номенклатуре и дате, а вот цену берём максимальную
т.е. если в этот конкретный период времени было несколько цен - возьмётся максимальная.

3) Соединяем таблицы "ВТ_ПериодыНом" и "ВТ_ЦеныНомПоПериодам" и получаем последнюю МАКСИМАЛЬНУЮ цену на дату.
Так же, подшаманив можно получить минимальную или среднюю...

Сразу скажу - запрос накидал в блокноте - возможны опечатки и ошибки.

```1c
    ВЫБРАТЬ
    УстановкаЦенНоменклатурыТовары.Номенклатура,
    УстановкаЦенНоменклатурыТовары.ТипЦен,
    УстановкаЦенНоменклатурыТовары.Цена
    ПОМЕСТИТЬ Док
    ИЗ
    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
    ГДЕ
    УстановкаЦенНоменклатурыТовары.Ссылка = &Ссылка
    И УстановкаЦенНоменклатурыТовары.ТипЦен = &ТипЦен
    ;

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

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

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

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

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

    ////////////////////////////////////////////////////////////­­////////////////////
    ВЫБРАТЬ
    Док.Номенклатура,
    Док.Цена,
    Срез.Цена КАК Цена1
    ИЗ
    Док КАК Док
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Срез КАК Срез
    ПО Док.Номенклатура = Срез.Номенклатура
    И Док.Цена > Срез.Цена
```

(1)
---
тогда никак. Одновременно может быть любое количество типов/видов цен. В итоге нужно ставить вопрос по другому!
---
Если бы я знал, как поставить вопрос по другому, я бы и не спрашивал. Пока в голову ничего не пришло.
---
можно но будут извращения в запросе.

А можно делать запрос не выбирая тип цен, тогда он выведет последнее без типа,
---
К сожалению так не получается. Несколько значений по одной номенклатуре выдает средний запрос (Срез). Убрать оттуда тип я не могу, так как мне нужно исключить закупочные цены (соответствующий тип цены).
---
Не получится. Цены номенклатуры устанавливаются с периодичностью день. Если на одну и ту же номенклатуру в 1 день установили 2 типа цен, то максимум по периоду вы не получите (у обоих типов цен будет период этот день установки). Возможно стоит воспользоваться отчетом Прайс с отбором.
---
В принципе мне без разницы. Мне сказали, что в один день на одну и ту же номенклатуру цены не устанавливаются. Если их установят - это уже не мои проблемы.
Прайс цен мне не подходит. Мне необходимо встроить механизм в документ установки цен, который будет сверять цены документа и ранее установленные по некоторым параметрам.
---
Как получить именно последнюю запись по регистру - я не знаю. Но может вопрос можно решить по другому, например:

1) берём номенклатуру и дату установки цены (дата регистратора или период) - таблица "ВТ_ПериодыНом"
Запрос группируем по номенклатуре, а дату берём максимальную

2) берём Номенклатуру, дату установки цены (дату регистратора или период) и цену - таблица "ВТ_ЦеныНомПоПериодам"
тут группируем по номенклатуре и дате, а вот цену берём максимальную
т.е. если в этот конкретный период времени было несколько цен - возьмётся максимальная.

3) Соединяем таблицы "ВТ_ПериодыНом" и "ВТ_ЦеныНомПоПериодам" и получаем последнюю МАКСИМАЛЬНУЮ цену на дату.
Так же, подшаманив можно получить минимальную или среднюю...

Сразу скажу - запрос накидал в блокноте - возможны опечатки и ошибки.

```1c
    ВЫБРАТЬ
    УстановкаЦенНоменклатурыТовары.Номенклатура,
    УстановкаЦенНоменклатурыТовары.ТипЦен,
    УстановкаЦенНоменклатурыТовары.Цена
    ПОМЕСТИТЬ Док
    ИЗ
    Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
    ГДЕ
    УстановкаЦенНоменклатурыТовары.Ссылка = &Ссылка
    И УстановкаЦенНоменклатурыТовары.ТипЦен = &ТипЦен
    ;

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

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

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

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

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

    ////////////////////////////////////////////////////////////­­////////////////////
    ВЫБРАТЬ
    Док.Номенклатура,
    Док.Цена,
    Срез.Цена КАК Цена1
    ИЗ
    Док КАК Док
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Срез КАК Срез
    ПО Док.Номенклатура = Срез.Номенклатура
    И Док.Цена > Срез.Цена
```

(1)
---
Спасибо. Но возник вопрос. Я понимаю, что это общая рекомендация и меня бы это устроило. Но я не совсем понял, что это за структура:

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

Консоль ругается :Синтаксическая ошибка " ВЫБРАТЬ" (<<?>> Выбрать различные Док.номенклатура ИЗ Док)
Я даже не придумал, как загуглить, чтобы посмотреть, как правильно строить такую структуру, поэтому не могу понять, что именно не нравится консоли
---
Тут происходит следующее (я распишу полностью, чтоб была понятна вся конструкция):

1) Первым запросом в цепочке, вы создаёте виртуальную таблицу "Док", в которой есть поле "Номенклатура"

2).."СрезПоследних" - это виртуальная таблица регистра сведений. Если отдельно рассмотреть его синтаксис:

РегистрыСведений.ИмяРегистраСведений.СрезПоследних(<КонецПериода>, <Отбор>), т.е.
<КонецПериода> - дата среза виртуальной таблицы,
<Отбор> - условия отбора

3) Что такое "Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Док.Номенклатура ИЗ Док)"

Попробую записать это словами: с помощью запроса в виртуальную таблицу "Док", полученную в первом запросе (см. пункт 1), получаем массив номенклатуры, по которой необходимо получить цены. И этот полученный массив ставим условием на отбор номенклатуры из регистра.

Если есть ещё вопросы - задавайте.
---
Спасибо. Все понятно. С ошибкой разобрался. Во втором запросе нужно было добавить: Номенклатура В в отбор.
---
А почему берете документ, почему не взять регистр сведений и взять срез последних без повторяющихся без типа цены
---
Мне нужно взять закупочную цену по каждой номенклатуре из текущего документа и сравнить с последней установленной ценой не из этого документа.
Поэтому посчитал, что не принципиально, откуда вытягивать цены из текущего документа или из регистра с указанием документа.