gifts2017

Нечеткий поиск дублей в наименованиях элементов справочников

Опубликовал Евгений Мартыненков (JohnyDeath) в раздел Администрирование - Поиск данных

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

Испльзуются ВК:
1. "StrMatch.dll" для нечеткого сравнения строк. Автор: Ракунов Александр.
2. 1с++ http://www.1cpp.ru/
3. FormEx http://dorex.ru/?projects&formex

Порядок установки:
1. Если у вас нет в папке "{КаталогГдеУстановленаWindows}\System32\" файлов MFC71.dll и msvcr71.dll скопируйте их туда из прикрепленного архива "System32.rar" (необходимы для нечеткого поиска)
2. Распаковываем архив "Поиск.rar", открываем обработку "Поиск.ert".
Для тех, кто уже использует 1с++: Для корректной и полной работы обработки необходима ВК 1с++ 3.0 не ранее 22 апреля 2008 (находится в архиве, либо здесь: http://www.1cpp.ru/images/3/32/Icpp-latest.rar )!

Некоторые особенности работы:
Выбираем вид справочника, ставим процент совпадения, нажимаем «Начать сканирование».
После заполнения ТП возможно:
0. ПРЯМОЕ РЕДАКТИРОВАНИЕ значений ячеек в колонках «ЧтоМеняем» и «НаЧтоМеняем»!
1. Сортировать по любой колонке (по клику на колонке)
2. Перекидывать элементы местами в пределах одной строки (начинать тащить надо либо на колонке «ЧтоМеняем», либо «НаЧтоМеняем»)
3. Менять местами строки «тасканием».
4. Если выделить несколько строк ("shift/ctrl + клик мыши", либо "shift + стрелки клавиатуры"), потом вызвать контекстное меню (правая кнопка мыши), можно перекинуть выбранные элементы в указанную группу. Перекидываются те элементы, над которыми вызвано контекстное меню, т.е. либо над «ЧтоМеняем» либо над «НаЧтоМеняем»
5. Отмеченные галочкой строки можно передать в стандартную обработку "Замену значений" по соот-ей кнопке.
6. Пометить на удаление элементы из колонки "ЧтоМеняем", отмеченные ранее "галочкой".
7. Помеченные на удаление отображаются зачеркнутым шрифтом.

В очередной раз благодарю: разработчиков компонент 1с++ ( http://www.1cpp.ru/ ), FormEx (http://dorex.ru/?projects&formex) и Ракунова Александра за прекрасную ВК "StrMatch", а также Мартынова Константина за красивую конфигурацию "СКАТ-Профессионал"( http://33lab.ru/v7_skat/index.shtml ) ;)

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Всё одним архивом
.zip 1,51Mb
03.10.13
70
.zip 1,51Mb 70 Скачать
Основная обработка + (1с++) + (FormEx) + (StrMatch.dll)
.1208949975 700,93Kb
03.10.13
802
.1208949975 700,93Kb 802 Скачать
Библиотеки, необходимые для ВК нечеткого поиска
.1208950092 547,21Kb
03.10.13
404
.1208950092 547,21Kb 404 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Евгений Мартыненков (JohnyDeath) 23.04.08 15:37
Основное назначение обработки - пропаганда 1с++ ;)
Прямое редактирование значений ячеек ТабличногоПоля официально появилось только вчера. Также была добавлена возможность вывода нескольких картинок в одной колонке!
Подробней здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1205929683/15#25
2. cs25 (cs25) 23.04.08 16:06
Классная штуковина. Плюсуем !!!
3. 33lab (33lab) 23.04.08 18:55

Все класно - только есть маленькое предложение - проверять загружены ли компоненты (1С++ и FormEx) не через

//Если ЗагрузитьВнешнююКомпоненту(Путь+"1cpp.dll")=0 Тогда

а через попытку проверки версии 1С++.. так как компоненты у меня например уже загружены а при открытии обработки выдается сообщение что "Не удалось загрузить компоненту" т.к. обработка вытается загрузить компоненты по указанному в коде пути.
4. Евгений Мартыненков (JohnyDeath) 24.04.08 09:27
(3) Спасибо. Перезалил. Кому неохота качть 700 кБ ради исправленных двух строчек, то заменитье процедуру ПриОткрытии() на эту:
Код
Процедура ПриОткрытии()
   Путь="";Имя="";
   РасположениеФайла(Путь,Имя);
   Попытка
      МетаИнфо=СоздатьОбъект("MetaInfoClasses");
      НомВер="";
      НомВерСтр=МетаИнфо.ПолучитьВерсию(НомВер);
      Если НомВер<"3.0.0.0" Тогда
         Предупреждение("Для корректной работы необходимо использовать 1с++ версии не ниже 3.0.0.0",30);
         СтатусВозврата(0);
         Возврат;
      КонецЕсли;
   Исключение
      Если ЗагрузитьВнешнююКомпоненту(Путь+"1cpp.dll")=0 Тогда
         Предупреждение("Не удалось загрузить 1c++ !",20);      
      КонецЕсли;
      Если ЗагрузитьВнешнююКомпоненту(Путь+"Formex.dll")=0 Тогда
         Предупреждение("Не удалось загрузить FormEx !",20);      
      КонецЕсли;
   КонецПопытки;
   
   Попытка      
      ЗагрузитьВнешнююКомпоненту(Путь+"StrMatch.dll");
      оПоиск = СоздатьОбъект("AddIn.StrMatchExtension");   
      оПоиск.ВесЧисел=1;
   Исключение
      Сообщение = "Не удалось загрузить компоненту ""StrMatch.dll""" + РазделительСтрок + "ВНИМАНИЕ! Компонента требует для работы mfc71.dll и msvcr71.dll, проверьте их наличие";
      Предупреждение(Сообщение, 10);
   КонецПопытки;
КонецПроцедуры   // ПриОткрытии
Показать полностью
5. Артур Аюханов (artbear) 24.04.08 10:23
(4) Опять не совсем точно.
Загрузку ВК лучше проверять через создание какого-нибудь объекта ВК
.
Код
Функция ЗагрузитьВК(ПутьДллФайла, ИмяОбъектаДляПроверки = "")
   Попытка
      лВремОбъект = СоздатьОбъект(ИмяОбъектаДляПроверки);
   Исключение                   
      Если ЗагрузитьВнешнююКомпоненту(ПутьДллФайла) = 0 Тогда
         Сообщить("Не удалось загрузить ВК "+ПутьДллФайла, "!!!");
         //Сообщить("  Тестирование завершилось неудачей", "!!!");
         Возврат 0;
      КонецЕсли;
   КонецПопытки;
   Возврат 1;
КонецФункции
Показать полностью


6. Евгений Мартыненков (JohnyDeath) 24.04.08 10:27
(5) Артур, а в чём неточность?
Вот тут пытается создать объект:
Код
Попытка
      МетаИнфо=СоздатьОбъект("MetaInfoClasses"); 
Показать полностью

Но нам нужно ж не абы какую 1с++, а именно 3.0.0.0, поэтому дальше делаем проверку:
Код
 НомВерСтр=МетаИнфо.ПолучитьВерсию(НомВер);
      Если НомВер<"3.0.0.0" Тогда 
Показать полностью

Хотя и 3.0.0.0 не абы какая нужна, но вы так и не договорились ставить билды на 3.0

Или меня не туда понесло?
7. Евгений Мартыненков (JohnyDeath) 24.04.08 10:28
+(6) в 3.0 пока нет никаких новых объектов, которых не было бы в 2.5
8. Артур Аюханов (artbear) 24.04.08 15:58
(6) Да я про загрузку ФормЕкс говорю :)
Ведь она также уже может быть загружена ? :)
Причем версии также различаются :)
Поэтому и привел универсальную функцию загрузки ВК
9. Сhe Burashka (CheBurator) 04.05.08 07:10
Зачет! +1
Давно сам такую хотел сделать, ибо нужно часто...
Езе бы прикрутить некоторое усовершенстование, типа на вход через параметры передаем "входной набор" (м.б. элемент справочника, м.б. строка+тип справочника+имя реквизита и т.д.) - на выходе получаем "выжимку" - т.е. похожее на входные данные - тогда 1С++ можно будет продуктивно заюзать вот здесь: http://infostart.ru/profile/174/projects/393/
10. Сhe Burashka (CheBurator) 04.05.08 07:46
"разработчиков компанент", "компанента" - это не от слова "компАния"... ;-)
11. Евгений Мартыненков (JohnyDeath) 04.05.08 10:10
(9) мне пока не надо, поэтому: "кто хочет - пусть делает, всё открыто и доступно" ;)
(10) принято
12. Adapter (adapter) 13.05.08 10:15
ну смотрю по функционалу и интерфейсу все как у меня. Только я свою обработку несколько лет назад сделал и без всяких внешних компонент. Поиск может выкидывать слова-паразиты, например ООО, ОАО в контрагентах, можно прерывать выполнение по esc с сохранением результатов. Код открытый, универсальная
http://www.infostart.ru/profile/19126/projects/1732&ref=19126
13. noprogrammer (noprogrammer) 13.05.08 10:56
(12) Adapter - Единственное с чем можно согласится - так это с тем что ваша обработка не использует внешних компонент, так ведь весь смысл данной разработки в использование ВК :) Использование ВК позволяет сделать интерфейс приятнее а скорость работы обработки быстрее (на порядок быстрее имхо)
14. Евгений Мартыненков (JohnyDeath) 13.05.08 12:46
(12) да, я видел твою обработку: приятная и без ВК. После того, как я не смог сделать следующее: поменять местами заменяемое с замещаемым, поменять один из заменяемых элементов, перетащить строку вверх, сортировать по различным колонкам и т.д. , решил написать вот это. К тому же, как заметил Костя, скорость работы намного выше! Попробуй. И я не понимаю, почему нельзя загрузить пару ВК?? Лучше сидеть на ущербном интерфейсе и со "встроенной" скоростью? П.С. да, интерфейс и пару идей подсмотрел у тебя ;)
15. Олег Пономаренко (O-Planet) 13.05.08 14:09
(14) А мою по поиску и замене повторяющихся контрагентов видел? ;)
16. Евгений Мартыненков (JohnyDeath) 13.05.08 14:31
Нет, не видел. Покажи.
Чем лучше?
17. Евгений Мартыненков (JohnyDeath) 13.05.08 16:53
(15) нда, Олег, посмотрел... А ты, видать на мою даже не взглянул. Если бы ты это сделал, то, как мне кажется, не задал бы такого вопроса.
18. Олег Пономаренко (O-Planet) 13.05.08 19:45
Да я без умысла какого. Просто спросил и все. У тебя оно по-любому должно быть круче, потому что ВК хорошие используешь. Я - только стандартными средствами, кое-где приходится просто-таки измудряться. Собственно, меня моя устраивает. Периодически у разных клиентов с ее помощью чищу базенки и забираю мани.
19. Евгений Мартыненков (JohnyDeath) 14.05.08 10:06
Да я тож не злорадствовал. ;)
ИМХО, самые большие минусы твоей обработки:
1) не видать статус выполнения, т.е. сколько осталось до конца обработки;
2) неужели ты чистил только "Контрагентов"?!
20. DRY (DRY) 10.11.08 11:11
эх, жаль обработка некорректно работает с другими конфигами( Именно в том справочнике в котором есть дубли по кнопке "Начать сканирование" ничего не происходит. А так конечно крутая штука ;) Спасибо.
21. Евгений Мартыненков (JohnyDeath) 10.11.08 11:14
(20) а можешь поподробнее? Пробывал на нескольких конфах - всё работает.
22. DRY (DRY) 10.11.08 12:40
(21) Вообщем парадокс конечно, работает со всеми справочниками кроме одного, который как раз нужен.. объект вроде создаётся, но когда вызывается метод ВыбратьЭлементы() возвращается 0, хотя справочник точно заполнен. Это ошибка НЕ обработки! тут что-то другое, первый раз такое вижу..
23. Евгений Мартыненков (JohnyDeath) 10.11.08 12:42
(22) а он, случайно, не подчинен другому справочнику?
24. DRY (DRY) 10.11.08 13:05
25. DRY (DRY) 10.11.08 14:02
огромное спасибо за открытый код! теперь все работает ;)
26. Евгений Мартыненков (JohnyDeath) 10.11.08 14:11
27. Елена (Nastena) 17.03.09 13:32
СПАСИБО ОГРОМНОЕ!

И от меня и от начальника ОК
28. Evgeniy (Evgeniy) 28.05.09 13:40
Обработка супер, но для полного счастия печати нехватает по дублям:(
29. Евгений Мартыненков (JohnyDeath) 28.05.09 14:45
(28) не проблема. Там же все данные в ТЗ хранятся. Нарисуй в каком виде тебе это видится и я прикручу. Если сделаешь мекетик-шаблон mxl вообще замечательно будет ( и тебе и мне ;) )
30. Evgeniy (Evgeniy) 28.05.09 15:45
(29) Проблемы нет конечно, просто странно что до сих пор нет такой возможности.
Ну значит счас внесу свой вклад в эту хорошую обработку:)
31. Сергей Ожерельев (Поручик) 28.09.09 11:42
Мдя, хороший пример того, что в восьмёрке можно реализовать штатными средствами без кучи ВК. Впрочем за классную работу плюс.
32. Игорь Иванов (ketr) 09.12.09 17:07
скажите пожалуйста, а если у меня 2 одинаковых контрагента (код разный, наименование одинаковое). По обоим были проводки - я смогу удалить одного из них, а на другого перекинуть все движения?
33. Евгений Мартыненков (JohnyDeath) 09.12.09 17:09
(32) Да, для этого существует обработка от 1С "RepVal.ert" (замена значений), которая вызывается по кнопке "Замена значений"
34. Епрст (Ёпрст) 09.12.09 17:09
(32) сможешь
(31) что именно можно в 8-ке реализовать штатными средствами?
Нечеткое сравнение строк ?
35. Евгений Мартыненков (JohnyDeath) 09.12.09 17:13
(31) кстати да, что в 8-ке можно реализовать штатными средствами?
36. Сергей Ожерельев (Поручик) 09.12.09 17:15
(34) Ёпрст! Не поверишь!
В любой туповой конфе есть штатная обработка "Поиск и замена дублирущихся элементов" с настройкой уровня сходства слов и режимом поиска "По похожим словам".
37. Евгений Мартыненков (JohnyDeath) 09.12.09 17:15
(32) (в добавлении к вышесказанному)
Эта обработка по сути и создавалась для таких вот случаев, когда Контрагент вроде бы один и тот же, а бухи создали две его копии и каждый выбирает в документах разного, а потом возмущаются: почему у нас не сходится баланс! :D
38. Евгений Мартыненков (JohnyDeath) 09.12.09 17:17
(36) Хм.. надо будет посмотреть как там оно внутри.
Спасибо за наводку. Но всё равно сомневаюсь, что она будет работать лучше чем strmatch
39. Сергей Ожерельев (Поручик) 09.12.09 17:17
(35, 34), работает без кучи ВК.
40. Епрст (Ёпрст) 09.12.09 17:27
(36) не смотрел..ибо особо снеговиком не увлекаюсь..
41. Епрст (Ёпрст) 09.12.09 17:44
+40 Посмотрел.. Рекдостная гадость в снеговике..
42. Епрст (Ёпрст) 09.12.09 17:56
+41 "Молоток" и "Молоток красный" ужо никогда не найдет..
43. Илья Васильев (swimdog) 09.12.09 23:38
Попробовал удалить лишнюю номенклатуру, совпадение 100%. Нашло много одинаковых элементов, но проставила их так, что repval отказался заменять, говоря что некоторые значения указаны несколько раз. Мне кажется можно сделать так: есть 3 одинаковых товара, для понятности назовем их майка(1), майка(2), майка(3). В первую колонку ставим майка(1), майка(2). Во вторую два раза майка(3). Таким образом repval ругаться не будет. В моем случае товары ставяться так: в первой колонке 2 раза майка(1), во второй майка(2) и майка(3). Программа естественно говорит о нецелесообразности двойной замены одного товара.
П.С. Менять руками очень утомительно, так как номенклатура очень большая.
П.С.(2) У меня есть переписанная версия для замены в операциях документов без перепроведения документов. Если надо, то могу прислать.
44. Евгений Мартыненков (JohnyDeath) 10.12.09 09:43
(43) Понимаешь, у тебя частный случай. И таких случаев можно придумать вагон. Поэтому о том что и чем заменять отдано на откуп пользователю. Я так понял, что у тебя в результате сверки получается примерно так:
ЧтоМеняем | На что меняем
______________________________
Майка(1) Майка(2)
Майка(1) Майка(3)

ты же хочешь видеть:
ЧтоМеняем | На что меняем
______________________________
Майка(1) Майка(3)
Майка(2) Майка(3)

Для этого просто тыкаешь в первой строке второй колонке (на Майке_2) и выбираешь Майку_3. Аналогично во второй строке первой колонке.

Мне кажется, что не так уж и трудно.
45. Евгений Мартыненков (JohnyDeath) 10.12.09 09:47
Можно, конечно прикрутить что-то типа "буфера похожести" в виде отдельного списка. Будет работать примерно так: при активизации строки "Майка(1) Майка(2)" в этом буфере высвечивается элементы: Майка(1), Майка(2), Майка(3). Затем нужный нам элемент из этого буфера тащим в нужную нам колонку ("ЧтоМеняем" либо "НаЧтоМеняем").
Других вариантов я пока не вижу.
46. Илья Васильев (swimdog) 11.12.09 22:21
(44) руками делать не вариант, так как позиций очень много. А случай не частный. Для него достаточно чтобы одинаковых позиций было больше двух. У меня есть идея, если получиться - напишу.
47. Альтаир (Altair777) 03.08.10 14:51
Справочник Контрагенты - очень много "ложных" срабатываний. Когда фамилии разные, а ИО одинаковые :)
48. Олег Толстик (drako) 04.05.11 11:44
Отличная обработка и довольно шустро работает. Спасибо.
Было бы еще неплохо добавить в таблицу дополнительное поле с реквизитом справочника, на выбор пользователя, кабы последнему было проще определиться в вопросе "дубль или не дубль". Например для контрагентов: "УНП".
И еще полезна бы была кнопочка быстрой замены местами "что на что меняем".
Еще раз спасибо за обработку.
49. FIZIK FIZIK (FIZIK) 23.09.11 13:57
Давно изобретаю велосипеды, жалею что не наткнулся раньше. Спасибо!
50. Николай Соболевский (snip) 20.02.12 19:14
100% совпадение номенклатуры ищет?
и как со скоростью работы?
если справочник номенклатуры порядка 10-12 тыся элементов?
51. Николай Соболевский (snip) 20.02.12 19:18
подскажите repval где можно взять?
на диске ИТС имеется?
52. Евгений Мартыненков (JohnyDeath) 20.02.12 22:03
(50) Делал давно и с 7.7 уже практически не работаю, поэтому отвечаю "напамять".
100 % совпадение вроде бы ищет, но она не совсем для этого была изначально, т.к. полное совпадение очень просто и намного быстрее найти прямым запросом (или на худой конец встроенным поиском по наименованию).
На выборке в 10-12 тыс. проверить не могу. Лучше один раз скачайте и попробуйте.
(51) repval - да, по-моему на ИТС-е должна быть
53. Дмитрий Васильев (post84d) 25.06.12 12:07
Ребята подскажите пожалуйста такая ситуация -В XP работает все нормально, а в Windows 7 не может загрузить компоненту StrMatch.dll. Библиотеки (StrMatch.dll, mfc71.dll и msvcr71.dll) скопированы как и в XP в system 32? папку Bin в Prog. Files и на всякий случай в Каталог ИБ. Все кто знает подскажите что может быть, буду очень признателен. Заранее всем спасибо.
54. Епрст (Ёпрст) 25.06.12 12:15
(53) с правами админа зарегьте вк в реестре
55. Дмитрий Васильев (post84d) 25.06.12 13:03
(54) Ёпрст, спасибо большое за помощь! Выполняю команду regsvr32.exe mfc71.dll - выдает сообщение:
"Модуль mfc71.dll загружен, но не удалось выполнить вызов DLLRegisterServer. Проверьте что mfc71.dll является правильным файлом Dll или OCX и повторить попытку.
ОС- Windows 7 начальная, 32 разрядная. запускаю на нетбуке
56. Епрст (Ёпрст) 25.06.12 13:05
mfc71.dll - это что за зверь такой ?
57. Дмитрий Васильев (post84d) 25.06.12 13:37
(56) Ёпрст, Точно не могу сказать для чего именно это библиотека.. - без нее не будет работать StrMatch.dll В описании обработки по которой ведется обсуждение здесь:

Порядок установки:
1. Если у вас нет в папке "{КаталогГдеУстановленаWindows}\System32\" файлов MFC71.dll и msvcr71.dll скопируйте их туда из прикрепленного архива "System32.rar" (необходимы для нечеткого поиска)
58. Епрст (Ёпрст) 25.06.12 14:33
(57) регить вк нужно от имени лок. админа (или админа домена)

можешь и ярлык создать с регистрацией и его запустить от имени админа.
59. Епрст (Ёпрст) 25.06.12 14:33
или cmd запустить от имени админа и там зарегить
60. Дмитрий Васильев (post84d) 25.06.12 19:53
(59) Ёпрст, Нет разумеется я регистрирую с Админскими правами. Вот и хотел спросить здесь, точно ли можно эти библиотеки применять в Windows 7? в XP работает все без нареканий. Если 100 % работают, то искать в другом месте- может конфликт какай то создается. Еще раз спасибо вам за отклик.
61. Александр Омельянов (proger1c81) 26.10.12 19:01
как ограничить поиск дублей? поясню: например у меня наименование состоит из 7 слов, разделенных пробелом. Эта обработка мне показывает дубли даже, когда совпадает только одно слово. Хотелось бы ограничить поиск дублей до различия только в одном двух знаках. Как это лучше сделать? заранее спасибо за ответ.
62. Евгений Мартыненков (JohnyDeath) 27.10.12 09:20
(61) "Похожесть" двух строк сравнивает ВК StrMatch.dll. Там наверное так зашито. Степенью похожестью игрались? Если да, то я тут ничем помочь не смогу. Да и 7.7 у меня уже нигде не осталось (
63. Модератор раздела Артур Аюханов (artbear) 27.10.12 10:55
(61) Это фича ВК StrMatch.dll - всегда будет возвращен хоть какой-то коэффициент сходства.
Я лично в подобных задачах выбирал первые N похожих строки (например, 3 или 5) и предлагал пользователю самостоятельно выбрать нужный вариант из этого количества.
64. Александр Омельянов (proger1c81) 27.10.12 22:33
(62) JohnyDeath, (63) artbear, спасибо. Я так тоже подумал, что зашито.
65. Яшин Антон (Anyxwar) 02.04.13 14:18
Товарищи,кто нибудь использовал данную библиотечку под 64 разрядную винду,к примеру 7,у меня ругается говорит что это версия для 32 разрядной винды?
66. Сергей Зенюков (Sanario) 03.10.13 14:16
А почему бы не выложить все это одним файлом в архиве?
67. Евгений Мартыненков (JohnyDeath) 03.10.13 14:50
(66) это всё выкладывалось еще в те времена, когда небыло никаких инфо-денег. Попробую переложить. Но ВК StrMatch я где-то на просторах интернета находил. Наверное на проклубе.
68. Евгений Мартыненков (JohnyDeath) 03.10.13 15:29
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа