Вопрос к знатокам запросов. Логическое"И" в условии с выборкой

1. kentavr27 97 28.07.21 01:01 Сейчас в теме
Всем привет. Есть следующий общий макет запроса (без привязки к конкретным данным)
ВЫБРАТЬ
	"Элемент1" КАК Элемент,
	ВложенныйЗапрос.Свойство КАК Свойство,
	ВложенныйЗапрос.Значение КАК Значение
ПОМЕСТИТЬ ИсходныеДанные
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство2",
		2
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство3",
		3
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство4",
		4) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Элемент2",
	ВложенныйЗапрос.Свойство,
	ВложенныйЗапрос.Значение
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство2",
		3) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Элемент3",
	ВложенныйЗапрос.Свойство,
	ВложенныйЗапрос.Значение
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство4",
		2
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство3",
		4) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИсходныеДанные.Элемент КАК Элемент,
	ИсходныеДанные.Свойство КАК Свойство,
	ИсходныеДанные.Значение КАК Значение
ИЗ
	ИсходныеДанные КАК ИсходныеДанные
ГДЕ
	ИсходныеДанные.Значение В
			(ВЫБРАТЬ
				1 КАК Поле1
		
			ОБЪЕДИНИТЬ ВСЕ
		
			ВЫБРАТЬ
				3)
Показать


1,2,3 -- это некие значения. Сколько их, какого типа -- заранее неизвестно. У каждого элемента может быть свой набор значений.
Нужно каким-то образом построить запрос так, что бы в результате (в конкретном примере) на выходе получить только лишь "Элемент1" и "Элемент2". Т.е. что бы условие отработало через логическое "И". Каждый элемент должен содержать полный набор свойств из условия, а не "одно из" как это происходит в приведенном тексте. (ключевой последний пакет запроса)
Если описывать задачу в прикладном варианте, то это: некий справочник владелец, который под собой имеет подчиненный справочник. В подчиненном произвольно указаны дополнительные свойства элемента владельца. На входе задаем фильтр по некоторым свойствам. На выходе получаем элементы владельца, содержащие полный набор заданных фильтром свойств.


Кто чем может помочь? Есть здесь такие ГУРУ?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spacecraft 28.07.21 02:53 Сейчас в теме
(1) как вариант итогового запроса:
ВЫБРАТЬ
	ИсходныеДанные.Элемент КАК Элемент,
	ИсходныеДанные2.Свойство КАК Свойство,
	ИсходныеДанные2.Значение КАК Значение
ИЗ
	ИсходныеДанные КАК ИсходныеДанные
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИсходныеДанные КАК ИсходныеДанные1
		ПО (ИсходныеДанные.Элемент = ИсходныеДанные1.Элемент)
			И (ИсходныеДанные.Значение = 1)
			И (ИсходныеДанные1.Значение = 3)
		ЛЕВОЕ СОЕДИНЕНИЕ ИсходныеДанные КАК ИсходныеДанные2
		ПО (ИсходныеДанные.Элемент = ИсходныеДанные2.Элемент)
Показать
5. kentavr27 97 29.07.21 03:47 Сейчас в теме
(2) имеет право на жизнь, но... в макете запроса указал только два значения фильтра. А если их будет 10? Это нужно N соединений построить. И это динамическое построение текста запроса. Не самый лучший вариант...
Спасибо
3. -AI- 28.07.21 06:31 Сейчас в теме
(1)
Каждый элемент должен содержать полный набор свойств из условия, а не "одно из" как это происходит в приведенном тексте.

тогда нужно не объединение, а соединение запросов:

ВЫБРАТЬ
	"Элемент1" КАК Элемент,
	ВложенныйЗапрос.Свойство КАК Свойство,
	ВложенныйЗапрос.Значение КАК Значение
ПОМЕСТИТЬ ИсходныеДанные
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство2",
		2
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство3",
		3
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство4",
		4) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Элемент2",
	ВложенныйЗапрос.Свойство,
	ВложенныйЗапрос.Значение
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство2",
		3) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Элемент3",
	ВложенныйЗапрос.Свойство,
	ВложенныйЗапрос.Значение
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство4",
		2
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство3",
		4) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИсходныеДанные1.Элемент КАК Элемент1,
	ИсходныеДанные1.Свойство КАК Свойство1,
	ИсходныеДанные1.Значение КАК Значение1,
	ИсходныеДанные2.Элемент КАК Элемент2,
	ИсходныеДанные2.Свойство КАК Свойство2,
	ИсходныеДанные2.Значение КАК Значение2
ИЗ
	ИсходныеДанные КАК ИсходныеДанные1,
	ИсходныеДанные КАК ИсходныеДанные2
ГДЕ
	ИсходныеДанные1.Элемент = "Элемент1"
	И ИсходныеДанные2.Элемент = "Элемент2"
	И ИсходныеДанные1.Значение В
			(ВЫБРАТЬ
				1 КАК Поле1
		
			ОБЪЕДИНИТЬ ВСЕ
		
			ВЫБРАТЬ
				3)
	И ИсходныеДанные2.Значение В
			(ВЫБРАТЬ
				1 КАК Поле1
		
			ОБЪЕДИНИТЬ ВСЕ
		
			ВЫБРАТЬ
				3)
Показать


либо ещё в исходных данных сделать соединение, т.к. у вас там два "КАК ВложенныйЗапрос"
4. kentavr27 97 29.07.21 03:43 Сейчас в теме
(3) в вашем варианте искомые значения в УСЛОВИИ запроса. А именно "Элемент_N" -- это то что нужно получить на выходе. Как же их можно в условие поместить? :)
Но спасибо за участие.
6. kentavr27 97 29.07.21 03:56 Сейчас в теме
(1) если кому интересно, в общем и целом нашел простое решение...
самое главное в нем -- это статический текст запроса :)
ну а сводится к тому, что нужно добавить еще одно маленькое действие: на выходе сравнить количество удовлетворяющих свойств из списка переданного условия и отсечь все те элементы, количество удовлетворяющих свойств которых меньше размера переданных условий (массива, ТЗ, списка -- не имеет значения).
Выглядеть будет примерно так:
ВЫБРАТЬ
	"Элемент1" КАК Элемент,
	ВложенныйЗапрос.Свойство КАК Свойство,
	ВложенныйЗапрос.Значение КАК Значение
ПОМЕСТИТЬ ИсходныеДанные
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство2",
		2
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство3",
		3
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство4",
		4) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Элемент2",
	ВложенныйЗапрос.Свойство,
	ВложенныйЗапрос.Значение
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство2",
		3) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Элемент3",
	ВложенныйЗапрос.Свойство,
	ВложенныйЗапрос.Значение
ИЗ
	(ВЫБРАТЬ
		"Свойство1" КАК Свойство,
		1 КАК Значение
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство4",
		2
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		"Свойство3",
		4) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ИсходныеДанные.Элемент КАК Элемент,
	ИсходныеДанные.Свойство КАК Свойство,
	ИсходныеДанные.Значение КАК Значение
ПОМЕСТИТЬ ВыборкаПоУсловию
ИЗ
	ИсходныеДанные КАК ИсходныеДанные
ГДЕ
	ИсходныеДанные.Значение В
			(ВЫБРАТЬ
				1 КАК Поле1
		
			ОБЪЕДИНИТЬ ВСЕ
		
			ВЫБРАТЬ
				3)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВыборкаПоУсловию.Элемент КАК Элемент,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВыборкаПоУсловию.Свойство) КАК КолВо
ПОМЕСТИТЬ КоличествоПодходящих
ИЗ
	ВыборкаПоУсловию КАК ВыборкаПоУсловию

СГРУППИРОВАТЬ ПО
	ВыборкаПоУсловию.Элемент
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВыборкаПоУсловию.Элемент КАК Элемент,
	ВыборкаПоУсловию.Свойство КАК Свойство,
	ВыборкаПоУсловию.Значение КАК Значение
ИЗ
	ВыборкаПоУсловию КАК ВыборкаПоУсловию
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ КоличествоПодходящих КАК КоличествоПодходящих
		ПО ВыборкаПоУсловию.Элемент = КоличествоПодходящих.Элемент
			И (КоличествоПодходящих.КолВо = 2)
Показать

где в КоличествоПодходящих.КолВо = 2
2 -- либо передать параметром в запрос, либо посчитать размер условия в этом же запросе (что я собственно и сделал на "боевой" задаче)
7. spacecraft 29.07.21 08:55 Сейчас в теме
(6) в общем случае это не надежное решение. Оно работает на допущении, что значения у элементов не будут повторяться.
Но достаточно значению повториться и все перестает работать как ожидалось.
Пример:
ВЫБРАТЬ
    "Элемент1" КАК Элемент,
    ВложенныйЗапрос.Свойство КАК Свойство,
    ВложенныйЗапрос.Значение КАК Значение
ПОМЕСТИТЬ ИсходныеДанные
ИЗ
    (ВЫБРАТЬ
        "Свойство1" КАК Свойство,
        1 КАК Значение
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство2",
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство3",
        3
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство4",
        4
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство5",
        1) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Элемент2",
    ВложенныйЗапрос.Свойство,
    ВложенныйЗапрос.Значение
ИЗ
    (ВЫБРАТЬ
        "Свойство1" КАК Свойство,
        1 КАК Значение
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство2",
        3) КАК ВложенныйЗапрос

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Элемент3",
    ВложенныйЗапрос.Свойство,
    ВложенныйЗапрос.Значение
ИЗ
    (ВЫБРАТЬ
        "Свойство1" КАК Свойство,
        1 КАК Значение
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство4",
        2
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство3",
        4
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        "Свойство4",
        1) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ИсходныеДанные.Элемент КАК Элемент,
    ИсходныеДанные.Свойство КАК Свойство,
    ИсходныеДанные.Значение КАК Значение
ПОМЕСТИТЬ ВыборкаПоУсловию
ИЗ
    ИсходныеДанные КАК ИсходныеДанные
ГДЕ
    ИсходныеДанные.Значение В
            (ВЫБРАТЬ
                1 КАК Поле1
        
            ОБЪЕДИНИТЬ ВСЕ
        
            ВЫБРАТЬ
                3)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВыборкаПоУсловию.Элемент КАК Элемент,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВыборкаПоУсловию.Свойство) КАК КолВо
ПОМЕСТИТЬ КоличествоПодходящих
ИЗ
    ВыборкаПоУсловию КАК ВыборкаПоУсловию

СГРУППИРОВАТЬ ПО
    ВыборкаПоУсловию.Элемент
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    ВыборкаПоУсловию.Элемент КАК Элемент,
    ВыборкаПоУсловию.Свойство КАК Свойство,
    ВыборкаПоУсловию.Значение КАК Значение
ИЗ
    ВыборкаПоУсловию КАК ВыборкаПоУсловию
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ КоличествоПодходящих КАК КоличествоПодходящих
        ПО ВыборкаПоУсловию.Элемент = КоличествоПодходящих.Элемент
            И (КоличествоПодходящих.КолВо = 2)
Показать


Так что лучше проверять не на количество свойств, а на количество значений:
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВыборкаПоУсловию.Значение) КАК КолВо
8. kentavr27 97 30.07.21 03:57 Сейчас в теме
(7)
Так что лучше проверять не на количество свойств, а на количество значений

В принципе согласен. Правда я пока (по крайней мере в своей задачи) не вижу точки сбоя.
Я просто показал принцип довольно простого решения задачи. У себя на всякий случай переделал на проверку пары Свойство/Значение.
Правда в этом случае в качестве условия пришлось передавать ТЗ, а не массив.
9. DJ_Codebase 30.07.21 12:40 Сейчас в теме
А такой запрос не подойдет?
"ВЫБРАТЬ Различные
|	ТЗ.Свойство,
|	ТЗ.Значение
|ПОМЕСТИТЬ ВТ
|ИЗ
|	&ТЗ КАК ТЗ;
|ВЫБРАТЬ
|	ИсходныеДанные.Владелец КАК Элемент,
|	ИсходныеДанные.Свойство КАК Свойство,
|	ИсходныеДанные.Значение КАК Значение
|ИЗ
|	Справочник.ИсходныеДанные КАК ИсходныеДанные
|ГДЕ
|	(ИсходныеДанные.Свойство, ИсходныеДанные.Значение) В
|			(ВЫБРАТЬ
|				ВТ.Свойство,
|				ВТ.Значение
|			ИЗ
|				ВТ)"
Показать
10. kentavr27 97 31.07.21 02:56 Сейчас в теме
(9) это именно тот вариант, который приведен в (1). Он отрабатывает именно как "ИЛИ"
Например набор условий фильтра:

Предмет - шкаф
Размер - большой
Цвет - черный

Вернет все элементы, которые в свойствах содержат: Или "шкаф", или "большой", или "черный" даже если по факту это будет "черный маленький телевизор"

И как раз по этому и искал решение.

Если этот запрос модифицировать условием из (6) -- то тогда конечно подойдет! :) И именно в таком виде сейчас и работает

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

Показать
11. DJ_Codebase 31.07.21 14:37 Сейчас в теме
(10) Интересно, в условии же вроде владелец не участвует (предмет который). У меня такой запрос работает по "И", только с регистром по Номенклатура И Характеристика
Прикрепленные файлы:
12. kentavr27 97 01.08.21 03:39 Сейчас в теме
(11)
У меня такой запрос работает по "И"

Вот это как раз странно. Либо что-то не то, либо одно из двух :)
покрутите запрос из (1) в консоли запросов. Я его специально сделал без привязки к какой-либо конфигурации, что бы запускать без допиливания можно было где угодно.
16. DJ_Codebase 01.08.21 13:28 Сейчас в теме
(12) Архитектура решения же может быть разной. У элемента справочника же не может быть нескольких реквизитов с названием "Свойство" и "Значение", поэтому тут либо ТЧ, подчиненный справочник, регистр сведений. Да и зачем эта универсальность нужна
22. DJ_Codebase 01.08.21 18:09 Сейчас в теме
(12) (14) Коллеги, набросал каркасную конфу, посмотрите, что получилось. Возможно есть и другой способ, но на ум пришло вот это. Критикуйте решение))
Прикрепленные файлы:
СвойстваЗначения.dt
23. spacecraft 01.08.21 18:58 Сейчас в теме
(22) Если добавить к подпадающему под условия элементу справочника еще одно свойство с допустимым значением, то отбираться перестанет.
Прикрепленные файлы:
24. DJ_Codebase 01.08.21 20:47 Сейчас в теме
(23) в Сравнении (последний запрос) поставить "больше или равно", тогда будут попадать
Запрос.Текст = "ВЫБРАТЬ 
	               |	ТоварыСвойства.Ссылка КАК Товар,
				   |	ТоварыСвойства.Свойство КАК Свойство,
				   |	ТоварыСвойства.Значение КАК Значение
	               |ПОМЕСТИТЬ ПолныйНабор
	               |ИЗ
	               |	Справочник.Товары.Свойства КАК ТоварыСвойства
	               |ГДЕ
	               |	ТоварыСвойства.Значение В
	               |			(&НаборЗначений)
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	ПолныйНабор.Товар КАК Товар
	               |ИЗ
	               |	ПолныйНабор КАК ПолныйНабор
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ПолныйНабор.Товар
	               |
	               |ИМЕЮЩИЕ
	               |	КОЛИЧЕСТВО(ПолныйНабор.Товар) >= &КолЗначений";
Показать
25. spacecraft 01.08.21 21:03 Сейчас в теме
(24)
в Сравнении (последний запрос) поставить "больше или равно", тогда будут попадать

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

В действительно это все решается условием не на количество товара, а на количество разных значений:
ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПолныйНабор.Значение) = &КолЗначений


Только это не все. Еще нужно получить и свойства со своими значениями.
А так, как вариант. Только не уверен, что он проще.
Прикрепленные файлы:
26. DJ_Codebase 01.08.21 21:50 Сейчас в теме
(25)
Только не уверен, что он проще

А я и не утверждал что он проще, просто как вариант. Был же концепт абстрагироваться от количества элементов в условии вроде как. Может кто-то еще предложит что нибудь годное
27. DJ_Codebase 01.08.21 21:54 Сейчас в теме
(25)
Если у элемента нет обоих значений и в выборку попадать не может, но имеется несколько одинаковых значений из условия выборки, то такие элементы так же попадают в выборку

а вот эту ситуацию я не продумал))
14. spacecraft 01.08.21 08:42 Сейчас в теме
(11)
Интересно, в условии же вроде владелец не участвует (предмет который)

условием задачи было не "И" пары Свойство-Значение, а "И" для нескольких значений как раз для выбора "владельца". Т.е. отобрать "владельцев" у которых есть свойства со всеми значениями указанных в условии.
15. DJ_Codebase 01.08.21 13:24 Сейчас в теме
(14) Можно сначала сделать предварительную выборку, где будут только элементы с нужными свойствами, а вторым отбором уже по "свойство-значение".
18. spacecraft 01.08.21 13:42 Сейчас в теме
(15) вопрос в совсем другой плоскости. Нужно именно чтобы условия отработали по И.
Т.е. исходя из скрина в (11) вообще ничего не должно было вернуться из запроса, так как передаваемые поля в колонке Значение содержит "Лимон", которого нет в характеристике номенклатуры. Именно все условия по "И".
19. DJ_Codebase 01.08.21 13:50 Сейчас в теме
(18)
Именно все условия по "И".

Да я понял смысл, поэтому и написал пост 15 - предварительная выборка по свойствам (именам). У меня просто задача была такая, вот я и сделал скрин с нее.
20. spacecraft 01.08.21 13:56 Сейчас в теме
(19) я понял что упростили под свою задачу. Но в итоге убрали главное. Как назвали "владелец".
У нас неизвестны какие будут Свойства. У нас есть перечень Значений. Нужно отобрать только те Элементы, у которых есть все эти Значения. Какие Свойства будут нам не известны.
Для понимания, пример:
Нужно найти Склады, в которых на остатках есть номенклатура (неизвестно какая), у которой в характеристиках есть значения: "Матя" и "Лимон".
21. DJ_Codebase 01.08.21 14:22 Сейчас в теме
(20) Да, задачка не тривиальная. Еще и архитектура абстрактная. Надо время на подумать))
13. kentavr27 97 01.08.21 03:51 Сейчас в теме
(11)
PS
В справочнике характеристики у Вас в разделе Данные->Характеристики наверняка заполнена таблица. Возможно с этим связано поведение запроса
17. DJ_Codebase 01.08.21 13:33 Сейчас в теме
(13) О какой таблице речь? не пойму... Это УТ 10.3, исходные данные - РС, где лежат соответствия (на скрине слева), справа ТЧ документа, где отображается код. С хар-кой "лимон" я показал, что отрабатывает условие по "И".
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот