"ВЫБРАТЬ
| ТоварыНаСкладах.Регистратор КАК Регистратор,
| ТоварыНаСкладах.Количество КАК Количество,
| ТоварыНаСкладах.ВидДвижения КАК ВидДвижения,
| ТоварыНаСкладах.Номенклатура КАК Номенклатура,
| ТоварыНаСкладах.Период КАК Период,
| ЦеныНоменклатуры.Цена КАК ЗакупочнаяЦена,
| ВЫБОР
| КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА МИНИМУМ(ЦеныНоменклатуры.Период)
| ИНАЧЕ МАКСИМУМ(ЦеныНоменклатуры.Период)
| КОНЕЦ КАК ПериодЦен
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
| ПО ТоварыНаСкладах.Номенклатура = ЦеныНоменклатуры.Номенклатура
| И (ВЫБОР
| КОГДА ТоварыНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА ТоварыНаСкладах.Период <= ЦеныНоменклатуры.Период
| ИНАЧЕ ТоварыНаСкладах.Период >= ЦеныНоменклатуры.Период
| КОНЕЦ)
|ГДЕ
| ТоварыНаСкладах.Активность = &ИСТИНА
| И ТоварыНаСкладах.Склад = &Склад
| И ТоварыНаСкладах.Период МЕЖДУ &ПериодС И &ПериодПо
| И ЦеныНоменклатуры.ВидЦены = &ВидЦеныЗакупки
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладах.Регистратор,
| ТоварыНаСкладах.Количество,
| ТоварыНаСкладах.ВидДвижения,
| ЦеныНоменклатуры.Цена,
| ТоварыНаСкладах.Период,
| ТоварыНаСкладах.Номенклатура";
Показать
Суть в том что пытаюсь получить наиболее актуальные цены на дату документа. Естественно т.к. движение "Приход" в основном фрмируют документы поступления то актуальная цена будет назначена установкой цен с временем позже прихода и в плане движения с типом расход будет действовать обратная логика.
В итоге получаю:
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
Взята самая максимальная дата установки цен а не ближайшая к документу. А дублирующихся записей вообще нет.
В общем учитывая что данные будут браться за большие периоды и тот запрос который я привел является всего-лишь частью более объемного запроса я искал способы избежать вложенных запросов для увеличения производительности.
В итоге было решено соорудить нечто на примере описанном ТУТ.
Хотя должен сказать что вариант педставленный buganov тоже возможно реализовать
Попробуйте сначала выбрать максимально близкие к документу периоды цен, потом по эти периодам получите актуальные для документа
Грубо говоря так:
Выбрать ВложенныйЗапрос.(ТоварыНаСкладах.*),
ЦеныНоменклатуры.Цена,
ВложенныйЗапрос.ПериодЦены
Из (
Выбрать ТоварыНаСкладах.*,
Максимум(Цены.Период
Из Регистр.ТНС Как ТоварыНаСкладах
Левое Соединение РегистрЦен Как Цены
По ( измерения ) И ТНС.Дата >= Цены.Период Сгруппировать
) Как ВложенныйЗапрос
Левое соединение РегистрЦен
По (Измерения ) И ПериодЦены = РегистрЦен.Период
В общем учитывая что данные будут браться за большие периоды и тот запрос который я привел является всего-лишь частью более объемного запроса я искал способы избежать вложенных запросов для увеличения производительности.
В итоге было решено соорудить нечто на примере описанном ТУТ.
Хотя должен сказать что вариант педставленный buganov тоже возможно реализовать