Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запрос в списке значений

Запрос в списке значений
Я
   winterbear
 
14.07.18 - 12:39
Есть справочник Номенклатура, есть справочник Значение свойств Номенклатуры.
В этом справочнике есть такие записи.

Номенклатура1 деревянный
Номенклатура1 высокий
Номенклатура1 прочный
Номенклатура2 прочный
Номенклатура2 темный
Номенклатура2 черный

Мы задаем список свойств на форме= деревянный, высокий, прочный.
и в результате нужно получить номенклатуру ,которая обладает всеми свойствами.

и в результате запроса получаем Номенклатура1

если зададим деревянный, черный- то ничего не должно найти.

Такое условие не подходит ЗначенияСвойствОбъектов.Значение В (&СписокСвойств))
 
 
   Franchiser
 
1 - 14.07.18 - 12:58
Передай свой список значений в запрос, потом сделай левое соединение к нему, группировку по номенклатуре с расчетом минимума по полю свойства, условие имеющие  минимум(свойство) есть не null
   RomanYS
 
2 - 14.07.18 - 14:50
Вариант 1
(N-1) внутренних соединений

Вариант 2
условие  ЗначенияСвойствОбъектов.Значение В (&СписокСвойств))
группировка по номенклатуре
имеющие количество(различные Значение) = &КоличествоСвойствВУсловии
   Бертыш
 
3 - 14.07.18 - 19:39
Например так
ВЫБРАТЬ
    Объекты.Объект,
    Объекты.СчетччикСвойств,
    ПередалиСвойств.СчетчикСвойств
ИЗ
    (ВЫБРАТЬ
        ЗначенияСвойствОбъектов.Объект КАК Объект,
        СУММА(1) КАК СчетччикСвойств
    ИЗ
        РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ГДЕ
        ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура
        И ЗначенияСвойствОбъектов.Значение В(&СписокЗначений)
    
    СГРУППИРОВАТЬ ПО
        ЗначенияСвойствОбъектов.Объект) КАК Объекты
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
            СУММА(НамПередалиСвойств.СчетчикСвойств) КАК СчетчикСвойств
        ИЗ
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                1 КАК СчетчикСвойств,
                ЗначенияСвойствОбъектов.Значение КАК Значение
            ИЗ
                РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
            ГДЕ
                ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура
                И ЗначенияСвойствОбъектов.Значение В(&СписокЗначений)) КАК НамПередалиСвойств) КАК ПередалиСвойств
        ПО (ИСТИНА)
ГДЕ
    Объекты.СчетччикСвойств = ПередалиСвойств.СчетчикСвойств
   Бертыш
 
4 - 14.07.18 - 19:41
Или так
ВЫБРАТЬ
    Объекты.Объект,
    Объекты.СчетччикСвойств
ИЗ
    (ВЫБРАТЬ
        ЗначенияСвойствОбъектов.Объект КАК Объект,
        СУММА(1) КАК СчетччикСвойств
    ИЗ
        РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ГДЕ
        ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура
        И ЗначенияСвойствОбъектов.Значение В(&СписокЗначений)
    
    СГРУППИРОВАТЬ ПО
        ЗначенияСвойствОбъектов.Объект) КАК Объекты
ГДЕ
    Объекты.СчетччикСвойств В
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                СУММА(НамПередалиСвойств.СчетчикСвойств) КАК СчетчикСвойств
            ИЗ
                (ВЫБРАТЬ РАЗЛИЧНЫЕ
                    1 КАК СчетчикСвойств,
                    ЗначенияСвойствОбъектов.Значение КАК Значение
                ИЗ
                    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                ГДЕ
                    ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура
                    И ЗначенияСвойствОбъектов.Значение В (&СписокЗначений)) КАК НамПередалиСвойств)
   Бертыш
 
5 - 14.07.18 - 19:42
Вот блин только накосячил я. Вместо где условие должно быть в имеющие
   Бертыш
 
6 - 14.07.18 - 19:43
Короче говоря вот что Вам надо. Фильтрует с любым переданым количеством свойств
ВЫБРАТЬ
    Объекты.Объект,
    Объекты.СчетччикСвойств
ИЗ
    (ВЫБРАТЬ
        ЗначенияСвойствОбъектов.Объект КАК Объект,
        СУММА(1) КАК СчетччикСвойств
    ИЗ
        РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ГДЕ
        ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура
        И ЗначенияСвойствОбъектов.Значение В(&СписокЗначений)
    
    СГРУППИРОВАТЬ ПО
        ЗначенияСвойствОбъектов.Объект) КАК Объекты

СГРУППИРОВАТЬ ПО
    Объекты.Объект,
    Объекты.СчетччикСвойств

ИМЕЮЩИЕ
    СУММА(Объекты.СчетччикСвойств) В
        (ВЫБРАТЬ РАЗЛИЧНЫЕ
            СУММА(НамПередалиСвойств.СчетчикСвойств) КАК СчетчикСвойств
        ИЗ
            (ВЫБРАТЬ РАЗЛИЧНЫЕ
                1 КАК СчетчикСвойств,
                ЗначенияСвойствОбъектов.Значение КАК Значение
            ИЗ
                РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
            ГДЕ
                ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Номенклатура
                И ЗначенияСвойствОбъектов.Значение В (&СписокЗначений)) КАК НамПередалиСвойств)
   Бертыш
 
7 - 14.07.18 - 19:46
То есть к тому что описано (2) добавляется некий тетий вариант отличающийся тем что в параметрах не указывается количество переданных фильтром свойств, а просто количество переданных пользователем свйств подсчитывается на лету и не надо нам

(N-1) внутренних соединений
   Franchiser
 
8 - 14.07.18 - 22:03
(7) чё так много кода?
1. Создать ВТ
Выбрать * 
Поместить Список 
Из &СписокЗначений как СписокЗначений;
Выбрать
ЗначенияСвойствОбъектов.Объект КАК Объект
Из
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
Правое соединение Список по
Список.значение =значения свойство съездила.значение
Сгруппировать по Объект
Имеющие минимум(
ЗначенияСвойствОбъектов.значение) не есть null
   Garykom
 
9 - 14.07.18 - 22:33
Подумайте что будет с запросами и скоростью их выполнения если номенклатуры будет десятки и сотни тысяч а разных свойств хотя бы сотни?
   xXeNoNx
 
10 - 14.07.18 - 22:45
(3) Земеля, спеца сдал? Шо будет за соединение с подзарпосом? Скажу: пистон нужно вставить.
   Garykom
 
11 - 14.07.18 - 22:54
1.Делаем простой запрос Значение В (&СписокСвойств)
2. Делаем ВТ (Номенклатура, Свойство, Количество = 1)
3. Группируем по Номенклатура, Суммируя Количество
4. Отбираем записи с Количество = (кол-во значений в СписокСвойств)
   Franchiser
 
12 - 15.07.18 - 01:30
Условие В() всегда работает очень долго и всегда нужно этого избегать
   Franchiser
 
13 - 15.07.18 - 01:36
(9) ничего не будет, я левом соединением связываюсь с номенклатурой а не наоборот

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.