Получить последнюю цену из двух типов цен
Добрый день, подскажите, чет туплю, не могу составить запрос. Такая задача, у товара есть два типа цен "Анонс" и "Опт", выводить последнюю цену на момент формирования отчета. То есть товар еще не пришел, у него стоит "Анонс", выводим "Анонс", после этого товар пришел, поставили "Опт", и когда формируем отчет должна выводится цена "Опт". Бывает что у товара была цена "Опт", после его перевыпускают с ценой "Анонс". Сделал такой запрос:
Вроде выводит норм, но мне кажется как то коряво. То есть в первом получаю последние цены по двум типам, во втором получаю последние документы, ну и в третьем вывожу цены, правильная ли логика или я чет запутался...
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЦеныНоменклатурыСрезПоследних.Период,
ЦеныНоменклатурыСрезПоследних.Регистратор
ПОМЕСТИТЬ ВТ_Цены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
,
ТипЦен = &ТипЦенОпт
И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЦеныНоменклатурыСрезПоследних
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена,
ЦеныНоменклатурыСрезПоследних.Период,
ЦеныНоменклатурыСрезПоследних.Регистратор
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
,
ТипЦен = &ТипЦенАнонс
И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЦеныНоменклатурыСрезПоследних
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Регистратор) КАК Регистратор
ПОМЕСТИТЬ ВТ_МаксДок
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цены КАК ВТ_Цены
ПО ЦеныНоменклатурыСрезПоследних.Период = ВТ_Цены.Период
И ЦеныНоменклатурыСрезПоследних.Номенклатура = ВТ_Цены.Номенклатура
СГРУППИРОВАТЬ ПО
ЦеныНоменклатурыСрезПоследних.Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Цены.Номенклатура,
ВТ_Цены.Цена
ИЗ
ВТ_Цены КАК ВТ_Цены
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_МаксДок КАК ВТ_МаксДок
ПО ВТ_Цены.Номенклатура = ВТ_МаксДок.Номенклатура
И ВТ_Цены.Регистратор = ВТ_МаксДок.Регистратор
ПоказатьВроде выводит норм, но мне кажется как то коряво. То есть в первом получаю последние цены по двум типам, во втором получаю последние документы, ну и в третьем вывожу цены, правильная ли логика или я чет запутался...
По теме из базы знаний
- Анализ цен и запасов товаров в УТ 10.3
- Интеграция сценарного тестирования в процесс разработки
- Разработка и сценарное тестирование с Vanessa-ADD. Концепция, теория и сквозной пример создания сценария
- Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев
- Применение 1С:Аналитики и Дата акселератора, или Как получить в 1С прозрачность и скорость обработки данных для прямого доступа и контроля руководителя
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
ЦеныНоменклатурыСрезПоследних.Период,
ЦеныНоменклатурыСрезПоследних.Регистратор
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних() КАК ЦеныНоменклатурыСрезПоследних
ГДЕ ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = "Анонс" или ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование = "Опт"
чисто по логике запроса (не задачи)
первый пакет нормальный, можно вместо объединения создать условие
ТипЦен В (&мТипыЦен)
но в этом случае индексы перестанут работать и учитывая, что регистры цен огромны,
то объединение выглядит вполне логично.
второй пакет странный, что значит МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Регистратор)
вы так получаете последний учетный документ? если да, то решение хромает
третий пакет прост и придраться не к чему
первый пакет нормальный, можно вместо объединения создать условие
ТипЦен В (&мТипыЦен)
но в этом случае индексы перестанут работать и учитывая, что регистры цен огромны,
то объединение выглядит вполне логично.
второй пакет странный, что значит МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Регистратор)
вы так получаете последний учетный документ? если да, то решение хромает
третий пакет прост и придраться не к чему
(6) ну вообще изначально я определял по критерию период, потом просто где то в просторах инета увидел по регистратору, но там для того чтобы исключить ситуаций, когда дата одинаковая. Переделал второй пакет, максимум по периоду, теперь решение не храмает?
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
МАКСИМУМ(ВТ_Цены.Период) КАК Период
ПОМЕСТИТЬ ВТ_МаксДок
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цены КАК ВТ_Цены
ПО ЦеныНоменклатурыСрезПоследних.Период = ВТ_Цены.Период
И ЦеныНоменклатурыСрезПоследних.Номенклатура = ВТ_Цены.Номенклатура
СГРУППИРОВАТЬ ПО
ЦеныНоменклатурыСрезПоследних.Номенклатура
;
Показать
ВЫБРАТЬ
ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура КАК НоменклатураПоставщика,
МАКСИМУМ(ЦеныНоменклатурыПоставщиковСрезПоследних.Период) КАК Период
ПОМЕСТИТЬ ВТ
ИЗ
РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПоследних(&ТекущаяДата, ) КАК ЦеныНоменклатурыПоставщиковСрезПоследних
СГРУППИРОВАТЬ ПО
ЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ.НоменклатураПоставщика КАК НоменклатураПоставщика,
ЦеныНоменклатурыПоставщиков.Цена КАК Цена
ИЗ
ВТ КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков КАК ЦеныНоменклатурыПоставщиков
ПО ВТ.НоменклатураПоставщика = ЦеныНоменклатурыПоставщиков.Номенклатура
И ВТ.Период = ЦеныНоменклатурыПоставщиков.Период
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот