Добрый день.
Подскажите пож-та. как можно в запросе выбрать историю цен, но не просто вытянуть ту цену которая была установлена документом "Установка цен номенклатуры", но и предыдущую цену.
т.е. нужно что то в виде
товар, тип цены, цена текущая, цена предыдущая
итак если у нас было за выбранный период 10 документов установок цен номенклатуры по товару, то мы должны вывести все 10 строк с текущей ценой и ее предыдущей ценой.
Пример
Товар1 Типцен1 20 18
Товар1 типцен1 18 19
Товар1 типцен1 19 22
и т.д.

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

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

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЦеныНоменклатуры.Период КАК ДатаПредыдущийЦены,
    вт_ДляРасчетаПредыдущейЦены.Номенклатура,
    вт_ДляРасчетаПредыдущейЦены.ВидЦены,
    ЦеныНоменклатуры.Цена КАК ПредыдущаяЦена
    ПОМЕСТИТЬ вт_ПредыдущиеЦены
    ИЗ
    вт_ДляРасчетаПредыдущейЦены КАК вт_ДляРасчетаПредыдущейЦены
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ПО вт_ДляРасчетаПредыдущейЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура
    И вт_ДляРасчетаПредыдущейЦены.ВидЦены = ЦеныНоменклатуры.ВидЦены
    И вт_ДляРасчетаПредыдущейЦены.КрайняяДатаКАктуальной = ЦеныНоменклатуры.Период
    ;

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

Сначала получаете текущие цены в разрезе товара и типа цены. Помещаете в ВТ.
Склеиваете эту ВТ с регистром цен по товару и виду цены, с условием, что дата меньше, чем дата текущей цены. Делаете группировку и берете максимум по дате.

Пример, что на выходе:
Товар1 Вид1 10 06.04.2001
Товар2 Вид1 5 08.06.2001

Помещаете в ВТ, и склеиваете еще раз (левым соединением), только уже по товару, виду цены, и периоду.

Товар1 Вид1 10 12
Товар2 Вид1 5 7
---
Сначала нужно высчитать, какая дата ближайшая к дате текущей цены. Так сказать, срез последних, но для меньшей даты.
Зная предыдущую дату, вы уже можете соединить две таблицы и из второй взять цену. Она-то и будет ближайшей к текущей.
---
Срез последних на каждую дату в запросе 1С
---
так выбирается только текущая дата цены и предыдущая дата цены. а таких дат за период может быть много

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

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

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

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВТДатыПоследнихПереоценок.Номенклатура,
    ВТДатыПоследнихПереоценок.ТипЦен,
    ВТДатыПоследнихПереоценок.ДатаПереоценки ДатаПереоценкиТек,
    ВТДатыПредПереоценки.ДатаПереоценки КАК ДатаПереоценкиПред
    ИЗ
    ВТДатыПоследнихПереоценок КАК ВТДатыПоследнихПереоценок
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДатыПредПереоценки КАК ВТДатыПредПереоценки
    ПО ВТДатыПоследнихПереоценок.Номенклатура = ВТДатыПредПереоценки.Номенклатура
    И ВТДатыПоследнихПереоценок.ТипЦен = ВТДатыПредПереоценки.ТипЦен
```
---
Может быть я вас не правильно понял?
Вам требуется вывести текущую цену, и цену, которая была предыдущей или же в одну строку вы хотите всю историю по цене вывести?
---
я хочу вывести так
Товар, цена новая, цена старая, дата переоценки
пример
товар1, 25руб, 22руб, 01/08/18
товар1, 22руб, 28руб 07/07/18
товар1, 28руб, 25руб 02/07/18
---
тогда из регистра выбираете всю историю цены и в одну строку выводите по две строки данных
---
```1c
    ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Период КАК ДатаАктуальнойЦены,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.ВидЦены,
    ЦеныНоменклатурыСрезПоследних.Цена
    ПОМЕСТИТЬ вт_ПериодАктуальныхЦен
    ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
    ЦеныНоменклатурыСрезПоследних.Цена <> 0
    ;

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

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

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ЦеныНоменклатуры.Период КАК ДатаПредыдущийЦены,
    вт_ДляРасчетаПредыдущейЦены.Номенклатура,
    вт_ДляРасчетаПредыдущейЦены.ВидЦены,
    ЦеныНоменклатуры.Цена КАК ПредыдущаяЦена
    ПОМЕСТИТЬ вт_ПредыдущиеЦены
    ИЗ
    вт_ДляРасчетаПредыдущейЦены КАК вт_ДляРасчетаПредыдущейЦены
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ПО вт_ДляРасчетаПредыдущейЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура
    И вт_ДляРасчетаПредыдущейЦены.ВидЦены = ЦеныНоменклатуры.ВидЦены
    И вт_ДляРасчетаПредыдущейЦены.КрайняяДатаКАктуальной = ЦеныНоменклатуры.Период
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    вт_ПериодАктуальныхЦен.Номенклатура,
    вт_ПериодАктуальныхЦен.ВидЦены,
    вт_ПериодАктуальныхЦен.Цена КАК АктуальнаяЦена,
    вт_ПредыдущиеЦены.ПредыдущаяЦена
    ИЗ
    вт_ПериодАктуальныхЦен КАК вт_ПериодАктуальныхЦен
    ЛЕВОЕ СОЕДИНЕНИЕ вт_ПредыдущиеЦены КАК вт_ПредыдущиеЦены
    ПО вт_ПериодАктуальныхЦен.Номенклатура = вт_ПредыдущиеЦены.Номенклатура
    И вт_ПериодАктуальныхЦен.ВидЦены = вт_ПредыдущиеЦены.ВидЦены
    ГДЕ
    вт_ПредыдущиеЦены.ПредыдущаяЦена <> 0
```
---
(16) огромное спасибо, буду пробовать.
---
Только я тут условия накладывал, так как пробовал на демо-базе, там много было записей с пустой ценой
---
Пример еще один, постараюсь детальней описать
Итак
Есть номенклатура Товар1 и созданные по ней документы:
Установка цен номенклатуры №20 от 12.01.18 - цена для Товар 1 - 45 руб
Установка цен номенклатуры №50 от 05.05.18 - цена для Товар 1 - 40 руб
Установка цен номенклатуры №78 от 05.07.18 - цена для Товар 1 - 41 руб
Установка цен номенклатуры №90 от 01.08.18 - цена для Товар 1 - 20 руб
Установка цен номенклатуры №95 от 05.08.18 - цена для Товар 1 - 22 руб
Установка цен номенклатуры №97 от 06.08.18 - цена для Товар 1 - 25 руб
Установка цен номенклатуры №98 от 07.08.18 - цена для Товар 1 - 30 руб

Пользователь выбирает данные за 01.08.18-08.08.18 и получает следующие документы
Установка цен номенклатуры №90 от 01.08.18 - цена для Товар 1 - 20 руб
Установка цен номенклатуры №95 от 05.08.18 - цена для Товар 1 - 22 руб
Установка цен номенклатуры №97 от 06.08.18 - цена для Товар 1 - 25 руб
Установка цен номенклатуры №98 от 07.08.18 - цена для Товар 1 - 30 руб

Теперь по этим данным необходимо вывести отчет в таком формате:
Товар Цена новая Цена старая Дата переоценки
Товар1 30 25 07.08.18
Товар1 25 22 06.08.18
Товар1 22 20 05.08.18
Товар1 20 41 01.08.18
(для последней строки он взял предыдущую цену которая даже не входит в выбранный период)
---
Запрос, который я предоставил выше, немного адаптировать. Что бы он в рамках периода брал ближайшую дату к актуальной.