Конфа самописная.
Есть регистры сведений Цены и Продажи
Надо запрос на каждый день продажи - получить цену
Продали 01.05 5 штук Цена от 30.04 = 10р
Продали 02.05 8 штук Цена 10 р
Продали 12.05 4 шт Цена от 03.05 = 12 р
Как то так, задача простая, сижу)))
Получается Цену надо брать на дату продажи.
Помогите пожалуйста.
---
Для независимого регистра будет такой запрос

```1c
    ВЫБРАТЬ
    МАКСИМУМ(Цены.Период) КАК Период,
    Продажи.Период КАК Период1
    ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
    ИЗ
    РегистрСведений.Продажи КАК Продажи
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
    ПО Продажи.Товар = Цены.Товар
    И Продажи.Период >= Цены.Период

    СГРУППИРОВАТЬ ПО
    Продажи.Период
    ;

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

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

    УПОРЯДОЧИТЬ ПО
    ДатаПродажи
```
---
Структуру и тип регистров покажите
(1) Получается Цену надо брать на дату продажи. - получатся что да.
---
Периодический в пределах дня,
У РС Цены Ресурс Цена
у РС Данные Ресурс Количество
Задача учебная, СКД сделала, по примеру
https:// /бесплатное/2020-11-25-poluchit-tsenu-tovara/

Теперь именно запросом надо
---
Регистр сведений Продажи независимый?
---
периодический, независимый, это все условие
---
Для независимого регистра будет такой запрос

```1c
    ВЫБРАТЬ
    МАКСИМУМ(Цены.Период) КАК Период,
    Продажи.Период КАК Период1
    ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
    ИЗ
    РегистрСведений.Продажи КАК Продажи
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
    ПО Продажи.Товар = Цены.Товар
    И Продажи.Период >= Цены.Период

    СГРУППИРОВАТЬ ПО
    Продажи.Период
    ;

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

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

    УПОРЯДОЧИТЬ ПО
    ДатаПродажи
```
---
как сложно.
но кажется помогло
ща.
---
https://skr.sh/s84VDOdFDwM

и
https://skr.sh/s84brgroN2K
---
Странный у вас конечно регистр Продажи. Товара нет в измерениях. Нет подчинения Регистратору
---
Похоже на срез последних на каждую дату. Эту публикацию смотрели https://infostart.ru/1c/articles/77568/ ?
---
пыталась, она у меня без картинок
---
каких картинок?
---
https://skr.sh/i/150521/KOl6lu2w.jpg?download=1&name=Скриншот%2014-05-2021%2013:45:03.jpg
---
там код важен, а не картинки )
---
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПродажиОбороты.ПериодДень КАК День,
    | ПродажиОбороты.Номенклатура КАК Номенклатура,
    | ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
    | ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК Цена
    |ИЗ
    | РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Авто, ) КАК ПродажиОбороты
    |ИТОГИ
    | СУММА(КоличествоОборот)
    |ПО
    | День ПЕРИОДАМИ(ДЕНЬ, &ДатаНачала, &ДатаОкончания),
    | Номенклатура,
    | Цена";

    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДень = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаДень.Следующий() Цикл
    // Вставить обработку выборки ВыборкаДень

    ВыборкаНоменклатура = ВыборкаДень.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаНоменклатура.Следующий() Цикл
    // Вставить обработку выборки ВыборкаНоменклатура

    ВыборкаЦена = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаЦена.Следующий() Цикл
    Номенклатура = ВыборкаЦена.Номенклатура;
    Цена = ВыборкаЦена.Цена;
    Количество = ВыборкаЦена.Количество;

    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
```
---
Неверно.
1. Цену продажи по заданию надо брать из регистра, а не путем расчета.
2. Расчетная цена не является ценой продажи в прикладном смысле. Так как продажа могла пройти со скидкой.
---
и как же?
---
```1c
    Запрос.Текст =
    "ВЫБРАТЬ
    | Данные.Период КАК Период,
    | Данные.Количество КАК Количество
    |ПОМЕСТИТЬ ДатыКоличество
    |ИЗ
    | РегистрСведений.Данные КАК Данные
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ДатыКоличество.Период КАК Период,
    | ДатыКоличество.Количество КАК Количество,
    | Цены.Цена КАК Цена,
    | МАКСИМУМ(Цены.Период) КАК Период1
    |ПОМЕСТИТЬ МаксПериод
    |ИЗ
    | ДатыКоличество КАК ДатыКоличество
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
    | ПО ДатыКоличество.Период >= Цены.Период
    |
    |СГРУППИРОВАТЬ ПО
    | ДатыКоличество.Период,
    | ДатыКоличество.Количество,
    | Цены.Цена
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | МаксПериод.Период КАК Период,
    | МаксПериод.Количество КАК Количество,
    | МаксПериод.Цена КАК Цена
    |ИЗ
    | МаксПериод КАК МаксПериод
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
    | ПО МаксПериод.Период1 = Цены.Период";
```

Чтото нето получается
---
```1c
    ВЫБРАТЬ
    МАКСИМУМ(Цены.Период) КАК Период,
    Продажи.Регистратор КАК Регистратор
    ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
    ИЗ
    РегистрСведений.Продажи КАК Продажи
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
    ПО Продажи.Товар = Цены.Товар
    И Продажи.Период >= Цены.Период

    СГРУППИРОВАТЬ ПО
    Продажи.Регистратор
    ;

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

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

    УПОРЯДОЧИТЬ ПО
    ДатаПродажи
```
---
Если регистр Продажи независимый можно отгруппировать по полю Продажи.Период
---
Вот у себя из отчета взял, но смысл должен быть понятен.
Мы берем таблицу дат продаж в разрезе номенклатуры, далее присоединяем к ней таблицу с периодами из регистра цен по условию дата цены меньше или равно дата продажи. Далее группируем по максимальному периоду и далее связываем еще раз с регистром цен по периоду. В итоге получается таблица в данном случае с номенклатурой, ценой, периодом цены, периодом продажи. Дальше ее можно связать с продажами по периоду продажи

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

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

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

Регистр цены - это цены, и они не на каждый день.

Продажи - это продажи, не на каждый день продажи есть цена.

Что делать? Взять цену для продажи с максимальной датой, которая меньше или равна дате продажи.

Как?
1. Берем продажи и соединяем с ценами по условию, в котором дата цены меньше или равна дате продажи (на и номенклатуре, разумеется).
2. Группируем, получая максимальную дату цены для номенклатуры и даты продажи.

Итог - таблица с максимальной датой цены для даты продажи и номенклатуры.

Дальше соединяем с ценами для получения цены, разумеется по максимальной дате цены для этой продажи.
---
Спасибо ребята, выручили.