Вывод колонки при пустом значении.

Добрый день.

Проблема в следующей, при использовании левого соединения не выводится колонка если там пустые данные, хотя в запросе я прописал: ЕСТЬNULL(ИсполнениеОтвИсполнитель.Исполнитель, “<не задан>”). В чем может быть проблема? Просьба подсказать куда копать.

Подписаться
Уведомить о
guest
16 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Головаченко Дима
Головаченко Дима
11 лет назад

Если не выводит, то может быть проблема в условии запроса на таблицу, которая цепляется левым соединением.
Т.е. запрос то выбрал строку, поставил ваше значение, но потом условие ее отсекло.
Если нужно все таки поставить условие на вторую таблицу, то его надо делать на вкладке связи.

VladC
11 лет назад

а можно запрос посмотреть?

Головаченко Дима
Головаченко Дима
11 лет назад

Вот пример неправильного запроса
ВЫБРАТЬ
Валюты.Ссылка КАК Валюта,
ЕСТЬNULL(КурсыВалют.Курс, “Нет курса”) КАК Курс
ИЗ
Справочник.Валюты КАК Валюты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО КурсыВалют.Валюта = Валюты.Ссылка
ГДЕ
КурсыВалют.Кратность 12

Головаченко Дима
Головаченко Дима
11 лет назад

А вот пример правильного
ВЫБРАТЬ
Валюты.Ссылка,
ЕСТЬNULL(КурсыВалют.Курс, “Нет курса”) КАК Поле1
ИЗ
Справочник.Валюты КАК Валюты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
ПО (КурсыВалют.Валюта = Валюты.Ссылка)
И (КурсыВалют.Кратность 12)

ashaxm
ashaxm
11 лет назад

Ты молодец, spitejon. Я рад за тебя. А как решена, кем решена? Тем что Головаченко Дима написал, или тобой лично? Пояснять надо для всех, плз, раз уж поднял тему.

ashaxm
ashaxm
11 лет назад

Спрошу еще раз.
Есть простой запрос, который выводит остатки и обороты товаров, ну как водится СКД дает множество возможностей настроек. Надо сделать так, чтобы выводились строки по всей номенклатуре, даже если нет остатков и оборотов.
Беру сам запрос по регистрам, добавляю левое соединение справочника Номенклатура с ним. В Консоли запросов всё работает. В СКД никак не получается. Условие только одно накладываю: справочник в заданной юзером иерархии &Ном. Если его убрать-все обрушивается с сообщением “не хватает памяти”. Если этот параметр указать в описании связи наборов-опять ничего не выходит.
Может ли вообще СКД такое вывести? Может быть надо не в одном, а в 2 или 3 наборах организовать? Подскажите, плз, как надо. напишите или дайте ссылку на похожий пример.

ashaxm
ashaxm
11 лет назад

В отчете текст запроса СКД
ВЫБРАТЬ
ПартииНоменклатурыОстаткиИОбороты.Фирма КАК Фирма,
ПартииНоменклатурыОстаткиИОбороты.Склад КАК Склад,
ПартииНоменклатурыОстаткиИОбороты.Номенклатура КАК Номенклатура,
ПартииНоменклатурыОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ПартииНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток,
ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
ПартииНоменклатурыОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
ПартииНоменклатурыОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход,
ВЫБОР
КОГДА КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность = 0
ТОГДА 0
ИНАЧЕ ПартииНоменклатурыОстаткиИОбороты.СтоимостьНачальныйОстаток * (КурсВалютыУпрУчета.Курс * КурсВалюты.Кратность / (КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность))
КОНЕЦ КАК СтоимостьНачальныйОстаток,
ВЫБОР
КОГДА КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность = 0
ТОГДА 0
ИНАЧЕ ПартииНоменклатурыОстаткиИОбороты.СтоимостьКонечныйОстаток * (КурсВалютыУпрУчета.Курс * КурсВалюты.Кратность / (КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность))
КОНЕЦ КАК СтоимостьКонечныйОстаток,
ВЫБОР
КОГДА КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность = 0
ТОГДА 0
ИНАЧЕ ПартииНоменклатурыОстаткиИОбороты.СтоимостьПриход * (КурсВалютыУпрУчета.Курс * КурсВалюты.Кратность / (КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность))
КОНЕЦ КАК СтоимостьПриход,
ВЫБОР
КОГДА КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность = 0
ТОГДА 0
ИНАЧЕ ПартииНоменклатурыОстаткиИОбороты.СтоимостьРасход * (КурсВалютыУпрУчета.Курс * КурсВалюты.Кратность / (КурсВалюты.Курс * КурсВалютыУпрУчета.Кратность))
КОНЕЦ КАК СтоимостьРасход,
РеквизитыПартийНоменклатуры.ПриходныйДокумент КАК ПриходныйДокумент,
РеквизитыПартийНоменклатуры.НомерГТД КАК НомерГТД,
ПараметрыНоменклатурыСрезПоследних.ЦенаЗадаетсяНаХарактеристику КАК ЦенаЗадаетсяНаХарактеристику,
ПартииНоменклатурыОстаткиИОбороты.Регистратор КАК Регистратор,
ПартииНоменклатурыОстаткиИОбороты.ПериодДень КАК ПериодДень,
ПартииНоменклатурыОстаткиИОбороты.ПериодНеделя КАК ПериодНеделя,
ПартииНоменклатурыОстаткиИОбороты.ПериодДекада КАК ПериодДекада,
ПартииНоменклатурыОстаткиИОбороты.ПериодМесяц КАК ПериодМесяц,
ПартииНоменклатурыОстаткиИОбороты.ПериодКвартал КАК ПериодКвартал,
ПартииНоменклатурыОстаткиИОбороты.ПериодПолугодие КАК ПериодПолугодие,
ПартииНоменклатурыОстаткиИОбороты.ПериодГод КАК ПериодГод,
ПартииНоменклатурыОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
ВЫБОР
КОГДА ПартииНоменклатурыОстаткиИОбороты.Номенклатура.ФиксированныйПоставщик
ТОГДА ПартииНоменклатурыОстаткиИОбороты.Номенклатура.ОсновнойПоставщик
ИНАЧЕ ПоставщикиНоменклатурыСрезПоследних.Поставщик
КОНЕЦ КАК ОсновнойПоставщик
{ВЫБРАТЬ
Фирма.*,
Склад.*,
ПриходныйДокумент.*,
ХарактеристикаНоменклатуры.*,
НомерГТД,
ОсновнойПоставщик.*}
ИЗ
РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(&ДатаОтчетаНачало, &ДатаОтчетаКонец, Авто, , {(Номенклатура), (Склад), (ХарактеристикаНоменклатуры), (Партия), (Фирма)}) КАК ПартииНоменклатурыОстаткиИОбороты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РеквизитыПартийНоменклатуры КАК РеквизитыПартийНоменклатуры
ПО ПартииНоменклатурыОстаткиИОбороты.Партия = РеквизитыПартийНоменклатуры.Партия
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаОтчетаКонец, Валюта = &Валюта) КАК КурсВалюты
ПО (ИСТИНА)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыНоменклатуры.СрезПоследних(&ДатаОтчетаКонец, ) КАК ПараметрыНоменклатурыСрезПоследних
ПО ПартииНоменклатурыОстаткиИОбороты.Номенклатура = ПараметрыНоменклатурыСрезПоследних.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаОтчетаКонец, Валюта = &ВалютаУпрУчета) КАК КурсВалютыУпрУчета
ПО (ИСТИНА),
РегистрСведений.ПоставщикиНоменклатуры.СрезПоследних(&ДатаОтчетаКонец, ) КАК ПоставщикиНоменклатурыСрезПоследних
{ГДЕ
ПартииНоменклатурыОстаткиИОбороты.Фирма.*,
ПартииНоменклатурыОстаткиИОбороты.Склад.*,
ПартииНоменклатурыОстаткиИОбороты.Номенклатура.*,
ПартииНоменклатурыОстаткиИОбороты.ХарактеристикаНоменклатуры.*,
РеквизитыПартийНоменклатуры.ПриходныйДокумент.*,
РеквизитыПартийНоменклатуры.НомерГТД,
(ВЫБОР
КОГДА ПартииНоменклатурыОстаткиИОбороты.Номенклатура.ФиксированныйПоставщик
ТОГДА ПартииНоменклатурыОстаткиИОбороты.Номенклатура.ОсновнойПоставщик
ИНАЧЕ ПоставщикиНоменклатурыСрезПоследних.Поставщик
КОНЕЦ).* КАК ОсновнойПоставщик}
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.ХарактеристикиНоменклатуры)
СПИСОК (ВЫБРАТЬ
СвойстваОбъектов.Ссылка,
СвойстваОбъектов.Наименование,
СвойстваОбъектов.ТипЗначения
ИЗ
ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
ГДЕ
СвойстваОбъектов.НазначениеСвойства.Код = “00102”)
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ЗначенияСвойствОбъектов
ОБЪЕКТ Объект
ХАРАКТЕРИСТИКА Свойство
ЗНАЧЕНИЕ Значение }
{ХАРАКТЕРИСТИКИ
ТИП(Справочник.Номенклатура)
СПИСОК (ВЫБРАТЬ
СвойстваОбъектов.Ссылка,
СвойстваОбъектов.Наименование,
СвойстваОбъектов.ТипЗначения
ИЗ
ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов
ГДЕ
СвойстваОбъектов.НазначениеСвойства.Код = “00101”)
ИДЕНТИФИКАТОР Ссылка
ИМЯ Наименование
ТИПЗНАЧЕНИЯ ТипЗначения
ЗНАЧЕНИЯ РегистрСведений.ЗначенияСвойствОбъектов
ОБЪЕКТ Объект
ХАРАКТЕРИСТИКА Свойство
ЗНАЧЕНИЕ Значение }
Очевидно, текст и настройки еще меняются модулями самого отчета, всё это дает возможность пользоваться всеми прелестями и красотами, выбирать различные группировки и отборы. Наверное, нельзя при сохранении всего антуража ещё добавить вывод Номенклатуры с пустыми остатками и движениями. Или все-же можно?

ashaxm
ashaxm
11 лет назад

Да, всё правильно. Поэтому я добавляю в запрос Справочник Номенклатура и делаю ему левое соединение с регистром ПартииНоменклатуры. В Консоли запросов такой запрос выводит ВСЕ товары из заданной группы, а в СКД нет. Тогда добавляю справочник Номенклатура как второй набор и делаю от него связь к первому. Но дальше я плохо понимаю (мало знаком с СКД) Если на второй набор не накладываю условий то 1С идет вразнос и обрушивается. Не знаю как правильно сделать.

ashaxm
ashaxm
11 лет назад

Спасибо, сейчас наконец дошел до этой задачи, буду пробовать.

ashaxm
ashaxm
11 лет назад

Ура! Работает такой запрос:
ВЫБРАТЬ
ВложенныйЗапрос.Ссылка КАК Номенклатура,
ЕСТЬNULL(ПартииНоменклатурыОстаткиИОбороты.КоличествоНачальныйОстаток, 0) КАК КоличествоНачальныйОстаток,
ЕСТЬNULL(ПартииНоменклатурыОстаткиИОбороты.СтоимостьНачальныйОстаток, 0) КАК СтоимостьНачальныйОстаток,
ЕСТЬNULL(ПартииНоменклатурыОстаткиИОбороты.КоличествоОборот, 0) КАК КоличествоОборот,
ЕСТЬNULL(ПартииНоменклатурыОстаткиИОбороты.СтоимостьОборот, 0) КАК СтоимостьОборот,
ЕСТЬNULL(ПартииНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток, 0) КАК КоличествоКонечныйОстаток,
ЕСТЬNULL(ПартииНоменклатурыОстаткиИОбороты.СтоимостьКонечныйОстаток, 0) КАК СтоимостьКонечныйОстаток
{ВЫБРАТЬ
КоличествоНачальныйОстаток,
СтоимостьНачальныйОстаток,
КоличествоОборот,
СтоимостьОборот,
КоличествоКонечныйОстаток,
СтоимостьКонечныйОстаток}
ИЗ
(ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
{ВЫБРАТЬ
Ссылка.* КАК Номенклатура}
ИЗ
Справочник.Номенклатура КАК Номенклатура
{ГДЕ
Номенклатура.Ссылка.*}) КАК ВложенныйЗапрос
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты(, , Период, ДвиженияИГраницыПериода, ) КАК ПартииНоменклатурыОстаткиИОбороты
ПО (ПартииНоменклатурыОстаткиИОбороты.Номенклатура = ВложенныйЗапрос.Ссылка)
те условие накладываем на левую часть, его значение можно выбрать уже в настройках.
Спасибо за помощь.