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