РС ЦеныНоменклатурыСрезПоследних, как получить 0, если нет записи
Здравствуйте. Вот есть запрос следующего вида.
пусть он вас не смущает, это условная заготовка, в другой, более сложный запрос.
типа есть справочник, и надо для всех товаров вывести Цену с выбранным типом цен, и если в РС нет записи для товара с этим типом цен, то просто в цену подставить 0.... как сделать, не знаю
пусть он вас не смущает, это условная заготовка, в другой, более сложный запрос.
типа есть справочник, и надо для всех товаров вывести Цену с выбранным типом цен, и если в РС нет записи для товара с этим типом цен, то просто в цену подставить 0.... как сделать, не знаю
(ВЫБРАТЬ
ВЫБОР
КОГДА ЦеныНоменклатурыСрезПоследних.Цена = NULL
ТОГДА 0
ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена
КОНЕЦ КАК Цена,
товар.Ссылка
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Конец, ) КАК ЦеныНоменклатурыСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК товар
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = товар.Ссылка
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
ПоказатьПо теме из базы знаний
- Алгоритмы с решениями для экзамена Специалист УТ 11.1
- Согласование цен по заказу
- Формирование документов "Инвентаризация" по выбранным номенклатурным группам
- Обход по группировкам в запросе, соединение таблиц, параметры в запросе, выгрузка прайс-листа в Excel, PDF, Docx, TXT
- Внесение изменений в выгрузку торгового каталога из 1С: УПП (обычные формы, платформа 8.3) на сайт с помощью стандартной обработки 1С Битрикс
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
ВЫБРАТЬ
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
товар.Ссылка
ИЗ
Справочник.Номенклатура КАК товар
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Конец, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО товар.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
(3)
... я начинала с естьнулл...
тогда - именно это не дает мне нужный результат?!
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
... я начинала с естьнулл...
ВЫБРАТЬ
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
Выборка.КонОст1,
Выборка.Номенклатура,
Выборка.ПериодМесяц,
Выборка.КоличествоОборот,
Выборка.СтоимостьОборот,
Выборка.КонОст1 * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК СтоимостьОстатка
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
{(&КонПериода)},
Номенклатура В
(ВЫБРАТЬ
ТаблПромеж.Номенклатура
ИЗ
ТаблПромеж КАК ТаблПромеж)) КАК ЦеныНоменклатурыСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ Выборка КАК Выборка
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
Показатьтогда - именно это не дает мне нужный результат?!
(4)У вас следующая проблема - откуда выбирать данные.
Если вы берете из РС ЦеныНоменклатуры то там естественно не будет той номенклатуры у которой нет цены.
А если приглядитесь к предложенному (3) варианту- выбирается из Справочника Номенклатура
Настойчиво рекомендую почитать теорию!
Если вы берете из РС ЦеныНоменклатуры то там естественно не будет той номенклатуры у которой нет цены.
А если приглядитесь к предложенному (3) варианту- выбирается из Справочника Номенклатура
Настойчиво рекомендую почитать теорию!
(6),
(5) правильно говорит. Левое соединение само по себе подразумевает все записи из левой таблицы. То есть в данном изначальном варианте у вас и не будет пустых записей с этим видом цен. У вас просто не попадёт номенклатура, по которой нет цены в РС.
Левое соединение надо написать к справочнику номенклатуры, тогда цена может равняться NULL.
Плюс к тому же связываться по одному только ТипЦен неправильно, потому как строки могут размножиться. Связка по номенклатуре, как сказал (7) как минимум имеет место быть
(5) правильно говорит. Левое соединение само по себе подразумевает все записи из левой таблицы. То есть в данном изначальном варианте у вас и не будет пустых записей с этим видом цен. У вас просто не попадёт номенклатура, по которой нет цены в РС.
Левое соединение надо написать к справочнику номенклатуры, тогда цена может равняться NULL.
Плюс к тому же связываться по одному только ТипЦен неправильно, потому как строки могут размножиться. Связка по номенклатуре, как сказал (7) как минимум имеет место быть
И вместо:
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
Нужно:
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
Нужно:
ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
Если вы до сих пор не поняли то Вот вам счастье-
ВЫБРАТЬ ПЕРВЫЕ 1000
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, "-") КАК Цена,
товар.Ссылка
ИЗ
Справочник.Номенклатура КАК товар
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НаДату, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО товар.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
ПЕРВЫЕ 1000 для ускорения на этапе отладки
ВЫБРАТЬ ПЕРВЫЕ 1000
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, "-") КАК Цена,
товар.Ссылка
ИЗ
Справочник.Номенклатура КАК товар
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НаДату, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО товар.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
ПЕРВЫЕ 1000 для ускорения на этапе отладки
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот