|
Поиск данных по похожим словам | ☑ | ||
---|---|---|---|---|
0
ХочуСпец
20.09.11
✎
08:58
|
Доброе утро
Пользуюсь встроенной обработкой "Поиск и замена дублирующихся элементов". В частности, произвожу поиск по похожим словам в справочнике Контрагенты. Этот справочник имеет 80 000 записей. Поиск происходит оч долго, по моим подсчетам около 15-20 дней. Может есть какой нибудь другой механизм? Или же выгружать все записи в Excel и производить поиск уже в нем с помощью какого либо механизма? Киньте идею спасибо |
|||
1
Rizhij_Nikitos
20.09.11
✎
09:09
|
Не настаиваю пользоваться моей идея и она может быть глупой. а как появилась цифра 15-20 дней? 80 000 элементов? Можно циклом сделать так, для начала выбираешь все элементы это по времени займет секунд 5-10 не более.
Потом в этой выборке организовываешь цикл следующим образом: Элемент = Берем ПервыйЭлемент из выборки; Пока Выборка.Следующий() Цикл Элемент = Выборка Тогда {Твои действия замены} // После того как с этим элементов прошал все элементы берешь следующий с которым не было действий и прогоняешь уже по тем где не было действий, и так далее пока все выборку не прошел на проверку всех элементов, с каждым новым проходом количество проходимых элементов должно уменьшаться, как минмум на 1 элемент и более. КонецЦикла; |
|||
2
Rizhij_Nikitos
20.09.11
✎
09:09
|
Ну как то так, надеюсь вы поняли меня.
|
|||
3
ХочуСпец
20.09.11
✎
09:11
|
(1) цифра получилась из следующих соображений:
за 30 часов было выполнено около 5 процентов |
|||
4
ХочуСпец
20.09.11
✎
09:12
|
(1) типовая обработка разбивает наименование на слова и по каждому из них производит поиск в базе
|
|||
5
butterbean
20.09.11
✎
09:15
|
(4) а тебе реально нужно найти такие дубли??
|
|||
6
ХочуСпец
20.09.11
✎
09:16
|
(5) реально
н-р, ЗАО Нева и Нева ЗАО является одним и тем же контрагентом |
|||
7
butterbean
20.09.11
✎
09:20
|
(6) ну можно например сделать свою с похожим алгоритмом, только с фильтром по словам типа ЗАО, ООО и т.п.
|
|||
8
ХочуСпец
20.09.11
✎
09:21
|
(7) я привел всего лишь частный пример ) различия могут быть разные
|
|||
9
Rizhij_Nikitos
20.09.11
✎
09:21
|
а ты не пробывал стандартной функцией искать строку в подстроке, используя мой цикл.попробуй.
|
|||
10
vmv
20.09.11
✎
09:23
|
1. с мобильника всегда так долго, попробуй запустить обработку с нормального сервака
|
|||
11
ХочуСпец
20.09.11
✎
09:25
|
(10) как вариант можно попробовать
мой аппарат 2.4 Ггц, 2 Гб памяти проблема в том, что сервак загружать нельзя ( |
|||
12
zender
20.09.11
✎
09:28
|
(0) напиши обработку использующие регулярные выражения
|
|||
13
ХочуСпец
20.09.11
✎
09:29
|
(12) а поподробнее
|
|||
14
Eugeneer
20.09.11
✎
09:29
|
(0) а слабо просмотреть типовую и оптимизировать? Там мождно все оптимизировать что сделает все за 10 минут
|
|||
15
ХочуСпец
20.09.11
✎
09:30
|
(14) если бы знал как не спрашивал
на мой взгляд типовая уже должна быть оптимизированной |
|||
16
YF
20.09.11
✎
09:30
|
(0)а еще может быть:
ЗАО Невская косметика и ЗАО Невск-ая косметика ... |
|||
17
Septera
20.09.11
✎
09:31
|
(6) ваще жесть, откуда ноги растут у таких Контрагентов?
|
|||
18
ХочуСпец
20.09.11
✎
09:31
|
(16) да и такое может вполне быть
|
|||
19
Eugeneer
20.09.11
✎
09:32
|
(15) это ты заблуждаешся..Я за 12 лет убедился что она не может быть оптимизированной.
|
|||
20
ХочуСпец
20.09.11
✎
09:33
|
(17) вообще общая база из 80 000 контрагентов получилась из слияния в нее 7 баз, а общего регламента по вводу контрагентов для пользователей не было
|
|||
21
ХочуСпец
20.09.11
✎
09:33
|
(19) да может и заблуждаюсь и как по вашему можно ее оптимизировать?
|
|||
22
YF
20.09.11
✎
09:34
|
(18) следовательно проще дать бухам разгребать - пусть точно укажут. например создадут группы в справочнике, по каждому настоящему контрагенту, а в нее дубли все положат
|
|||
23
Сергей Д
20.09.11
✎
09:35
|
Хехе :) На Оракле когда-то делал процедуру, вычисляющую степень совпадения строк.
|
|||
24
ХочуСпец
20.09.11
✎
09:35
|
(22) к сожалению это исключено, им как раз нужно выдать группы по похожим словам
|
|||
25
ХочуСпец
20.09.11
✎
09:36
|
может поможет обновление индекса?
|
|||
26
YF
20.09.11
✎
09:37
|
(24) Сами навводили -сами пусть и разгребают - 1, а то ты выдашь группы похожих - они и смотреть не будут, а потом скажут, что это ты так сделал и поэтому у них остатки из разных контрагннтов слились в одного ...
|
|||
27
Septera
20.09.11
✎
09:37
|
(19) только надо отличать "быть оптимизированной" и "иметь различные функции" для поиска, нужно функционал расширять...
|
|||
28
Septera
20.09.11
✎
09:37
|
(20) за такое слияние руки надо оторвать...
|
|||
29
ХочуСпец
20.09.11
✎
09:38
|
(28) кому? ) база готовится для РИБ, необходимо синхронизировать по возможности этих контрагентов
|
|||
30
ХочуСпец
20.09.11
✎
09:39
|
(26) полностью согласен, но ...
|
|||
31
Septera
20.09.11
✎
09:48
|
(29) вот за это РИБ я и не люблю
|
|||
32
zender
20.09.11
✎
09:57
|
||||
33
Rizhij_Nikitos
20.09.11
✎
10:04
|
(30) а ты что хочешь удалить похожих контрагентов и оставить одного?
|
|||
34
ХочуСпец
20.09.11
✎
10:05
|
решил воспользоваться полнотекстовым поиском
т.е. переберать контрагентов и для каждого производить поиск данных (30) да |
|||
35
Rizhij_Nikitos
20.09.11
✎
10:20
|
Ладно скажи,а че тебе не правится мой вариант смотри, берешь первым элемент разбиваешь на слова, и гонишь по цилу, если есть совпадение по всем словам, удаляешь что совпало идешь дальше, далее берешь второй элемент, который остался после форматирования тоже идешь до конца всех оставшихся элементов, с каждым проходом ты уменьшаешь количество элементов, то время исполнения идет быстрее, думаю все это будет сделано минут за 15 не более, и то 15 это много я примерно такое правда стркои из 3 слов были, все делалось для 40к ( но не в 1С, а в Delphi), и прям не успевал чай сделать )
|
|||
36
ХочуСпец
20.09.11
✎
10:23
|
(35) по словам не даст информативного результата
здесь еще должна быть нечеткость н-р, "СтройИнвест" и "Строй-инвест" могут являться одним и тем же контрагентом |
|||
37
Sereja
20.09.11
✎
10:23
|
(0) А Сравнивать всех пацанов по УНН не прокатит ? УНН ведь уникален
|
|||
38
aleks-id
20.09.11
✎
10:29
|
у нас один умелец так запустил обработочку... в результате совершенно разный товар с похожим наименованием слился в один. отголоски этого зоопарка доносятся даже сейчас, спустя 1.5 года после увольнения умельца...
|
|||
39
ХочуСпец
20.09.11
✎
10:34
|
(37) нет по ИНН и КПП не прокатит, не во всех контрагентах заполнен ИНН и КПП
|
|||
40
Eugeneer
20.09.11
✎
10:46
|
Сделай интерактивную форму
|
|||
41
Eugeneer
20.09.11
✎
10:48
|
Сделай свою обработку полнотекстового поиска
http://subsystems.ru/upload/iblock/151/1514f70aca2de02b772b52da447bcfdf.png Выводишь таблицу. показывает все что нашла. По каждому контрагенту все совпадения. Все черточки и прочее можно игнорировать. Все работает путем раскладывания наименований на слова. Ограничить выборку достаточно легко по алгоритмам. |
|||
42
Eugeneer
20.09.11
✎
10:48
|
Еще контрагентов легко обрабатывать по ИНН.
|
|||
43
ХочуСпец
20.09.11
✎
10:49
|
(41) да я так и решил сделать (34)
спс |
|||
44
Eugeneer
20.09.11
✎
10:49
|
(39) так оцени. сколько таких. Может получится что 85 процентов сработает по ИНН, а это уже дохрена.
Короче надо действовать логическими методами и методом исключений. |
|||
45
Eugeneer
20.09.11
✎
10:51
|
Все разнообразие будет сложно написать полностью автоматом. Все может получится методом исключений. 85 по ИНН, остальные полнотекстовым поиском, остаток который никак - ручками.
|
|||
46
ХочуСпец
20.09.11
✎
10:59
|
(45) да по ИНН было неплохо, но эти суки (пользователи) как оказалось нового контрагента создавали путем копирования, не меняя ИНН. Руки бы поотрывать
|
|||
47
Eugeneer
20.09.11
✎
11:00
|
Пипец конечно. Ну что те сказать. Пусть руками все делают.
|
|||
48
Septera
20.09.11
✎
11:06
|
(46) ага... все таки немного прав я был в (28) =)))
|
|||
49
Ткачев
20.09.11
✎
11:52
|
Функция РазбитьНаименование(Наим)
Наимен = СокрЛП(Наим); Масс = Новый Массив; Стр = Найти(Наимен, " "); Пока Стр <> 0 Цикл Масс.Добавить(Лев(Наимен, Стр - 1)); Наимен = Сред(Наимен, Стр + 1); Стр = Найти(Наимен, " "); КонецЦикла; Масс.Добавить(Наимен); Возврат Масс; КонецФункции Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка) Спр = Справочники.Номенклатура.Выбрать(,,,"Код"); Запрос = Новый Запрос; КоличествоСловДляСовпадения = 0; Пока Спр.Следующий() Цикл Если Не Спр.ЭтоГруппа И Не Спр.ПометкаУдаления Тогда Запрос.УстановитьПараметр("Код", Спр.Код); Наименование = РазбитьНаименование(Спр.Наименование); КолВо = Наименование.Количество() - 1; Если КоличествоСловДляСовпадения = 0 Тогда КСДС = КолВо - 1; Иначе КСДС = КоличествоСловДляСовпадения; КонецЕсли; Для Аб = 0 По КолВо - КСДС - 1 Цикл Стр = ""; Для Аа = 0 По КолВо - Аб Цикл Стр = Стр + " И Номенклатура.Наименование ПОДОБНО &Наим" + Аа + " |"; Запрос.УстановитьПараметр("Наим" + Аа, "%" + Наименование.Получить(Аа) + "%"); КонецЦикла; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Код > &Код | И Номенклатура.ПометкаУдаления = ЛОЖЬ | //Строка |УПОРЯДОЧИТЬ ПО | Номенклатура.Код"; Запрос.Текст = СтрЗаменить(Запрос.Текст, "//Строка", Стр); Результат = Запрос.Выполнить().Выбрать(); Если Результат.Следующий() Тогда Сообщить(Спр.Код + " """ + Спр.Наименование + """ = " + Результат.Ссылка.Код + " """ + Результат.Ссылка.Наименование + """"); Прервать; КонецЕсли; КонецЦикла; КонецЕсли; ОбработкаПрерыванияПользователя(); КонецЦикла; КонецПроцедуры |
|||
50
Злопчинский
20.09.11
✎
11:55
|
(41) индекс полнотекстового поиска обновляется сразу при вводе нового клиента или там два индекса вроде - один временный дл яоперативно введенных и потом переносится в полнотекстовый..?
|
|||
51
Goggy
20.09.11
✎
11:57
|
По ИНН сравни и остальных которые без ИНН обработкой руби своей, считай уже сутки сэкономил :)
|
|||
52
Базис
naïve
20.09.11
✎
12:12
|
В excel выгрузи, отсортируй по ИНН - увидишь дубли.
Запрети выбирать и создавать контрагента без ИНН, включи контроль уникальности ИНН, юзеры за месяц сами исправят базу, потом только одному дай право изменять записанных контрагентов. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |