Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: СКД: Левое соединение с условием
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Система компоновки данных
andreykyiv@bigmir.net
Нужно вывести в отчет товары, харатеристики и значение нескольких свойств в поля.
Делаю выборку товаров, их характеристик, значения свойств получаю соединяя с регистром значений свойств.

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

СГРУППИРОВАТЬ ПО
    Штрихкоды.Штрихкод,
    ЦеныНоменклатурыСрезПоследних.Цена,
    ПеремещениеТоваровТовары.Ссылка,
    ПеремещениеТоваровТовары.ХарактеристикаНоменклатуры,
    Цвет.Значение,
    Пол.Значение,
    ДатаПроизвод.Значение,
    ВТ.Ссылка,
    ВТ.Владелец,
    ЕСТЬNULL(КодЦвета.Значение, "")

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    Характеристика,
    Штрихкод,
    Цена,
    КодЦвета,
    Цвет,
    Пол,
    ДатаПроизводства


Но проблема в том, что если значение свойтства не определено, то такая позиция в отчет не выводится.
Потому что:
"если есть отбор (на уровне всего отчета)по полям из «подчиненного» набора — Соединение внутреннее,
Если в группировке участвует поле из «подчиненного» набора
соединение так же внутреннее"
необходимо зарегистрироваться для просмотра ссылки

Что тогда делать? Как выйти из ситуации? upset.gif



andreykyiv@bigmir.net @ Сегодня, 10:17 необходимо зарегистрироваться для просмотра ссылки ,

Пытался обойти через использование ЕСТЬNULL(КодЦвета.Значение, ""), это можно видеть в коде.. но не вариант.
Если есть условие на подчиненную таблицу, то соединение становится внутренним. ((
sava1
сделать выборку в тз и скормить это СКД
Мичман Харитонов
А если вместо параметров использовать поля в Отборе?
Так покажет все.

Вернее, отберет все. Отбор будет накладываться уже на эту выборку
andreykyiv@bigmir.net
Мичман Харитонов @ Сегодня, 11:07 необходимо зарегистрироваться для просмотра ссылки ,

не понял идеи, сорри

Вроде бы получилось.
Сделал еще один набор данных. Соединение Наборов данных - там 100% работает левое соединение. Для свойства "КодЦвета". Текст немного более громоздкий получается, но не это главное.
Боялся, что будут тормоза на больших объемах.
Так что интересно, отчет стал выдаваться даже быстрее. Закончу все свойства так описывать, отчитаюсь

Создал наборы данных из нужных мен "ЗначениеСвойствОбъектов", соединяю их с основной таблицей Характеристик.
Все работает



Но главное другое: скорость отчета хорошая, т.е. выборка свойств идет хоть и из отдельных наборов, но достаточно быстро.
Наверное итоговый запрос к базе оптимизируется

sava1 @ Сегодня, 10:39 необходимо зарегистрироваться для просмотра ссылки ,

совсем непонятно что имеется в виду ((
sava1
Цитата(andreykyiv@bigmir.net @ 21.11.18, 12:38) необходимо зарегистрироваться для просмотра ссылки
совсем непонятно что имеется в виду ((


Выборку получить простым запросом и уже готовый набор передать в СКД

А зачем в запросе Полное соединение по ценам и штрихкодам? Сервер имеете мощный? простаивает?
andreykyiv@bigmir.net
andreykyiv@bigmir.net @ Сегодня, 12:38 необходимо зарегистрироваться для просмотра ссылки ,

К моему решению есть одно замечание: в настройке связи НаборовДанных обязательная "галочка" "ОбязательнаяСвязь"



sava1 @ Сегодня, 13:01 необходимо зарегистрироваться для просмотра ссылки ,

Блин, спасибо за замечание. То я экспериментировал, конечно левое нужно прописать.
Исправил

Цитата(sava1 @ 21.11.18, 13:01) необходимо зарегистрироваться для просмотра ссылки
Выборку получить простым запросом и уже готовый набор передать в СКД


Выборку Характеристик или свойств? Не могу понять идею

Цитата(sava1 @ 21.11.18, 13:01) необходимо зарегистрироваться для просмотра ссылки
А зачем в запросе Полное соединение по ценам и штрихкодам? Сервер имеете мощный? простаивает?


Уже убрал, прописал "Левое соединение". Спасибо за замечание, то я экспериментировал, искал решение. И забыл вернуть
alex1c
а что закладку в запросе Характеристики нельзя использовать?
sava1
Цитата(andreykyiv@bigmir.net @ 21.11.18, 14:20) необходимо зарегистрироваться для просмотра ссылки
Выборку Характеристик или свойств? Не могу понять идею


что хотите - готовую выборку для вывода.

нужные данные выбираете запросом в Таблицу значений и ее передаете в СКД как источник данных.
andreykyiv@bigmir.net
Цитата(alex1c @ 21.11.18, 14:33) необходимо зарегистрироваться для просмотра ссылки
а что закладку в запросе Характеристики нельзя использовать?


Нужно отчет выводить в жестко заданный макет. Кроме того появилась необходимость вывести в макет поле типа "Цвет+ КодЦвета" и другие "приколы"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.