Вход | Регистрация

1С:Предприятие ::

Метки: 

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

Я
   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) ничего не будет, я левом соединением связываюсь с номенклатурой а не наоборот


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