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