Срез последних цен без учета характеристики номенклатуры

1. user761098 22.05.19 12:09 Сейчас в теме
Добрый день! Подскажите как сделать срез последних в запросе без учета характеристики, чтоб выводились последние цены по видам цен. Первый скрин как есть изначально, второй скрин как нужно.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ksen 22.05.19 12:13 Сейчас в теме
(1) А зачем в запросе тащить характеристику если она не нужна? Попробуйте убрать её из запроса и сгруппировать по номенклатуре и виду цен.
3. user761098 22.05.19 12:17 Сейчас в теме
(2) Характеристику выбрала, чтоб показать, что они разные. Если её убрать и группировать, все равно результат не тот.
Прикрепленные файлы:
8. ErshKUS 2 22.05.19 12:24 Сейчас в теме
(3) По цене не нужно сгруппировывать, её нужно считать
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.ТипЦен,
	ЦеныНоменклатурыСрезПоследних.Номенклатура,
	СРЕДНЕЕ(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатурыСрезПоследних.ТипЦен,
	ЦеныНоменклатурыСрезПоследних.Номенклатура
Показать

в этом примере выведено среднее значение. Можете максимум, минимум на свой вкус
9. ksen 22.05.19 12:38 Сейчас в теме
(3)Не уверен, нужно проверять. Попробуйте сгруппировать по наименованию или артикулу, если они уникальные, если не поможет то надо будет писать вложенный запрос или играться с условиями.
4. ErshKUS 2 22.05.19 12:18 Сейчас в теме
(1) Сразу вопрос, что делать если у двух характеристик в одной номенклатуре разные цены? взять максимум, минимум, среднее,... ?
5. ErshKUS 2 22.05.19 12:19 Сейчас в теме
Напишите ваше сообщение
(4) + как у тест1 Розничные. Взять минимум?
6. user761098 22.05.19 12:20 Сейчас в теме
(4) Мне характеристики не важны. Нужно взять последние цены по видам цен.
7. ErshKUS 2 22.05.19 12:24 Сейчас в теме
(6) эти характеристики обе последние. Хотя конечно если пройтись по регистру можно найти что какая то из них была днем раньше, но могут быть и в один день (момент времени), что тогда?
12. ksen 22.05.19 13:34 Сейчас в теме
(6)Можете показать вывод запроса
ВЫБРАТЬ
	ЦеныНоменклатуры.ТипЦен,
	ЦеныНоменклатуры.Номенклатура,
	МАКСИМУМ(ЦеныНоменклатуры.Регистратор.Дата) КАК РегистраторДата

Нет базы с использованием характеристик чтобы проверить

Если он выдаст всего 2 даты по 1 номенклатуре на примере выше то просто сцепите полученный результат с еще запросом через поля номенклатура и ЦеныНоменклатуры.Регистратор.Дата)
13. user761098 22.05.19 13:50 Сейчас в теме
(12) Результат такой же, как в (3)
15. ksen 22.05.19 13:51 Сейчас в теме
(13)Даже если цену не тащить? только с Номенклатурой, датой и типом цен?
А если просто достать Номенклатуру из справочнику по артикулу или наименованию он её тоже разделит на 2 по характеристикам?
16. user761098 22.05.19 13:54 Сейчас в теме
(15) Так, без цены 2 строчки. Сейчас попробую сцепить с ценами.
17. ksen 22.05.19 14:00 Сейчас в теме
(16)Только цепляйте по 2 полям, номенклатуре и дате. Должно сработать, разве что не оптимальный запрос, но как сделать лучше я пока не знаю.
Разве что брать так же из среза последних без максимума, не должно делить по характеристикам.
19. ErshKUS 2 22.05.19 14:07 Сейчас в теме
(12) тоже не поможет, разные характеристики могут быть залиты одним доком, даже так чаще и происходит
21. ksen 22.05.19 17:31 Сейчас в теме
(19)Ну а на этом шаге уже можно брать среднее/макс/мин на макс дату, если есть такие ситуации.
22. ErshKUS 2 22.05.19 18:05 Сейчас в теме
(21) вроде в (20) должно сработать, я просто уже на максимум звязал их, чтобы дублей не было
11. ErshKUS 2 22.05.19 13:05 Сейчас в теме
(1) Ну или вот такой запрос, но всё равно нужна защита от разных характеристик одной датой

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

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.ТипЦен,
	ЦеныНоменклатуры.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.ТипЦен,
	ЦеныНоменклатуры.Номенклатура
Показать
14. user761098 22.05.19 13:51 Сейчас в теме
(11) Результат не тот, какой нужен был. Видимо без характеристик никак. Спасибо за помощь.
18. ErshKUS 2 22.05.19 14:00 Сейчас в теме
(14) так ты(вы) опишите подробнее что хотелось. Тут большая проблема что делать с несколькими характеристиками в одну дату. Конечно если не ограничиваться только запросом, то можно через код взять первых (допустим через обход группировок), хотя и в запросе такое можно исхитрится наверно.
НО есть шанс, при таком подходе (взяв просто первую запись), получать при каждом запросе разные данные. Дело в том что если нет сортировки, то скуль может порядок строк в выборке изменить.
20. ErshKUS 2 22.05.19 14:11 Сейчас в теме
(1) попробуйте такой вариант
ВЫБРАТЬ
	ЦеныНоменклатуры.ТипЦен,
	ЦеныНоменклатуры.Номенклатура,
	МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период,
	ЦеныНоменклатуры.Регистратор.Дата,
	ЦеныНоменклатуры.НомерСтроки
ПОМЕСТИТЬ ВТ_СрезДат
ИЗ
	РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
ГДЕ
	ЦеныНоменклатуры.Активность

СГРУППИРОВАТЬ ПО
	ЦеныНоменклатуры.ТипЦен,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Регистратор.Дата,
	ЦеныНоменклатуры.НомерСтроки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ЦеныНоменклатуры.ТипЦен,
	ЦеныНоменклатуры.Номенклатура,
	ЦеныНоменклатуры.Цена КАК Цена
ИЗ
	ВТ_СрезДат КАК ВТ_СрезДат
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ВТ_СрезДат.ТипЦен = ЦеныНоменклатуры.ТипЦен
			И ВТ_СрезДат.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И ВТ_СрезДат.Период = ЦеныНоменклатуры.Период
			И ВТ_СрезДат.РегистраторДата = ЦеныНоменклатуры.Регистратор.Дата
			И ВТ_СрезДат.НомерСтроки = ЦеныНоменклатуры.НомерСтроки
Показать
10. SGordon1 22.05.19 12:49 Сейчас в теме
А программно найти последнию цену по виду цен и номенклатуре, а затем ее вывести - прокатит?
23. shastin87 9 23.12.21 17:09 Сейчас в теме
Стандартная задача. Делаю так:

ВЫБРАТЬ
ВидыЦен.Ссылка КАК ВидЦены
ПОМЕСТИТЬ ВТ_ВидЦены
ИЗ
Справочник.ВидыЦен КАК ВидыЦен
ГДЕ
ВидыЦен.Наименование = "Закупочная"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
ИНАЧЕ ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка.Коэффициент = 0
ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена / ЦеныНоменклатурыСрезПоследних.Упаковка.Коэффициент
КОНЕЦ
КОНЕЦ КАК ЦенаЗакупа,
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
ЦеныНоменклатурыСрезПоследних.Период КАК Период
ПОМЕСТИТЬ ВТ_Цены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
,
ВидЦены В
(ВЫБРАТЬ
Вид.ВидЦены
ИЗ
ВТ_ВидЦены КАК Вид)) КАК ЦеныНоменклатурыСрезПоследних
ГДЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура В(&Номенклатура)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
МАКСИМУМ(ВТ_Цены.Период) КАК Период,
ВТ_Цены.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_МаксПериод
ИЗ
ВТ_Цены КАК ВТ_Цены

СГРУППИРОВАТЬ ПО
ВТ_Цены.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ВТ_Цены.ЦенаЗакупа КАК ЦенаЗакупа,
ВТ_Цены.Номенклатура КАК Номенклатура
ИЗ
ВТ_Цены КАК ВТ_Цены
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МаксПериод КАК ВТ_МаксПериод
ПО ВТ_Цены.Период = ВТ_МаксПериод.Период
И ВТ_Цены.Номенклатура = ВТ_МаксПериод.Номенклатура
Оставьте свое сообщение

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