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

Отзывов (16)FavoriteLoadingВ закладки

Добрый день.

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

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

16 Коммент.

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

    • В том то и дело что во второй таблице условий ни каких нет связываются две таблице по Левому соединению по документу.

  2. Вот пример неправильного запроса

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

  3. А вот пример правильного

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

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

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

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

    • А можно запрос посмотреть, по описанию то все понятно, но запрос бы глянуть. Проблему решил сам. Дело было в настройках самой конфигурации.

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

  6. Т.е. получается основной регистр от куда ты выбираешь значения это ПартииНоменклатуры, если так то, в данном регистре ведь и не может быть фактически данных по номенклатуре по которой ты делаешь потом связь, т.е. в данном случае тебе необходимо за эталон взять справочник Номенклатура и потом уже его связывать с регистрами, может я не правильно понял запрос, но вижу вот такое решение. А в твоем случае получается временная таблица РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты хранит в себе только актуальное состояние остатков на дату и получается что в данной таблице вообще нет записи о номенклатуре которую ты хочешь вывести пустую, т.е. он возвращает NULL по всей записи.

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

  8. Давай попробуем вот так (базы бухгалтерии под рукой нет, так что могу ошибаться):
    Сделай один запрос с двумя таблицами СправочникНоменклатура и РегистрНакопления.ПартииНоменклатуры.ОстаткиИОбороты().

    Связь ЛЕВАЯ к регистру. Что типа того должно получится:

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

    И посмотри что выведет, т.е. должен вывести номенклатуру и остатки. Параметры в регистры можешь опустить или указать условие по справочнику номенклатуры. В запросе могут быть ошибки, т.к. писал на базе твоего.

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

Оставить комментарий

RSSКомментарии в RSS

Авторизация

Логин:
Пароль:
Регистрация

Архивы

Закладки

  • Your favorites will be here.