|
Поиск элемента справочника запросом | ☑ | ||
---|---|---|---|---|
0
r1000
07.04.15
✎
09:02
|
Есть таблица значений. В таблице одна колонка "Свойство". Количество строк в таблице может быть различным, сами свойства тоже могут быть различными.
Еще есть справочник с табличной частью, в табличной части один реквизит "Свойство". Задача: найти элемент справочника, в котором табличная часть будет совпадать с таблицей значений. Как запросом сделать ? |
|||
1
Simod
07.04.15
✎
09:04
|
"Стаж: 7 лет 5 месяцев 19 дней"
Ты серьезно? |
|||
2
1976vas
07.04.15
✎
09:05
|
(0) ТЗ в ВТ и соединяй.
|
|||
3
r1000
07.04.15
✎
09:05
|
Ага)
|
|||
4
r1000
07.04.15
✎
09:06
|
(2)Так вот не получается соединять...
|
|||
5
1976vas
07.04.15
✎
09:08
|
(4) Если ты нарисуешь, то вероятность получения ответа увеличится )
|
|||
6
1976vas
07.04.15
✎
09:09
|
(5) + описание того, что не получается.
|
|||
7
r1000
07.04.15
✎
09:11
|
Вот таким запросом пытаюсь. ТЗ в ВТ и соединяю. Но тут запрос мне выдает таблицу, а мне нужен элемент
"ВЫБРАТЬ | ТаблПараметров.Значение КАК Значение1 |ПОМЕСТИТЬ ТаблПараметров |ИЗ | &ТаблПараметров КАК ТаблПараметров |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблПараметров.Значение1, | ЭлементыНоменклатурыЗначенияСвойств.Значение |ИЗ | ТаблПараметров КАК ТаблПараметров | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭлементыНоменклатуры.ЗначенияСвойств КАК ЭлементыНоменклатурыЗначенияСвойств | ПО ТаблПараметров.Значение1 = ЭлементыНоменклатурыЗначенияСвойств.Значение |
|||
8
r1000
07.04.15
✎
09:12
|
+(7)Причем тот элемент у которого все значения по соединению совпадут.
|
|||
9
r1000
07.04.15
✎
09:12
|
Внутреннее соединение также, дает таблицу даже если не все значения совпадают.
|
|||
10
1976vas
07.04.15
✎
09:16
|
(9) Нарисуй таблички, что есть и что надо. Не очень понятно.
|
|||
11
StaticUnsafe
07.04.15
✎
09:16
|
(8) Если в ТЧ элемента справочника содержаться теже строки что и в таблице значений + еще несколько то соединение даст и этот элемент
|
|||
12
r1000
07.04.15
✎
09:19
|
(11)Вот. А мне нужно полное совпадение...
(10)Щас нарисую... |
|||
13
r1000
07.04.15
✎
09:23
|
Вот моя ТЗ и элементы справочника. Мне нужно в запросе найти только элемент3, так как только в нем есть полное совпадение по значениям. Как сделать ?
ТЗ Значение1 Значение2 Значение3 Элемент1 Значение1 Значение2 Значение3 Значение4 Элемент2 Значение1 Значение0 Значение3 Элемент3 Значение2 Значение1 Значение3 |
|||
14
User_Agronom
07.04.15
✎
09:25
|
Дарю, пользуйся: http://i.stack.imgur.com/sKS1u.jpg
|
|||
15
Любопытная
07.04.15
✎
09:28
|
Выбираешь все элементы, у которых есть значения из ТЗ, потом делаешь внутреннее соединение полученной таблицы и ТЗ и выбираешь только те, где всё совпало. По-моему так
|
|||
16
r1000
07.04.15
✎
09:29
|
(14)Спасибо!, но у меня количество ключей не известно, а собирать запрос муторно, наверняка есть более простой вариант...
|
|||
17
r1000
07.04.15
✎
09:32
|
(15)Это после запроса еще и перебор делать ? Некрасиво...
|
|||
18
StaticUnsafe
07.04.15
✎
09:36
|
А если одно свойство в ТЗ 1 раз, а в ТЧ 3 раза, они тоже не совпадают?
Короче хэшируй все ТЧ и ТЗ и по совпадению хэша )) |
|||
19
r1000
07.04.15
✎
09:37
|
(18)Нет. Не совпадают. Строк и там и там должно быть одинаково, и значения строк должны быть одинаковыми, а порядок строк не важен.
|
|||
20
crotnn
07.04.15
✎
09:39
|
Давненько решал подобную задачу. Сразу предупреждаю, это была только наработка, в проект не вошла, но зато работает )))
ВЫБРАТЬ ЭлементыНоменклатурыЗначенияСвойств.Ссылка ПОМЕСТИТЬ ВТ_СоставИзСпискаСвойств ИЗ Справочник.ЭлементыНоменклатуры.ЗначенияСвойств КАК ЭлементыНоменклатурыЗначенияСвойств ГДЕ ЭлементыНоменклатурыЗначенияСвойств.Значение В(&СписокСвойств) СГРУППИРОВАТЬ ПО ЭлементыНоменклатурыЗначенияСвойств.Ссылка ИМЕЮЩИЕ КОЛИЧЕСТВО(ЭлементыНоменклатурыЗначенияСвойств.Ссылка) = &КоличествоСвойств ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЭлементыНоменклатурыЗначенияСвойств.Ссылка ИЗ ВТ_СоставИзСпискаСвойств КАК ВТ_СоставИзСпискаСвойств ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭлементыНоменклатуры.ЗначенияСвойств КАК ЭлементыНоменклатурыЗначенияСвойств ПО ВТ_СоставИзСпискаСвойств.Ссылка = ЭлементыНоменклатурыЗначенияСвойств.Ссылка СГРУППИРОВАТЬ ПО ЭлементыНоменклатурыЗначенияСвойств.Ссылка ИМЕЮЩИЕ КОЛИЧЕСТВО(ЭлементыНоменклатурыЗначенияСвойств.Ссылка) = &КоличествоСвойств Где СписокСвойств - массив всех строк колонки твоей ТЗ, КоличествоСвойств - количество строк в ТЗ. |
|||
21
User_Agronom
07.04.15
✎
09:41
|
(0) "...Как запросом сделать ?"
(16) "...а собирать запрос муторно, наверняка есть более простой вариант..." У меня нет слов описать эту ситуацию. |
|||
22
crotnn
07.04.15
✎
09:43
|
+(20)В первом запросе формируется ВТ из элементов справочника, у которого в ТЧ есть хотя бы одно свойство из искомого и количество свойств совпадает с искомым, во втором левое соединение ищет итоговый элемент по полному вхождению ТЗ в ТЧ и совпадению количества строк ТЗ и ТЧ
|
|||
23
D_E_S_131
07.04.15
✎
09:44
|
(7) "а мне нужен элемент" — если суть вопроса только в этом, то достаточно из ТЗ выгрузить значения из колонки в массив, массив передать как параметр. Из "Справочник.ЭлементыНоменклатуры.ЗначенияСвойств" выбирать поле "Ссылка", используя условие "В (..)" и конструкцию "ВЫБРАТЬ ПЕРВЫЕ 1".
|
|||
24
r1000
07.04.15
✎
09:45
|
(23)Но туда может попасть любой элемент, даже если у него будет больше строк в табл.части
|
|||
25
crotnn
07.04.15
✎
09:45
|
(23) Нет, он выберет все элементы, у которых совпадет хотя бы одно свойство ))) А ТС нужно полное совпадение.
|
|||
26
r1000
07.04.15
✎
09:46
|
(22)спасибо. Сейчас попробую, хотя код не выглядит 100% надежным.
|
|||
27
crotnn
07.04.15
✎
09:51
|
(26) Сам шоке, но реально работает))) Думаю, направление понятно.
|
|||
28
Ёпрст
07.04.15
✎
09:53
|
(20) это не совсем верное решение - привязка к количеству свойств.
Это будет работать только, если все значения свойства уникальны для каждого объекта. А это, далеко не всегда так. |
|||
29
r1000
07.04.15
✎
09:56
|
(27)Работает, но сейчас проверю в свете (28)
|
|||
30
Ёпрст
07.04.15
✎
09:58
|
(29) а чего проверять очевидное ?
|
|||
31
crotnn
07.04.15
✎
10:05
|
(28) Да, изначально задача стояла записывать уникальный состав ТЧ для элемента справочника. По идее, если есть несколько элементов с одинаковым составом ТЧ, то запрос должен вернуть все эти элементы. Надеюсь r1000 проверит и напишет о результатах
|
|||
32
Ёпрст
07.04.15
✎
10:08
|
(31) тч может быть и уникальна, а вот значения свойств для элемента справочника - нет (и наоборот). И всё, привет котёнку.
|
|||
33
r1000
07.04.15
✎
10:11
|
Ну пока тесты дают правильную работу. У меня значения ТЗ ищутся в подчиненном ей справочнике. И задача, строго говоря, стоит только в том, чтобы узнать существует ли хоть один элемент с таким набором значений(если существует, то создавать его не нужно).
|
|||
34
crotnn
07.04.15
✎
10:13
|
(33) Ну вот именно эту задачу я и решал.
|
|||
35
1976vas
07.04.15
✎
10:15
|
(32) А как можно доработать? Или нельзя?
|
|||
36
crotnn
07.04.15
✎
10:18
|
(32) А что значит "значения не уникальны"? Допустим, есть справочник, в нем ТЧ "Цвета", у одно элемента в тч белый, зеленый, синий; у другого красный, зеленый, синий. Значения свойств для элемента уникальны или нет?
|
|||
37
Ёпрст
07.04.15
✎
10:20
|
(36)
Элемент вася, вид свойсва цвет, значения голубой, голубой, голубой.. |
|||
38
r1000
07.04.15
✎
10:23
|
(37)А, понятно. Нет, столько голубых быть не может. Может быть только один.
|
|||
39
r1000
07.04.15
✎
10:24
|
т.е. в тч все значения уникальны для данной тч.
|
|||
40
Ёпрст
07.04.15
✎
10:24
|
(38) где это написано "что не может" ? Как проверял ?
С чего такая уверенность ? Это сплошь и рядом, особенно, если свойства задают групповыми обработками |
|||
41
Ёпрст
07.04.15
✎
10:24
|
задвоенных свойсв.. вагон
|
|||
42
1976vas
07.04.15
✎
10:25
|
А свернуть нельзя сначала значения?
|
|||
43
r1000
07.04.15
✎
10:31
|
(40)Сам алгоритм создания элементов справочника не пропустит задвоения. Но сделаю еще дополнительные костыли для уверенности.
|
|||
44
Ёпрст
07.04.15
✎
10:31
|
(43) та ну ?
:) |
|||
45
D_E_S_131
07.04.15
✎
10:47
|
(43) РС с измерениями "Номенклатура, Свойство" мог бы это гарантировать, а так...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |