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