Предложите алгоритм поиска

1. luda33 15.11.20 18:26 Сейчас в теме
Нужно найти дубль номенклатуры по списку доп свойств.
Но при этом не все свойства могут быть заполнены
Например есть 10 доп реквизитов
Есть Номенклатура 1 у которой заполнены первые 7 свойств 10
Есть Номенклатура 2 у которой заполнены последние 7 свойств из 10
В таком случае ном 1 и ном 2 считаются дублями если совпадают значения 4х пересекающихся заполненных доп свойств
Итоговое количество свойств не известно (которое в примере 10)
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. FatPanzer 15.11.20 18:40 Сейчас в теме
(1)
Итоговое количество свойств не известно (которое в примере 10)
То есть это какой-то тестовый пример для приема на работу, а не реальная задача?
5. luda33 15.11.20 19:19 Сейчас в теме
(3) реальная задача соединяю 2 номенклатуры от разных поставщиков которые ведут учет по свойствам но каждый поставщик по своему набору свойств в чем то пересекающимся
52. davealone 165 16.11.20 00:23 Сейчас в теме
(1) А если посмотреть на вопрос иначе: нам явно не подходит, если одно из свойств не совпадает.
Берём таблицу Номенклатура поставщика - свойство - значение, соединяем с нашей по одинаковым свойству-значению и сворачиваем, чтобы получить пары номенклатура поставщика - наша. Это будет таблица потенциально подходящих.

Дальше делаем то же, но для отличающихся значений одинакового свойства. Это будет таблица явно не подходящих.

То что есть в первой и нет во второй должно подходить. Левым соединением первой со второй и по условию is null на правую таблицу получим то что нужно.

Этот вариант правда не будет приоритизировать номенклатуру по количеству совпавших свойств - у одной совпало 5, у другой 4, а 5 не заполнено - оба варианта подходящих.
2. XAKEP 15.11.20 18:39 Сейчас в теме
6. luda33 15.11.20 19:20 Сейчас в теме
8. XAKEP 15.11.20 19:27 Сейчас в теме
(6)
для начала

посмотреть,есть ли дубли в таблицах номенклатура
(между собой)

и в доп.свойствах между собой

-----------------
Прикрепленные файлы:
Новый текстовый документ.txt
9. XAKEP 15.11.20 19:31 Сейчас в теме
(8)
ну и отбор по количеству доп.свойств
-----------------------------------------------------
от четырех доп.свойств к номенклатуре или какое условие,
я так понимаю с одним свойством номенклатура не нужна или быть не может

--------
сортировка по количеству свойств в номенклатуре
и внутри свойств


а дальше еще не знаю :)
11. luda33 15.11.20 19:45 Сейчас в теме
(9) условие - совпадают все заполненные в обеих таблицах значения доп свойств
1, 4 или все 10 не важно - главное в обеих таблицах есть значение
13. XAKEP 15.11.20 19:47 Сейчас в теме
(11)
я вам текстовый файл сбросил в (8)

можете изменить его,как вы предполагаете условие из (11)
4. jour 16 15.11.20 19:15 Сейчас в теме
Ну просто же, взять две таблицы номенклатура, соединить по свойствам и ссылка неравно ссылка, сгруппировать на количество совпадений
7. luda33 15.11.20 19:22 Сейчас в теме
(4) туда попадут пары ном1 и ном2 у которых совпадает одно свойство и не совпадают все остальные
10. XAKEP 15.11.20 19:43 Сейчас в теме
если я правильно понимаю, то вам нужен поиск дублей между свойствами.

а номенклатура - уже как ключевое поле связи.
12. luda33 15.11.20 19:45 Сейчас в теме
(10) да - нужно найти номенклатуру дубли по списку имеющихся свойств
14. FatPanzer 15.11.20 19:53 Сейчас в теме
Давайте называть вещи прямо. Это не дубли, это аналоги. Допустим, у нас есть 10 свойств.
Номенклатура А совпадает с номенклатурой Б по свойствам 1,3,8,9
Номенклатура Б совпадает с номенклатурой В по свойствам 1,5,7,9
Номенклатура В совпадает с номенклатурой Г по свойствам 3,4,6,8
Номенклатура Г совпадает с номенклатурой А по свойствам 2,4,7,8

При этом (А ≠ В и Г), (Б ≠ А и Г), В ≠ А и Б), (Г ≠ Б и В)...

Что со всем этим делать - непонятно. То есть на практике достоверно можно подобрать аналоги только для одной номенклатуры. В том смысле, что за эталон берем только один набор из 10-ти свойств и только по нему ищем совпадения для "хотя бы 4-х свойств"...

Предполагаю, что это 10 левых соединений для каждого свойства. А потом считать количество ненулевых соединений с одинаковой номенклатурой.
15. XAKEP 15.11.20 19:55 Сейчас в теме
условие - совпадают все заполненные в обеих таблицах значения доп свойств

пока только зависание :)
16. XAKEP 15.11.20 19:58 Сейчас в теме
или переводить слова в буквы
- буквы в числа
- подсчитывать сумму чисел во всем наборе свойств
и по ней искать совпадения

-----------------
вобщем нужно какой-то хеш-сумма каждого набора свойств
17. XAKEP 15.11.20 20:02 Сейчас в теме
а не могли бы вы сюда свойства номенклатуры выложить
только набор свойств в формате таблицы :) ?
18. XAKEP 15.11.20 20:14 Сейчас в теме
нууу....я денег не возьму :)

разве стартмани несколько :)

---------------
интересно количество информации в массиве
не сама информация :)
23. luda33 15.11.20 21:35 Сейчас в теме
24. XAKEP 15.11.20 21:35 Сейчас в теме
(23)
да я не жду :)

как решение , нашли ?
19. XAKEP 15.11.20 20:36 Сейчас в теме
вот так всегда...на самом интересном месте....
20. tetraren 37 15.11.20 20:38 Сейчас в теме
Я делал так:
1. Пользователь определяет, какие свойства более приоритетны, какие менее (Например, Тип [Стул, Стол] более приоритетен, чем артикул, т.к. если это тот же артикул, но не стул, а стол, то бессмыслица, а если оба столы, но разные артикулы, то могут быть и взаимозаменяемы. Свойств конечно больше 2-хб 4-5 обычно)

2. Программа ищет сначала по всем свойствам, потом по всем-1 и так далее, пока аналогов не станет больше 0 (Столов ар-деко с таким артикулом нет? Далее столов ар-деко нет? Далее столов нет? Есть? Показываем столы! )

3. Пользователь в интерфейсе просматривает результат для каждой позиции и решает - аналог это или нет.

Реально там была электроника, фарады, амперы, но суть такая. Пользователи довольны.
21. XAKEP 15.11.20 21:16 Сейчас в теме
(20)
да без визуализации вообще не реально понять задачу
типа первый должен совпадать во всех десятых на пятнадцатом из двух

это же не логика 25-го уровня дзен-шуй :)
22. luda33 15.11.20 21:34 Сейчас в теме
Есть номенклатура со списком значений свойств - пришедшая от поставщика, задача - понять есть ли в базе подходящая номенклатура, что бы для нее завести номенклатуру поставщика
Например
Пришла номенклатура строкой + свойства
определили для нее вид нашей базы, по виду определили доп свойства номенклатуры в нашей базе
вид1, св1, св2, св3, св4
оказалось что пришедшая номенклатура имеет 4 свойства, 3 из которых совпадают с нашими свойствами и 4 новое -
первое то делаем это в наш вид1 добавляем новое св-во5
далее пришедшие данные имеют вид
св1 = знач1
св2 = знач2
св3 = знач3
св5 = знач5
значит надо найти в нашей базе номенклатуру где
св1=знач1 или св1 незаполнено
св2=знач2 или св2 незаполнено
св3=знач3 или св3 незаполнено
св4=любое значение или св4 незаполнено (св4 нет у пришедшей номенклатуры)
св5=знач5 или св5 незаполнено
user1464234; +1 Ответить
25. user1464234 15.11.20 21:38 Сейчас в теме
(22) а если в следующий раз от поставщика придет номенклатура такая же, но св4 будет заполнено?
29. luda33 15.11.20 21:50 Сейчас в теме
(25) от этого вряд ли, от другого поставщика - возможно - тогда это будет та же наша номенклатура и новая номенклатура нового поставщика
30. user1464234 15.11.20 21:52 Сейчас в теме
(29) то есть номенклатура от разных поставщиков может быть продукцией одного производителя и в справочнике вы заведете один элемент номенклатуры?
35. luda33 15.11.20 22:00 Сейчас в теме
(30) да наверное, разные поставщики продают одно и то же по разным ценам
26. XAKEP 15.11.20 21:39 Сейчас в теме
(22)
подождите.....заказчик хочет, например в УТ (надеюсь)
связать номенклатуру поставщиков со своей

--------------------

у вас на руках 25 прайсов по 100тыс. строк в каждом
и вы хотите их связать с базой заказчика ?
27. XAKEP 15.11.20 21:40 Сейчас в теме
(26)
нет, я не кашпировский, но что-то мне так подумалось :)

славяне любят, чтобы одной кнопкой все работало

но как :)
31. luda33 15.11.20 21:55 Сейчас в теме
(26) именно так
хотим завести или найти одну нашу номенклатуру
и с ней связать 25 номенклатур поставщика со своими ценами
и еще все свойства всех поставщиков хотим хранить в базе как свои свойства вида номенклатуры
т.е. для примера выше если мы нашли такую номенклатуру по совпадению 3х свойств (4 свойство есть только в нашей базе, 5 свойство есть только у поставщика - мы его к себе только добавили и значит в нашей базе еще нет номенклатуры с этим заполненным свойством) то на выходе получим нашу номенклатуру с 5ю заполненными свойствами
32. XAKEP 15.11.20 21:57 Сейчас в теме
(31)
но-но-но....

во первых - база только наполняется или на ней уже работают ?

--------------------------
36. luda33 15.11.20 22:02 Сейчас в теме
(32) в базе работают но виды и свойства еще не создавали
как новой номенклатуре из прайса будут искать нашу (без свойств) это отдельный вопрос
Но пока насколько понимаю больше вопрос к расширению ассортимента
34. XAKEP 15.11.20 22:00 Сейчас в теме
(31)
автоматика в этом случае
может оказать быстрый результат
и печальные последствия для разгребайки


--------------------------

лучше ручная коробка передач

----------------
так в базе уже работали или только начали учет ?
очень важный начальный момент
28. FatPanzer 15.11.20 21:49 Сейчас в теме
(22) Я правильно понимаю, что вы исходите из того, что будет некая обработка, на которой пользователь вручную заполняет свойства номенклатуры от поставщика (с бумажки или глядя в ексель-прайс), а система должна подбирать существующие аналоги, после чего пользователь по кнопке формирует запись справочника "Номенклатура поставщиков". Так?

Думаю, что так, именно из этого я исходил в ответе (14) .
33. luda33 15.11.20 21:59 Сейчас в теме
(28) универсальная обработка читает прайсы, далее пользователь сопоставляет вид поставщика с нашим видом, потом обработка читает свойства поставщика - пользователю только галочки поставить что св-во поставщика создать в нашей базе
создаются свойства, читается номенклатура из прайса - например прайс № 1
тут мы всю номенклатуру просто создадим и свойства заполним
а вот на втором прайсе - уже по свойствам надо найти номенклатуру созданную из 1-ого прайса и создать ей только вторую номенклатуру поставщика
37. XAKEP 15.11.20 22:05 Сейчас в теме
(33)
какие галочки ?
------------------------------

матрас обычный
новый матрас
обычный матрас
елки-палки
палки-елки

---------------
я бы начал с поиска дублей в базе
количества с минусами и научить пользователей работать в базе

без проведения задним числом

--------------------

а остальное по ходу поступления
а не внести миллион не нужных наименований
43. luda33 15.11.20 22:13 Сейчас в теме
(37) какой поступление - хотим на сайте иметь максимально возможный выбор - т.е. то что мы можем заказать у нашего поставщика, но никогда не покупали, и не купим без заказа видимо.
45. XAKEP 15.11.20 22:18 Сейчас в теме
(43)
вобщем от 10млн.строчек новостей.....
47. XAKEP 15.11.20 22:30 Сейчас в теме
(43)
если уже были приходы товара ,
то по них сделать отбор по поставщикам
и внести то, что есть


хотя бы увидите фронт работы
и пользователи вспомнят, как у них называется товар

а уж потом вносите новую
48. XAKEP 15.11.20 22:32 Сейчас в теме
(47)
и меньше поиска на соответствие того, что есть в базе
38. FatPanzer 15.11.20 22:07 Сейчас в теме
(33) Ну, ок, алгоритм поиска для каждой позиции я подсказал. По моему мнению нет никаких других способов, кроме как связывать каждое свойство отдельным соединением, а потом агрегировать результат по количеству совпадений.

Все дальнейшие манипуляции с информацией лежат уже вне плоскости данной темы, дальше вы уже напишете обработку сами.
39. XAKEP 15.11.20 22:08 Сейчас в теме
(33)
можете сказать количество наименований номенклатуры
( включая характеристики)

20-50-100тыс или более
41. luda33 15.11.20 22:12 Сейчас в теме
(39) на данный момент 18 тыс
но это только наше, номенклатуру поставщика не грузили еще
44. XAKEP 15.11.20 22:17 Сейчас в теме
(41)
вы как думаете ?
вносить или разобрать
или вносить и все равно разбирать ?
дубли в таком количестве затеряются сейчас и найдутся потом
--------------------------

автоматом с алгоритмом работы вы можете 5млн.позиций загнать в базу
даже пользователи научатся ее искать

но если они работают, как им нравится, то это другая сторона медали
40. luda33 15.11.20 22:08 Сейчас в теме
думаю соединить 2 таблицы
таблица свойств поставщика с доп свойствами номенклатуры
где св-во поставщика = св-во наше
и значение поставщика = значение наше или значение наше = null

и далее сколько будет строк с одинаковой номенклатурой
если количество строк по одной номенклатуре = количество свойств поставщика то значит все свойства совпали или у нас в базе не заполнено - значит это подходящая номенклатура
42. FatPanzer 15.11.20 22:13 Сейчас в теме
(40) Не пойдет. Как вы таким соединением будете искать совпадения по четырем свойствам из семи? Допустим, поставщик вам прислал номенклатуру с семью свойствами. Вы их все заполнили. По каким свойствам будете связывать? По всем семи? Или будете выбирать какие-то четыре из этих семи?
Если по всем семи - то либо результат вас разочарует, либо вы неправильно сформулировали задачу в исходном посте.
46. XAKEP 15.11.20 22:22 Сейчас в теме
это не мое :)

если дяди Васи и тети Вали в базе не знают,
что есть настоящая мышка, без проводов и не пищит

или понимание, что удалить номенклатуру годичной давности
из базы можно в любой момент без проблем, даже если ее покупали два раза

и много чего можно с их точки зрения.....только кто в ответе за ведение учета ?
49. XAKEP 15.11.20 22:35 Сейчас в теме
приятно было узнать, что кто-то заносит данные пачками,
но еще не знаю, кто их будет разгребать :)


успехов

под новый год расскажите, чем окончилось ... :)
50. user1464234 15.11.20 22:38 Сейчас в теме
Интересно, hadhunter-ы сами начали заниматься разработкой в 1с... Давно пора, у программистов с рекрутинговыми агентствами давняя любовь.
В свойствах номенклатуры случайно не ответы соискателей на вопросы по анкетам?
FatPanzer; +1 Ответить
51. FatPanzer 15.11.20 22:44 Сейчас в теме
(50)
у программистов с рекрутинговыми агентствами давняя любовь.
Ооо, это отдельная тема, они всё никак не успокоятся...
53. vppunctum 5 16.11.20 00:25 Сейчас в теме
рекомендую посмотреть в сторону алгоритма поиска возможных сочетании из множества {1,2...n} элементов по k
54. jour 16 16.11.20 00:32 Сейчас в теме
Алгоритм очень простой. выбрали номенклатуру с совпадающими свойствами, поместили во временную таблицу.
Далее - соединили эту таблицу по несовпадающим свойствам
и на конец поставили условие - выбрать из первой таблицы те элементы - которые не встречаются во второй.
Для примера использовал последнюю конфигурацию БСП


ВЫБРАТЬ
	_ДемоНоменклатураДополнительныеРеквизиты1.Ссылка КАК Ссылка,
	_ДемоНоменклатураДополнительныеРеквизиты1.Свойство КАК Свойство,
	_ДемоНоменклатураДополнительныеРеквизиты1.Значение КАК Значение
ПОМЕСТИТЬ НоменклатураСПохожимиСвойствами
ИЗ
	Справочник._ДемоНоменклатура.ДополнительныеРеквизиты КАК _ДемоНоменклатураДополнительныеРеквизиты
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатура.ДополнительныеРеквизиты КАК _ДемоНоменклатураДополнительныеРеквизиты1
		ПО _ДемоНоменклатураДополнительныеРеквизиты.Свойство = _ДемоНоменклатураДополнительныеРеквизиты1.Свойство
			И _ДемоНоменклатураДополнительныеРеквизиты.Значение = _ДемоНоменклатураДополнительныеРеквизиты1.Значение
			И _ДемоНоменклатураДополнительныеРеквизиты.Ссылка <> _ДемоНоменклатураДополнительныеРеквизиты1.Ссылка
ГДЕ
	_ДемоНоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	НоменклатураСПохожимиСвойствами.Ссылка КАК Ссылка
ИЗ
	НоменклатураСПохожимиСвойствами КАК НоменклатураСПохожимиСвойствами
ГДЕ
	НЕ НоменклатураСПохожимиСвойствами.Ссылка В
				(ВЫБРАТЬ
					НоменклатураСНесовпадающимиСвойствами.Ссылка
				ИЗ
					НоменклатураСНесовпадающимиСвойствами КАК НоменклатураСНесовпадающимиСвойствами)
Показать
55. tetraren 37 16.11.20 07:49 Сейчас в теме
luda33, как в этом случае поступите: есть номенклатура1 в базе, у которой заполнено 6 свойств. Прилетает номенклатура3, у которой всего 5 свойств и они совпадают с номенклатура1 и номенклатура2. Будете создавать новую номенклатуру?
FatPanzer; +1 Ответить
56. FatPanzer 16.11.20 08:59 Сейчас в теме
(55) Я примерно про то же самое спрашивал в (14). Предполагаю, что автору нужен только визуальный подбор, а окончательное решение принимает человек...
57. -AI- 20.11.20 10:45 Сейчас в теме
На мой взгляд задача достаточно простая, делается в несколько итераций

0) в цикле перебираем все св-ва, попутно формируем
а) часть запроса с внутренними соединениями с табличной частью ДополнительныеРеквизиты
б) список пар Свойство/Значение в ТЗ с жестко типизированными колонками
(потом будем использовать как "&ДопРеквизиты")

а теперь Сам запрос, пошагово
1) ищем все у кого необходимые св-ва есть (через внутренние соединения, см. п.0а)
и помещаем во временную таблицу "ИтерацияПервая"

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

3) ну а дальше из Первой итерации выбираем с условием
ГДЕ НЕ спр.Ссылка В (ВЫБРАТЬ Ссылка ИЗ ЕстьНенужное)
Оставьте свое сообщение

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