Выборка движений по складу в актуальных ценах

1. bolotnikofff 07.12.18 01:24 Сейчас в теме
Розница, редакция 2.2 (2.2.6.33)
1С:Предприятие 8.3 (8.3.13.1513)

Пытаюсь выполнить такой запрос

		"ВЫБРАТЬ
		|	ТоварыНаСкладах.Регистратор КАК Регистратор,
		|	ТоварыНаСкладах.Количество КАК Количество,
		|	ТоварыНаСкладах.ВидДвижения КАК ВидДвижения,
		|	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
		|	ТоварыНаСкладах.Период КАК Период,
		|	ЦеныНоменклатуры.Цена КАК ЗакупочнаяЦена,
		|	ВЫБОР
		|		КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|			ТОГДА МИНИМУМ(ЦеныНоменклатуры.Период)
		|		ИНАЧЕ МАКСИМУМ(ЦеныНоменклатуры.Период)
		|	КОНЕЦ КАК ПериодЦен
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		|		ПО ТоварыНаСкладах.Номенклатура = ЦеныНоменклатуры.Номенклатура
		|			И (ВЫБОР
		|				КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|					ТОГДА ТоварыНаСкладах.Период <= ЦеныНоменклатуры.Период
		|				ИНАЧЕ ТоварыНаСкладах.Период >= ЦеныНоменклатуры.Период
		|			КОНЕЦ)
		|ГДЕ
		|	ТоварыНаСкладах.Активность = &ИСТИНА
		|	И ТоварыНаСкладах.Склад = &Склад
		|	И ТоварыНаСкладах.Период МЕЖДУ &ПериодС И &ПериодПо
		|	И ЦеныНоменклатуры.ВидЦены = &ВидЦеныЗакупки
		|
		|СГРУППИРОВАТЬ ПО
		|	ТоварыНаСкладах.Регистратор,
		|	ТоварыНаСкладах.Количество,
		|	ТоварыНаСкладах.ВидДвижения,
		|	ЦеныНоменклатуры.Цена,
		|	ТоварыНаСкладах.Период,
		|	ТоварыНаСкладах.Номенклатура";
Показать


Суть в том что пытаюсь получить наиболее актуальные цены на дату документа. Естественно т.к. движение "Приход" в основном фрмируют документы поступления то актуальная цена будет назначена установкой цен с временем позже прихода и в плане движения с типом расход будет действовать обратная логика.

В итоге получаю:

21.07.2017 12:32:44 35 01.09.2018 20:56:04 КАРТОФЕЛЬ (Соц цена) Расход 13,404 Отчет о розничных продажах 0000-000243 от 01.09.2018 20:56:04
21.07.2017 12:32:44 35 01.09.2018 20:56:04 КАРТОФЕЛЬ (Соц цена) Расход 5,01 Отчет о розничных продажах 0000-000243 от 01.09.2018 20:56:04
21.07.2017 12:32:44 35 01.09.2018 20:56:04 КАРТОФЕЛЬ (Соц цена) Расход 19,92 Отчет о розничных продажах 0000-000243 от 01.09.2018 20:56:04
21.07.2017 13:44:30 36 01.09.2018 20:56:04 КАРТОФЕЛЬ (Соц цена) Расход 5,01 Отчет о розничных продажах 0000-000243 от 01.09.2018 20:56:04
21.07.2017 13:44:30 36 01.09.2018 20:56:04 КАРТОФЕЛЬ (Соц цена) Расход 13,404 Отчет о розничных продажах 0000-000243 от 01.09.2018 20:56:04
21.07.2017 13:44:30 36 01.09.2018 20:56:04 КАРТОФЕЛЬ (Соц цена) Расход 19,92 Отчет о розничных продажах 0000-000243 от 01.09.2018 20:56:04

Это по расходу, понятно что строчки три потому что в документе две разные скидки и обычная цена.
но непонятно почему взяты две цены а не та что позже по времени (двоится только если было две установки цен на одну дату) и более всего не понятно почему именно 21.07.2017 если есть более свежие установки до 01.09.2018 допустим 24.08.2018.
С приходом тоже тупняк
02.10.2018 10:58:59 90 01.09.2018 12:09:46 ЯЙЦО ДОМАШНЕЕ ОТБОРНОЕ+КОРОБКА (Толстоногов) Приход 9 Поступление товаров 0000-002399 от 01.09.2018 12:09:46
Взята самая максимальная дата установки цен а не ближайшая к документу. А дублирующихся записей вообще нет.

Чего я не понимаю?
По теме из базы знаний
Найденные решения
3. bolotnikofff 09.12.18 10:27 Сейчас в теме
В общем учитывая что данные будут браться за большие периоды и тот запрос который я привел является всего-лишь частью более объемного запроса я искал способы избежать вложенных запросов для увеличения производительности.
В итоге было решено соорудить нечто на примере описанном ТУТ.
Хотя должен сказать что вариант педставленный buganov тоже возможно реализовать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. buganov 200 07.12.18 05:08 Сейчас в теме
Попробуйте сначала выбрать максимально близкие к документу периоды цен, потом по эти периодам получите актуальные для документа
Грубо говоря так:

Выбрать ВложенныйЗапрос.(ТоварыНаСкладах.*),
ЦеныНоменклатуры.Цена,
ВложенныйЗапрос.ПериодЦены
Из (
Выбрать ТоварыНаСкладах.*,
Максимум(Цены.Период
Из Регистр.ТНС Как ТоварыНаСкладах
Левое Соединение РегистрЦен Как Цены
По ( измерения ) И ТНС.Дата >= Цены.Период
Сгруппировать
) Как ВложенныйЗапрос
Левое соединение РегистрЦен
По (Измерения ) И ПериодЦены = РегистрЦен.Период


Что то подобное
3. bolotnikofff 09.12.18 10:27 Сейчас в теме
В общем учитывая что данные будут браться за большие периоды и тот запрос который я привел является всего-лишь частью более объемного запроса я искал способы избежать вложенных запросов для увеличения производительности.
В итоге было решено соорудить нечто на примере описанном ТУТ.
Хотя должен сказать что вариант педставленный buganov тоже возможно реализовать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот