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

Сложный поиск номенклатуры по нескольким доп. реквизитам

Сложный поиск номенклатуры по нескольким доп. реквизитам
Я
   wms
 
10.03.20 - 12:05
Типовая УТ 11.
В справочнике номенклатура добавлено 7 доп. реквизитов разных типов.
Нужно найти номенклатуру по этим 7 доп. реквизитам + артикул номенклатуры который может повторяться.- так давно сделано и работает.Понимаю что плохо.

Интересует техническое решение.
Создаю таблицу ТЗСвВаНом в которой колонки свойство и значение (типизировано характеристикой ПВХ)
И запрос используя временную таблицу:
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("ВнешнийИсточник",ТЗСвВаНом);
    
    Запрос.Текст = "Выбрать
    |    ВнешнийИсточник.Свойство,
    |    ВнешнийИсточник.Значение
    |    Поместить ТЗСвВаНом
    |    ИЗ &ВнешнийИсточник КАК ВнешнийИсточник";
    Запрос.Выполнить();    
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    Реквизиты.Ссылка КАК Ссылка
                   |ИЗ
                   |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК Реквизиты
                   |ГДЕ
                   |    ИСТИНА
                   |    И НЕ Реквизиты.Ссылка.ПометкаУдаления
                   |    И Реквизиты.Ссылка.Артикул = &Артикул
                   |    И (Реквизиты.Свойство, Реквизиты.Значение) в (выбрать т.Свойство, Т.Значение из ТЗСвВаНом как Т)
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    Реквизиты.Ссылка";
    Запрос.УстановитьПараметр("Артикул",Стр.Артикул);
    Результат = Запрос.Выполнить();

но, вхожнение ВТ не отрабатывеет. возвращает 7 номенклатур по артикулу игнорируя значения свойств.
   Cyberhawk
 
1 - 10.03.20 - 12:07
За такое имя переменной лучи добра в тебя точно не полетят)
   wms
 
2 - 10.03.20 - 12:08
(1) поправлю:-)
   Cyberhawk
 
3 - 10.03.20 - 12:10
Проверь на более простом запросе, где таблица из двух колонок с примитивными типами, ну и таблица-фильтр тоже с ними.
   catena
 
4 - 10.03.20 - 12:14
(0)Этот запрос вернет каждую номенклатуру, у которой хоть одна пара свойство/значение имеет в отборе, а не по всем семи.
   Garykom
 
5 - 10.03.20 - 12:17
(0) Там разве нет при добавлении/редактировании доп.реквизита снизу "Для разработчиков" и там "Имя"?

УТ11.4 ПВХ ДополнительныеРеквизитыИСведения
   wms
 
6 - 10.03.20 - 12:18
(3) попробовал см.ниже
(4) да. так и работает
   wms
 
7 - 10.03.20 - 12:26
а надо по всем семи + артикул.простого запроса не могу придумать только сильно навороченный получается
   wms
 
8 - 10.03.20 - 12:30
Придется видимо программно составлять текст запроса и используя выбор формировать реквизиты Свойство1.... Свойство7
и по значениям уже отбор.
Всем спасибо!
   catena
 
9 - 10.03.20 - 12:30
(7)Реквизитов жестко 7 или планируется в будущем изменение состава?
   FIXXXL
 
10 - 10.03.20 - 12:30
(7) дык соединяй по всем полям
   wms
 
11 - 10.03.20 - 12:37
(9) не жестко. 7 это пока максимально, но часть из них уже не обязательные
   pechkin
 
12 - 10.03.20 - 12:38
нужно 7 левых/внутренних соединений
   catena
 
13 - 10.03.20 - 12:42
(12)И каждый раз переписывать, когда состав будет меняться? Просто, но не красиво же.
   Cyberhawk
 
14 - 10.03.20 - 13:05
   Cyberhawk
 
15 - 10.03.20 - 14:14
Ну что, получилось способом из (14)?
   wms
 
16 - 11.03.20 - 09:21
(15)нет, не отрабатывает внутреннее соединение, если ЗначениеСвойства имеет владельца, а у меня 2 таких свойства
  ВТ_Дано КАК ВТ_Дано
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Фильтры КАК ВТ_Фильтры
        ПО ВТ_Дано.ВидСвойства = ВТ_Фильтры.ВидСвойства
            И ВТ_Дано.ЗначениеСвойства = ВТ_Фильтры.ЗначениеСвойства
или глюк платформы или такая фича.
   wms
 
17 - 11.03.20 - 09:22
Пока сделал такой программно формируемый запрос, возможно еще оптимизирую:
ВЫБРАТЬ РАЗЛИЧНЫЕ
    НоменклатураДополнительныеРеквизиты.Ссылка.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НЕ НоменклатураДополнительныеРеквизиты.Ссылка.ПометкаУдаления
    И НоменклатураДополнительныеРеквизиты.Ссылка.Артикул = &Артикул
    И НоменклатураДополнительныеРеквизиты.Свойство в (&МассивСвойств)

    И ВЫБОР
            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Свойство1
                    И НоменклатураДополнительныеРеквизиты.Значение = &Значение1
                ТОГДА ИСТИНА

            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Свойство2
                    И НоменклатураДополнительныеРеквизиты.Значение = &Значение2
                ТОГДА ИСТИНА

            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Свойство3
                    И НоменклатураДополнительныеРеквизиты.Значение = &Значение3
                ТОГДА ИСТИНА

            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Свойство4
                    И НоменклатураДополнительныеРеквизиты.Значение = &Значение4
                ТОГДА ИСТИНА

            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Свойство5
                    И НоменклатураДополнительныеРеквизиты.Значение = &Значение5
                ТОГДА ИСТИНА

            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Свойство6
                    И НоменклатураДополнительныеРеквизиты.Значение = &Значение6
                ТОГДА ИСТИНА

            КОГДА НоменклатураДополнительныеРеквизиты.Свойство = &Свойство7
                    И НоменклатураДополнительныеРеквизиты.Значение = &Значение7
                ТОГДА ИСТИНА

            ИНАЧЕ ЛОЖЬ
        КОНЕЦ
   Cyberhawk
 
18 - 11.03.20 - 11:49
(16) Ну а демо-пример-то ведет себя как нужно?
   Ёпрст
 
19 - 11.03.20 - 11:54
(17) который не работает.. ибо проверяется одно свойство , а не 7 сразу.

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