Поиск элемента справочника запросом #739183


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

В этой группе 1С