Конфа самописная.
Есть регистры сведений Цены и Продажи
Надо запрос на каждый день продажи - получить цену
Продали 01.05 5 штук Цена от 30.04 = 10р
Продали 02.05 8 штук Цена 10 р
Продали 12.05 4 шт Цена от 03.05 = 12 р
Как то так, задача простая, сижу)))
Получается Цену надо брать на дату продажи.
Помогите пожалуйста.
ВЫБРАТЬ
МАКСИМУМ(Цены.Период) КАК Период,
Продажи.Период КАК Период1
ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
ИЗ
РегистрСведений.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО Продажи.Товар = Цены.Товар
И Продажи.Период >= Цены.Период
СГРУППИРОВАТЬ ПО
Продажи.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Продажи.Товар КАК Товар,
Продажи.Количество КАК Количество,
Продажи.Период КАК ДатаПродажи,
ВТ.Период КАК ДатаУстановкиЦены
ПОМЕСТИТЬ ВТ_СписокПродаж
ИЗ
ВТ_ДатыПоследнихЦен КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Продажи КАК Продажи
ПО ВТ.Период1 = Продажи.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_СписокПродаж.ДатаПродажи КАК ДатаПродажи,
ВТ_СписокПродаж.Товар КАК Товар,
ВТ_СписокПродаж.Количество КАК Количество,
Цены.Цена КАК Цена
ИЗ
ВТ_СписокПродаж КАК ВТ_СписокПродаж
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО ВТ_СписокПродаж.Товар = Цены.Товар
И ВТ_СписокПродаж.ДатаУстановкиЦены = Цены.Период
УПОРЯДОЧИТЬ ПО
ДатаПродажи
(2) Периодический в пределах дня,
У РС Цены Ресурс Цена
у РС Данные Ресурс Количество
Задача учебная, СКД сделала, по примеру
https:// /бесплатное/2020-11-25-poluchit-tsenu-tovara/
ВЫБРАТЬ
МАКСИМУМ(Цены.Период) КАК Период,
Продажи.Период КАК Период1
ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
ИЗ
РегистрСведений.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО Продажи.Товар = Цены.Товар
И Продажи.Период >= Цены.Период
СГРУППИРОВАТЬ ПО
Продажи.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Продажи.Товар КАК Товар,
Продажи.Количество КАК Количество,
Продажи.Период КАК ДатаПродажи,
ВТ.Период КАК ДатаУстановкиЦены
ПОМЕСТИТЬ ВТ_СписокПродаж
ИЗ
ВТ_ДатыПоследнихЦен КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Продажи КАК Продажи
ПО ВТ.Период1 = Продажи.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_СписокПродаж.ДатаПродажи КАК ДатаПродажи,
ВТ_СписокПродаж.Товар КАК Товар,
ВТ_СписокПродаж.Количество КАК Количество,
Цены.Цена КАК Цена
ИЗ
ВТ_СписокПродаж КАК ВТ_СписокПродаж
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО ВТ_СписокПродаж.Товар = Цены.Товар
И ВТ_СписокПродаж.ДатаУстановкиЦены = Цены.Период
УПОРЯДОЧИТЬ ПО
ДатаПродажи
(4) Неверно.
1. Цену продажи по заданию надо брать из регистра, а не путем расчета.
2. Расчетная цена не является ценой продажи в прикладном смысле. Так как продажа могла пройти со скидкой.
Запрос.Текст =
"ВЫБРАТЬ
| Данные.Период КАК Период,
| Данные.Количество КАК Количество
|ПОМЕСТИТЬ ДатыКоличество
|ИЗ
| РегистрСведений.Данные КАК Данные
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДатыКоличество.Период КАК Период,
| ДатыКоличество.Количество КАК Количество,
| Цены.Цена КАК Цена,
| МАКСИМУМ(Цены.Период) КАК Период1
|ПОМЕСТИТЬ МаксПериод
|ИЗ
| ДатыКоличество КАК ДатыКоличество
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
| ПО ДатыКоличество.Период >= Цены.Период
|
|СГРУППИРОВАТЬ ПО
| ДатыКоличество.Период,
| ДатыКоличество.Количество,
| Цены.Цена
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МаксПериод.Период КАК Период,
| МаксПериод.Количество КАК Количество,
| МаксПериод.Цена КАК Цена
|ИЗ
| МаксПериод КАК МаксПериод
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
| ПО МаксПериод.Период1 = Цены.Период";
ВЫБРАТЬ
МАКСИМУМ(Цены.Период) КАК Период,
Продажи.Регистратор КАК Регистратор
ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
ИЗ
РегистрСведений.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО Продажи.Товар = Цены.Товар
И Продажи.Период >= Цены.Период
СГРУППИРОВАТЬ ПО
Продажи.Регистратор
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Продажи.Товар КАК Товар,
Продажи.Количество КАК Количество,
Продажи.Период КАК ДатаПродажи,
ВТ.Регистратор КАК Регистратор,
ВТ.Период КАК ДатаУстановкиЦены
ПОМЕСТИТЬ ВТ_СписокПродаж
ИЗ
РегистрСведений.Продажи КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДатыПоследнихЦен КАК ВТ
ПО Продажи.Регистратор = ВТ.Регистратор
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_СписокПродаж.ДатаПродажи КАК ДатаПродажи,
ВТ_СписокПродаж.Товар КАК Товар,
ВТ_СписокПродаж.Количество КАК Количество,
Цены.Цена КАК Цена
ИЗ
ВТ_СписокПродаж КАК ВТ_СписокПродаж
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО ВТ_СписокПродаж.Товар = Цены.Товар
И ВТ_СписокПродаж.ДатаУстановкиЦены = Цены.Период
УПОРЯДОЧИТЬ ПО
ДатаПродажи
Вот у себя из отчета взял, но смысл должен быть понятен.
Мы берем таблицу дат продаж в разрезе номенклатуры, далее присоединяем к ней таблицу с периодами из регистра цен по условию дата цены меньше или равно дата продажи. Далее группируем по максимальному периоду и далее связываем еще раз с регистром цен по периоду. В итоге получается таблица в данном случае с номенклатурой, ценой, периодом цены, периодом продажи. Дальше ее можно связать с продажами по периоду продажи
ВЫБРАТЬ
Сводная.Номенклатура КАК Номенклатура,
МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
Сводная.День КАК День
ПОМЕСТИТЬ ВТ_ПериодыДляЦен
ИЗ
Сводная КАК Сводная
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ПО Сводная.Номенклатура = ЦеныНоменклатуры.Номенклатура
И Сводная.День >= ЦеныНоменклатуры.Период
И (ЦеныНоменклатуры.ТипЦен = &ТипЦен)
СГРУППИРОВАТЬ ПО
Сводная.Номенклатура,
Сводная.День
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
ЦеныНоменклатуры.Цена КАК Цена,
ВТ_ПериодыДляЦен.Период КАК Период,
ВТ_ПериодыДляЦен.День КАК День
ПОМЕСТИТЬ ВТ_ЦеныНоменулатуры
ИЗ
РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПериодыДляЦен КАК ВТ_ПериодыДляЦен
ПО ЦеныНоменклатуры.Период = ВТ_ПериодыДляЦен.Период
И ЦеныНоменклатуры.Номенклатура = ВТ_ПериодыДляЦен.Номенклатура
И (ЦеныНоменклатуры.ТипЦен = &ТипЦен)
Продажи - это продажи, не на каждый день продажи есть цена.
Что делать? Взять цену для продажи с максимальной датой, которая меньше или равна дате продажи.
Как?
1. Берем продажи и соединяем с ценами по условию, в котором дата цены меньше или равна дате продажи (на и номенклатуре, разумеется).
2. Группируем, получая максимальную дату цены для номенклатуры и даты продажи.
Итог - таблица с максимальной датой цены для даты продажи и номенклатуры.
Дальше соединяем с ценами для получения цены, разумеется по максимальной дате цены для этой продажи.