Нужно найти дубль номенклатуры по списку доп свойств.
Но при этом не все свойства могут быть заполнены
Например есть 10 доп реквизитов
Есть Номенклатура 1 у которой заполнены первые 7 свойств 10
Есть Номенклатура 2 у которой заполнены последние 7 свойств из 10
В таком случае ном 1 и ном 2 считаются дублями если совпадают значения 4х пересекающихся заполненных доп свойств
Итоговое количество свойств не известно (которое в примере 10)
Но при этом не все свойства могут быть заполнены
Например есть 10 доп реквизитов
Есть Номенклатура 1 у которой заполнены первые 7 свойств 10
Есть Номенклатура 2 у которой заполнены последние 7 свойств из 10
В таком случае ном 1 и ном 2 считаются дублями если совпадают значения 4х пересекающихся заполненных доп свойств
Итоговое количество свойств не известно (которое в примере 10)
По теме из базы знаний
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- 1С 7.7 Книга доходов и расходов и кассовая книга любой конфигурации для предприятий на УСН, ПСН, ЕСХН
- Загрузка документов из Excel в 1С: УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы
- Распознавание и загрузка сканов в 1С "одним нажатием". УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.
- Поиск документов по регистрационному номеру 1С:ДО [Расширение]
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) А если посмотреть на вопрос иначе: нам явно не подходит, если одно из свойств не совпадает.
Берём таблицу Номенклатура поставщика - свойство - значение, соединяем с нашей по одинаковым свойству-значению и сворачиваем, чтобы получить пары номенклатура поставщика - наша. Это будет таблица потенциально подходящих.
Дальше делаем то же, но для отличающихся значений одинакового свойства. Это будет таблица явно не подходящих.
То что есть в первой и нет во второй должно подходить. Левым соединением первой со второй и по условию is null на правую таблицу получим то что нужно.
Этот вариант правда не будет приоритизировать номенклатуру по количеству совпавших свойств - у одной совпало 5, у другой 4, а 5 не заполнено - оба варианта подходящих.
Берём таблицу Номенклатура поставщика - свойство - значение, соединяем с нашей по одинаковым свойству-значению и сворачиваем, чтобы получить пары номенклатура поставщика - наша. Это будет таблица потенциально подходящих.
Дальше делаем то же, но для отличающихся значений одинакового свойства. Это будет таблица явно не подходящих.
То что есть в первой и нет во второй должно подходить. Левым соединением первой со второй и по условию is null на правую таблицу получим то что нужно.
Этот вариант правда не будет приоритизировать номенклатуру по количеству совпавших свойств - у одной совпало 5, у другой 4, а 5 не заполнено - оба варианта подходящих.
(6)
для начала
посмотреть,есть ли дубли в таблицах номенклатура
(между собой)
и в доп.свойствах между собой
-----------------
для начала
посмотреть,есть ли дубли в таблицах номенклатура
(между собой)
и в доп.свойствах между собой
-----------------
Прикрепленные файлы:
Новый текстовый документ.txt
(8)
ну и отбор по количеству доп.свойств
-----------------------------------------------------
от четырех доп.свойств к номенклатуре или какое условие,
я так понимаю с одним свойством номенклатура не нужна или быть не может
--------
сортировка по количеству свойств в номенклатуре
и внутри свойств
а дальше еще не знаю :)
ну и отбор по количеству доп.свойств
-----------------------------------------------------
от четырех доп.свойств к номенклатуре или какое условие,
я так понимаю с одним свойством номенклатура не нужна или быть не может
--------
сортировка по количеству свойств в номенклатуре
и внутри свойств
а дальше еще не знаю :)
Давайте называть вещи прямо. Это не дубли, это аналоги. Допустим, у нас есть 10 свойств.
Номенклатура А совпадает с номенклатурой Б по свойствам 1,3,8,9
Номенклатура Б совпадает с номенклатурой В по свойствам 1,5,7,9
Номенклатура В совпадает с номенклатурой Г по свойствам 3,4,6,8
Номенклатура Г совпадает с номенклатурой А по свойствам 2,4,7,8
При этом (А ≠ В и Г), (Б ≠ А и Г), В ≠ А и Б), (Г ≠ Б и В)...
Что со всем этим делать - непонятно. То есть на практике достоверно можно подобрать аналоги только для одной номенклатуры. В том смысле, что за эталон берем только один набор из 10-ти свойств и только по нему ищем совпадения для "хотя бы 4-х свойств"...
Предполагаю, что это 10 левых соединений для каждого свойства. А потом считать количество ненулевых соединений с одинаковой номенклатурой.
Номенклатура А совпадает с номенклатурой Б по свойствам 1,3,8,9
Номенклатура Б совпадает с номенклатурой В по свойствам 1,5,7,9
Номенклатура В совпадает с номенклатурой Г по свойствам 3,4,6,8
Номенклатура Г совпадает с номенклатурой А по свойствам 2,4,7,8
При этом (А ≠ В и Г), (Б ≠ А и Г), В ≠ А и Б), (Г ≠ Б и В)...
Что со всем этим делать - непонятно. То есть на практике достоверно можно подобрать аналоги только для одной номенклатуры. В том смысле, что за эталон берем только один набор из 10-ти свойств и только по нему ищем совпадения для "хотя бы 4-х свойств"...
Предполагаю, что это 10 левых соединений для каждого свойства. А потом считать количество ненулевых соединений с одинаковой номенклатурой.
Я делал так:
1. Пользователь определяет, какие свойства более приоритетны, какие менее (Например, Тип [Стул, Стол] более приоритетен, чем артикул, т.к. если это тот же артикул, но не стул, а стол, то бессмыслица, а если оба столы, но разные артикулы, то могут быть и взаимозаменяемы. Свойств конечно больше 2-хб 4-5 обычно)
2. Программа ищет сначала по всем свойствам, потом по всем-1 и так далее, пока аналогов не станет больше 0 (Столов ар-деко с таким артикулом нет? Далее столов ар-деко нет? Далее столов нет? Есть? Показываем столы! )
3. Пользователь в интерфейсе просматривает результат для каждой позиции и решает - аналог это или нет.
Реально там была электроника, фарады, амперы, но суть такая. Пользователи довольны.
1. Пользователь определяет, какие свойства более приоритетны, какие менее (Например, Тип [Стул, Стол] более приоритетен, чем артикул, т.к. если это тот же артикул, но не стул, а стол, то бессмыслица, а если оба столы, но разные артикулы, то могут быть и взаимозаменяемы. Свойств конечно больше 2-хб 4-5 обычно)
2. Программа ищет сначала по всем свойствам, потом по всем-1 и так далее, пока аналогов не станет больше 0 (Столов ар-деко с таким артикулом нет? Далее столов ар-деко нет? Далее столов нет? Есть? Показываем столы! )
3. Пользователь в интерфейсе просматривает результат для каждой позиции и решает - аналог это или нет.
Реально там была электроника, фарады, амперы, но суть такая. Пользователи довольны.
Есть номенклатура со списком значений свойств - пришедшая от поставщика, задача - понять есть ли в базе подходящая номенклатура, что бы для нее завести номенклатуру поставщика
Например
Пришла номенклатура строкой + свойства
определили для нее вид нашей базы, по виду определили доп свойства номенклатуры в нашей базе
вид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 незаполнено
Например
Пришла номенклатура строкой + свойства
определили для нее вид нашей базы, по виду определили доп свойства номенклатуры в нашей базе
вид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 незаполнено
(26) именно так
хотим завести или найти одну нашу номенклатуру
и с ней связать 25 номенклатур поставщика со своими ценами
и еще все свойства всех поставщиков хотим хранить в базе как свои свойства вида номенклатуры
т.е. для примера выше если мы нашли такую номенклатуру по совпадению 3х свойств (4 свойство есть только в нашей базе, 5 свойство есть только у поставщика - мы его к себе только добавили и значит в нашей базе еще нет номенклатуры с этим заполненным свойством) то на выходе получим нашу номенклатуру с 5ю заполненными свойствами
хотим завести или найти одну нашу номенклатуру
и с ней связать 25 номенклатур поставщика со своими ценами
и еще все свойства всех поставщиков хотим хранить в базе как свои свойства вида номенклатуры
т.е. для примера выше если мы нашли такую номенклатуру по совпадению 3х свойств (4 свойство есть только в нашей базе, 5 свойство есть только у поставщика - мы его к себе только добавили и значит в нашей базе еще нет номенклатуры с этим заполненным свойством) то на выходе получим нашу номенклатуру с 5ю заполненными свойствами
(22) Я правильно понимаю, что вы исходите из того, что будет некая обработка, на которой пользователь вручную заполняет свойства номенклатуры от поставщика (с бумажки или глядя в ексель-прайс), а система должна подбирать существующие аналоги, после чего пользователь по кнопке формирует запись справочника "Номенклатура поставщиков". Так?
Думаю, что так, именно из этого я исходил в ответе (14) .
Думаю, что так, именно из этого я исходил в ответе (14) .
(28) универсальная обработка читает прайсы, далее пользователь сопоставляет вид поставщика с нашим видом, потом обработка читает свойства поставщика - пользователю только галочки поставить что св-во поставщика создать в нашей базе
создаются свойства, читается номенклатура из прайса - например прайс № 1
тут мы всю номенклатуру просто создадим и свойства заполним
а вот на втором прайсе - уже по свойствам надо найти номенклатуру созданную из 1-ого прайса и создать ей только вторую номенклатуру поставщика
создаются свойства, читается номенклатура из прайса - например прайс № 1
тут мы всю номенклатуру просто создадим и свойства заполним
а вот на втором прайсе - уже по свойствам надо найти номенклатуру созданную из 1-ого прайса и создать ей только вторую номенклатуру поставщика
(33)
какие галочки ?
------------------------------
матрас обычный
новый матрас
обычный матрас
елки-палки
палки-елки
---------------
я бы начал с поиска дублей в базе
количества с минусами и научить пользователей работать в базе
без проведения задним числом
--------------------
а остальное по ходу поступления
а не внести миллион не нужных наименований
какие галочки ?
------------------------------
матрас обычный
новый матрас
обычный матрас
елки-палки
палки-елки
---------------
я бы начал с поиска дублей в базе
количества с минусами и научить пользователей работать в базе
без проведения задним числом
--------------------
а остальное по ходу поступления
а не внести миллион не нужных наименований
(33) Ну, ок, алгоритм поиска для каждой позиции я подсказал. По моему мнению нет никаких других способов, кроме как связывать каждое свойство отдельным соединением, а потом агрегировать результат по количеству совпадений.
Все дальнейшие манипуляции с информацией лежат уже вне плоскости данной темы, дальше вы уже напишете обработку сами.
Все дальнейшие манипуляции с информацией лежат уже вне плоскости данной темы, дальше вы уже напишете обработку сами.
(41)
вы как думаете ?
вносить или разобрать
или вносить и все равно разбирать ?
дубли в таком количестве затеряются сейчас и найдутся потом
--------------------------
автоматом с алгоритмом работы вы можете 5млн.позиций загнать в базу
даже пользователи научатся ее искать
но если они работают, как им нравится, то это другая сторона медали
вы как думаете ?
вносить или разобрать
или вносить и все равно разбирать ?
дубли в таком количестве затеряются сейчас и найдутся потом
--------------------------
автоматом с алгоритмом работы вы можете 5млн.позиций загнать в базу
даже пользователи научатся ее искать
но если они работают, как им нравится, то это другая сторона медали
думаю соединить 2 таблицы
таблица свойств поставщика с доп свойствами номенклатуры
где св-во поставщика = св-во наше
и значение поставщика = значение наше или значение наше = null
и далее сколько будет строк с одинаковой номенклатурой
если количество строк по одной номенклатуре = количество свойств поставщика то значит все свойства совпали или у нас в базе не заполнено - значит это подходящая номенклатура
таблица свойств поставщика с доп свойствами номенклатуры
где св-во поставщика = св-во наше
и значение поставщика = значение наше или значение наше = null
и далее сколько будет строк с одинаковой номенклатурой
если количество строк по одной номенклатуре = количество свойств поставщика то значит все свойства совпали или у нас в базе не заполнено - значит это подходящая номенклатура
(40) Не пойдет. Как вы таким соединением будете искать совпадения по четырем свойствам из семи? Допустим, поставщик вам прислал номенклатуру с семью свойствами. Вы их все заполнили. По каким свойствам будете связывать? По всем семи? Или будете выбирать какие-то четыре из этих семи?
Если по всем семи - то либо результат вас разочарует, либо вы неправильно сформулировали задачу в исходном посте.
Если по всем семи - то либо результат вас разочарует, либо вы неправильно сформулировали задачу в исходном посте.
это не мое :)
если дяди Васи и тети Вали в базе не знают,
что есть настоящая мышка, без проводов и не пищит
или понимание, что удалить номенклатуру годичной давности
из базы можно в любой момент без проблем, даже если ее покупали два раза
и много чего можно с их точки зрения.....только кто в ответе за ведение учета ?
если дяди Васи и тети Вали в базе не знают,
что есть настоящая мышка, без проводов и не пищит
или понимание, что удалить номенклатуру годичной давности
из базы можно в любой момент без проблем, даже если ее покупали два раза
и много чего можно с их точки зрения.....только кто в ответе за ведение учета ?
Интересно, hadhunter-ы сами начали заниматься разработкой в 1с... Давно пора, у программистов с рекрутинговыми агентствами давняя любовь.
В свойствах номенклатуры случайно не ответы соискателей на вопросы по анкетам?
В свойствах номенклатуры случайно не ответы соискателей на вопросы по анкетам?
Алгоритм очень простой. выбрали номенклатуру с совпадающими свойствами, поместили во временную таблицу.
Далее - соединили эту таблицу по несовпадающим свойствам
и на конец поставили условие - выбрать из первой таблицы те элементы - которые не встречаются во второй.
Для примера использовал последнюю конфигурацию БСП
Далее - соединили эту таблицу по несовпадающим свойствам
и на конец поставили условие - выбрать из первой таблицы те элементы - которые не встречаются во второй.
Для примера использовал последнюю конфигурацию БСП
ВЫБРАТЬ
_ДемоНоменклатураДополнительныеРеквизиты1.Ссылка КАК Ссылка,
_ДемоНоменклатураДополнительныеРеквизиты1.Свойство КАК Свойство,
_ДемоНоменклатураДополнительныеРеквизиты1.Значение КАК Значение
ПОМЕСТИТЬ НоменклатураСПохожимиСвойствами
ИЗ
Справочник._ДемоНоменклатура.ДополнительныеРеквизиты КАК _ДемоНоменклатураДополнительныеРеквизиты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатура.ДополнительныеРеквизиты КАК _ДемоНоменклатураДополнительныеРеквизиты1
ПО _ДемоНоменклатураДополнительныеРеквизиты.Свойство = _ДемоНоменклатураДополнительныеРеквизиты1.Свойство
И _ДемоНоменклатураДополнительныеРеквизиты.Значение = _ДемоНоменклатураДополнительныеРеквизиты1.Значение
И _ДемоНоменклатураДополнительныеРеквизиты.Ссылка <> _ДемоНоменклатураДополнительныеРеквизиты1.Ссылка
ГДЕ
_ДемоНоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
НоменклатураСПохожимиСвойствами.Ссылка КАК Ссылка,
НоменклатураСПохожимиСвойствами.Свойство КАК Свойство,
НоменклатураСПохожимиСвойствами.Значение КАК Значение
ПОМЕСТИТЬ НоменклатураСНесовпадающимиСвойствами
ИЗ
Справочник._ДемоНоменклатура.ДополнительныеРеквизиты КАК _ДемоНоменклатураДополнительныеРеквизиты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ НоменклатураСПохожимиСвойствами КАК НоменклатураСПохожимиСвойствами
ПО _ДемоНоменклатураДополнительныеРеквизиты.Свойство = НоменклатураСПохожимиСвойствами.Свойство
И _ДемоНоменклатураДополнительныеРеквизиты.Значение <> НоменклатураСПохожимиСвойствами.Значение
ГДЕ
_ДемоНоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
НоменклатураСПохожимиСвойствами.Ссылка КАК Ссылка
ИЗ
НоменклатураСПохожимиСвойствами КАК НоменклатураСПохожимиСвойствами
ГДЕ
НЕ НоменклатураСПохожимиСвойствами.Ссылка В
(ВЫБРАТЬ
НоменклатураСНесовпадающимиСвойствами.Ссылка
ИЗ
НоменклатураСНесовпадающимиСвойствами КАК НоменклатураСНесовпадающимиСвойствами)
Показать
luda33, как в этом случае поступите: есть номенклатура1 в базе, у которой заполнено 6 свойств. Прилетает номенклатура3, у которой всего 5 свойств и они совпадают с номенклатура1 и номенклатура2. Будете создавать новую номенклатуру?
На мой взгляд задача достаточно простая, делается в несколько итераций
0) в цикле перебираем все св-ва, попутно формируем
а) часть запроса с внутренними соединениями с табличной частью ДополнительныеРеквизиты
б) список пар Свойство/Значение в ТЗ с жестко типизированными колонками
(потом будем использовать как "&ДопРеквизиты")
а теперь Сам запрос, пошагово
1) ищем все у кого необходимые св-ва есть (через внутренние соединения, см. п.0а)
и помещаем во временную таблицу "ИтерацияПервая"
2) Ищем лишних через внутреннее соединение
3) ну а дальше из Первой итерации выбираем с условием
0) в цикле перебираем все св-ва, попутно формируем
а) часть запроса с внутренними соединениями с табличной частью ДополнительныеРеквизиты
б) список пар Свойство/Значение в ТЗ с жестко типизированными колонками
(потом будем использовать как "&ДопРеквизиты")
а теперь Сам запрос, пошагово
1) ищем все у кого необходимые св-ва есть (через внутренние соединения, см. п.0а)
и помещаем во временную таблицу "ИтерацияПервая"
2) Ищем лишних через внутреннее соединение
ВЫБРАТЬ РАЗЛИЧНЫЕ спр.Ссылка
ПОМЕСТИТЬ ЕстьНенужное
ИЗ ИтерацияПервая КАК спр
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизиты
ПО ДопРеквизиты.Ссылка=спр.Ссылка
ГДЕ НЕ (ДопРеквизиты.Свойство, ДопРеквизиты.Значение) В (&ДопРеквизиты)
3) ну а дальше из Первой итерации выбираем с условием
ГДЕ НЕ спр.Ссылка В (ВЫБРАТЬ Ссылка ИЗ ЕстьНенужное)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот