Найти цену на каждую дату продажи

1. XelOla 17 14.05.21 11:28 Сейчас в теме
Конфа самописная.
Есть регистры сведений Цены и Продажи
Надо запрос на каждый день продажи - получить цену
Продали 01.05 5 штук Цена от 30.04 = 10р
Продали 02.05 8 штук Цена 10 р
Продали 12.05 4 шт Цена от 03.05 = 12 р
Как то так, задача простая, сижу)))
Получается Цену надо брать на дату продажи.
Помогите пожалуйста.
По теме из базы знаний
Найденные решения
18. azmon 1 14.05.21 13:59 Сейчас в теме
(8) Для независимого регистра будет такой запрос
ВЫБРАТЬ
	МАКСИМУМ(Цены.Период) КАК Период,
	Продажи.Период КАК Период1
ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
ИЗ
	РегистрСведений.Продажи КАК Продажи
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
		ПО Продажи.Товар = Цены.Товар
			И Продажи.Период >= Цены.Период

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

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

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

УПОРЯДОЧИТЬ ПО
	ДатаПродажи
Показать
user1671936; Kremlin_false; XelOla; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. lefthander 14.05.21 11:35 Сейчас в теме
(1)Структуру и тип регистров покажите
(1)
Получается Цену надо брать на дату продажи.
- получатся что да.
3. XelOla 17 14.05.21 11:45 Сейчас в теме
(2) Периодический в пределах дня,
У РС Цены Ресурс Цена
у РС Данные Ресурс Количество
Задача учебная, СКД сделала, по примеру
https:// /бесплатное/2020-11-25-poluchit-tsenu-tovara/

Теперь именно запросом надо
7. azmon 1 14.05.21 13:22 Сейчас в теме
(1) Регистр сведений Продажи независимый?
8. XelOla 17 14.05.21 13:28 Сейчас в теме
(7) периодический, независимый, это все условие
18. azmon 1 14.05.21 13:59 Сейчас в теме
(8) Для независимого регистра будет такой запрос
ВЫБРАТЬ
	МАКСИМУМ(Цены.Период) КАК Период,
	Продажи.Период КАК Период1
ПОМЕСТИТЬ ВТ_ДатыПоследнихЦен
ИЗ
	РегистрСведений.Продажи КАК Продажи
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
		ПО Продажи.Товар = Цены.Товар
			И Продажи.Период >= Цены.Период

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

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

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

УПОРЯДОЧИТЬ ПО
	ДатаПродажи
Показать
user1671936; Kremlin_false; XelOla; +3 Ответить
19. XelOla 17 14.05.21 14:04 Сейчас в теме
(17) как сложно.
но кажется помогло
ща.
22. azmon 1 14.05.21 14:12 Сейчас в теме
(21) Странный у вас конечно регистр Продажи. Товара нет в измерениях. Нет подчинения Регистратору
9. tolyan_ekb 104 14.05.21 13:34 Сейчас в теме
(1) Похоже на срез последних на каждую дату. Эту публикацию смотрели https://infostart.ru/1c/articles/77568/ ?
10. XelOla 17 14.05.21 13:35 Сейчас в теме
(9) пыталась, она у меня без картинок
11. tolyan_ekb 104 14.05.21 13:36 Сейчас в теме
15. tolyan_ekb 104 14.05.21 13:49 Сейчас в теме
(13) там код важен, а не картинки )
4. Ivanov_OM 38 14.05.21 11:59 Сейчас в теме
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПродажиОбороты.ПериодДень КАК День,
		|	ПродажиОбороты.Номенклатура КАК Номенклатура,
		|	ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
		|	ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК Цена
		|ИЗ
		|	РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Авто, ) КАК ПродажиОбороты
		|ИТОГИ
		|	СУММА(КоличествоОборот)
		|ПО
		|	День ПЕРИОДАМИ(ДЕНЬ, &ДатаНачала, &ДатаОкончания),
		|	Номенклатура,
		|	Цена";
	
	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
	Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДень = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	Пока ВыборкаДень.Следующий() Цикл
		// Вставить обработку выборки ВыборкаДень
	
		ВыборкаНоменклатура = ВыборкаДень.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
		Пока ВыборкаНоменклатура.Следующий() Цикл
			// Вставить обработку выборки ВыборкаНоменклатура
	
			ВыборкаЦена = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
			Пока ВыборкаЦена.Следующий() Цикл
				Номенклатура = ВыборкаЦена.Номенклатура;
				Цена = ВыборкаЦена.Цена;
				Количество = ВыборкаЦена.Количество;

			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
Показать
5. FatPanzer 14.05.21 12:31 Сейчас в теме
(4) Неверно.
1. Цену продажи по заданию надо брать из регистра, а не путем расчета.
2. Расчетная цена не является ценой продажи в прикладном смысле. Так как продажа могла пройти со скидкой.
6. XelOla 17 14.05.21 12:48 Сейчас в теме
12. XelOla 17 14.05.21 13:44 Сейчас в теме
Запрос.Текст = 
		"ВЫБРАТЬ
		|	Данные.Период КАК Период,
		|	Данные.Количество КАК Количество
		|ПОМЕСТИТЬ ДатыКоличество
		|ИЗ
		|	РегистрСведений.Данные КАК Данные
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ДатыКоличество.Период КАК Период,
		|	ДатыКоличество.Количество КАК Количество,
		|	Цены.Цена КАК Цена,
		|	МАКСИМУМ(Цены.Период) КАК Период1
		|ПОМЕСТИТЬ МаксПериод
		|ИЗ
		|	ДатыКоличество КАК ДатыКоличество
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
		|		ПО ДатыКоличество.Период >= Цены.Период
		|
		|СГРУППИРОВАТЬ ПО
		|	ДатыКоличество.Период,
		|	ДатыКоличество.Количество,
		|	Цены.Цена
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	МаксПериод.Период КАК Период,
		|	МаксПериод.Количество КАК Количество,
		|	МаксПериод.Цена КАК Цена
		|ИЗ
		|	МаксПериод КАК МаксПериод
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
		|		ПО МаксПериод.Период1 = Цены.Период";
Показать



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

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

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

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

УПОРЯДОЧИТЬ ПО
	ДатаПродажи
Показать
17. azmon 1 14.05.21 13:54 Сейчас в теме
(14) Если регистр Продажи независимый можно отгруппировать по полю Продажи.Период
16. WasiliyMay 8 14.05.21 13:53 Сейчас в теме
Вот у себя из отчета взял, но смысл должен быть понятен.
Мы берем таблицу дат продаж в разрезе номенклатуры, далее присоединяем к ней таблицу с периодами из регистра цен по условию дата цены меньше или равно дата продажи. Далее группируем по максимальному периоду и далее связываем еще раз с регистром цен по периоду. В итоге получается таблица в данном случае с номенклатурой, ценой, периодом цены, периодом продажи. Дальше ее можно связать с продажами по периоду продажи

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

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

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

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

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

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

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

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

Дальше соединяем с ценами для получения цены, разумеется по максимальной дате цены для этой продажи.
ong1990; Kremlin_false; FatPanzer; +3 Ответить
23. Kremlin_false 02.08.22 21:05 Сейчас в теме
Спасибо ребята, выручили.
Оставьте свое сообщение

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