Есть запрос, который тянет цены номенклатуры. До этого в массив передавался только 1 вид цен - Розничная. Теперь будет передаваться 2 вида. Розничная и Скидка. Вопрос: Как можно дописать запрос, чтобы по одной номенклатуре с определенной характеристикой выводилась Скидочная цена, если есть, если она NULL или 0, тогда пусть выводится Розничная?
В запросах слаб очень поэтому прошу помощи.
В запросах слаб очень поэтому прошу помощи.
ВЫБРАТЬ
Цены.Номенклатура КАК Номенклатура,
Цены.Характеристика КАК Характеристика,
Цены.ВидЦены КАК ТипЦен,
МАКСИМУМ(Цены.Цена) КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ВидЦены В (&МассивТипыЦен)) КАК Цены
СГРУППИРОВАТЬ ПО
Цены.Номенклатура,
Цены.ВидЦены,
Цены.Характеристика
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ЦеныБезХарактеристики.Номенклатура,
ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка),
ЦеныБезХарактеристики.ВидЦены,
МАКСИМУМ(ЦеныБезХарактеристики.Цена)
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ВидЦены В (&МассивТипыЦен)) КАК ЦеныБезХарактеристики
СГРУППИРОВАТЬ ПО
ЦеныБезХарактеристики.Номенклатура,
ЦеныБезХарактеристики.ВидЦены
ИТОГИ ПО
Номенклатура
ПоказатьПо теме из базы знаний
- История оптимизации одного большого запроса средствами MSSQL Profiler и 1С
- Неоплаченные долги при распределении оплаты по правилу ФИФО одним запросом и намного быстрее, чем Вы думали
- Консоль запросов к базе Oracle для 1С, без использования специализированных программ
- Оптимизатор запроса. Часть первая
- Как читать чужой код? Часть 3. Разбор и доработка запросов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ВЫБРАТЬ
Цены.Номенклатура КАК Номенклатура,
Цены.Характеристика КАК Характеристика,
Цены.ВидЦены КАК ТипЦен,
Цены.Цена КАК Цена
ПОМЕСТИТЬ вВсеЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ВидЦены В (&МассивТипыЦен)) КАК Цены
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СкидочныеЦены.Номенклатура КАК Номенклатура,
СкидочныеЦены.Характеристика КАК Характеристика,
СкидочныеЦены.ТипЦен КАК ТипЦен,
МАКСИМУМ(СкидочныеЦены.Цена) КАК Цена
ПОМЕСТИТЬ мСкидочныеЦены
ИЗ
вВсеЦены КАК СкидочныеЦены
ГДЕ
СкидочныеЦены.ТипЦен = &ТипЦенСкидка
СГРУППИРОВАТЬ ПО
СкидочныеЦены.Номенклатура,
СкидочныеЦены.Характеристика,
СкидочныеЦены.ТипЦен
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РозничныеЦены.Номенклатура КАК Номенклатура,
РозничныеЦены.Характеристика КАК Характеристика,
РозничныеЦены.ТипЦен КАК ТипЦен,
МАКСИМУМ(РозничныеЦены.Цена) КАК Цена
ПОМЕСТИТЬ мРозничныеЦены
ИЗ
вВсеЦены КАК РозничныеЦены
ГДЕ
РозничныеЦены.ТипЦен = &ТипЦенРозница
И НЕ РозничныеЦены.Номенклатура В
(ВЫБРАТЬ
мСкидочныеЦены.Номенклатура КАК Номенклатура
ИЗ
мСкидочныеЦены КАК мСкидочныеЦены)
СГРУППИРОВАТЬ ПО
РозничныеЦены.Номенклатура,
РозничныеЦены.Характеристика,
РозничныеЦены.ТипЦен
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
мСкидочныеЦены.Номенклатура КАК Номенклатура,
мСкидочныеЦены.Характеристика КАК Характеристика,
мСкидочныеЦены.ТипЦен КАК ТипЦен,
мСкидочныеЦены.Цена КАК Цена
ИЗ
мСкидочныеЦены КАК мСкидочныеЦены
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
мРозничныеЦены.Номенклатура,
мРозничныеЦены.Характеристика,
мРозничныеЦены.ТипЦен,
мРозничныеЦены.Цена
ИЗ
мРозничныеЦены КАК мРозничныеЦены
ИТОГИ ПО
Номенклатура
ПоказатьЦены.Номенклатура КАК Номенклатура,
Цены.Характеристика КАК Характеристика,
Цены.ВидЦены КАК ТипЦен,
Цены.Цена КАК Цена
ПОМЕСТИТЬ вВсеЦены
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ВидЦены В (&МассивТипыЦен)) КАК Цены
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
СкидочныеЦены.Номенклатура КАК Номенклатура,
СкидочныеЦены.Характеристика КАК Характеристика,
СкидочныеЦены.ТипЦен КАК ТипЦен,
МАКСИМУМ(СкидочныеЦены.Цена) КАК Цена
ПОМЕСТИТЬ мСкидочныеЦены
ИЗ
вВсеЦены КАК СкидочныеЦены
ГДЕ
СкидочныеЦены.ТипЦен = &ТипЦенСкидка
СГРУППИРОВАТЬ ПО
СкидочныеЦены.Номенклатура,
СкидочныеЦены.Характеристика,
СкидочныеЦены.ТипЦен
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
РозничныеЦены.Номенклатура КАК Номенклатура,
РозничныеЦены.Характеристика КАК Характеристика,
РозничныеЦены.ТипЦен КАК ТипЦен,
МАКСИМУМ(РозничныеЦены.Цена) КАК Цена
ПОМЕСТИТЬ мРозничныеЦены
ИЗ
вВсеЦены КАК РозничныеЦены
ГДЕ
РозничныеЦены.ТипЦен = &ТипЦенРозница
И НЕ РозничныеЦены.Номенклатура В
(ВЫБРАТЬ
мСкидочныеЦены.Номенклатура КАК Номенклатура
ИЗ
мСкидочныеЦены КАК мСкидочныеЦены)
СГРУППИРОВАТЬ ПО
РозничныеЦены.Номенклатура,
РозничныеЦены.Характеристика,
РозничныеЦены.ТипЦен
;
////////////////////////////////////////////////////////////
ВЫБРАТЬ
мСкидочныеЦены.Номенклатура КАК Номенклатура,
мСкидочныеЦены.Характеристика КАК Характеристика,
мСкидочныеЦены.ТипЦен КАК ТипЦен,
мСкидочныеЦены.Цена КАК Цена
ИЗ
мСкидочныеЦены КАК мСкидочныеЦены
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
мРозничныеЦены.Номенклатура,
мРозничныеЦены.Характеристика,
мРозничныеЦены.ТипЦен,
мРозничныеЦены.Цена
ИЗ
мРозничныеЦены КАК мРозничныеЦены
ИТОГИ ПО
Номенклатура
Как это не грустно, но программирование это не ваше.
Для начало вам надо на бумажки нарисовать блок-схему. А далее задавать вопросы по синтаксису.
В качестве бонуса))
Берем данную таблицу (розница) и заворачиваем во временную, далее собираем еще одну временную таблицу со скидками. Далее в третьем пакете запроса соединяем 2 таблицы и выводим нужный результат.
Для начало вам надо на бумажки нарисовать блок-схему. А далее задавать вопросы по синтаксису.
В качестве бонуса))
Берем данную таблицу (розница) и заворачиваем во временную, далее собираем еще одну временную таблицу со скидками. Далее в третьем пакете запроса соединяем 2 таблицы и выводим нужный результат.
ВЫБРАТЬ
Цены.Номенклатура КАК Номенклатура,
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныБезХарактеристики.Цена, 0) = 0 ТОГДА
Цены.Характеристика
ИНАЧЕ
ЦеныБезХарактеристики.Характеристика
КОНЕЦ КАК Характеристика,
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныБезХарактеристики.Цена, 0) = 0 ТОГДА
Цены.ВидЦены
ИНАЧЕ
ЦеныБезХарактеристики.ВидЦены
КОНЕЦ КАК ТипЦен,
ВЫБОР
КОГДА ЕСТЬNULL(ЦеныБезХарактеристики.Цена, 0) = 0 ТОГДА
Цены.Цена
ИНАЧЕ
ЦеныБезХарактеристики.Цена
КОНЕЦ КАК Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, ВидЦены В (&ТипыЦенРозничная)) КАК Цены
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекущаяДата, Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) И ВидЦены В (&ТипыЦенСкидка)) КАК ЦеныБезХарактеристики
ПО Цены.Номенклатура = ЦеныБезХарактеристики.Номенклатура
ИТОГИ ПО
Номенклатура
Показать
(9) Не выводит цену по скидке, выводит цену розничную. Смотрите на картинку, вот так вот текущий запрос работает. Я подчеркнул строки, они одинаковые, нужно чтобы если есть Цена со скидкой Розничная уже не выбиралась. Как я думаю, нужно вложенные запросы использовать и там связями это дело убирать. НО не уверен, что я прав.
Прикрепленные файлы:

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