strmatch — Нечеткое сравнение и поиск строк




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

89 Comments

  1. yukon

    Отлично.

    Версия под NativeAPI планируется?

    Reply
  2. tango

    единственная вк, которая принесла пользу

    поправьте «пример оспользования» в тексте

    Reply
  3. Sk0rp

    (1) yukon, Какое-либо развитие компоненты не планируется. Была в свое время написана для конкретного проекта. Исходники если найду позже тоже выложу.

    Reply
  4. Sk0rp

    (2) tango, Спасибо. Исправил.

    Reply
  5. Yashazz

    Судя по als-файлу, это та самая компонента времён 7.7 и сайта hare.ru, или нет? И вы, sk0rp, её автор?

    Reply
  6. Sk0rp

    (5) Yashazz, дважды «да». Действительно впервые она выклыдавалась мной у кролика.

    Reply
  7. AlX0id

    мм.. это типа можно для распознавания голоса использовать? )

    Reply
  8. tango

    (7) AlX0id, скорее для идентификации автора по образцам текстов

    Reply
  9. Sk0rp

    (7) AlX0id, нет. Анализируется только текст.

    Reply
  10. Yashazz

    (6) Тогда искреннее большое спасибо, она в те времена изрядно пригодилась. А теперь — большинство будет юзать полнотекстовый поиск, а про расстояние Левенштейна и прочую ересь вообще никто не знает )))

    Reply
  11. Lemkus

    Чем эта компонента лучше полнотекстового поиска?

    Reply
  12. Makushimo

    А можете написать статью про алгоритм работы этой компоненты?

    в картинках и на пальцах.

    очень интересно

    Reply
  13. Evil Beaver

    Вроде звучит клёво, но не пойму сходу, в каких практических задачах ее можно применить?

    Reply
  14. tango

    (13) Evil Beaver, синхронизация справочников

    Reply
  15. Yashazz

    (11) У полнотекстового поиска есть куча недостатков. Например, область индексации динамически не управляется и любое перестроение кушает время.

    Reply
  16. Makushimo

    (15) Yashazz,

    можно подробнее?

    какие конкретно недостатки у полнотекстового поиска,

    которые однозначно склоняют к поиску альтернативы?

    например, эта компонента в публикации

    Reply
  17. Evil Beaver

    (14) tango, ну может быть… хотя нечеткая синхронизация такого может насинхронизировать….

    В синхронизации, как раз идентичность сущностей крайне важна. А так, сегодня у меня отображалось в один объект, а завтра кто-то поменял наименование, его рейтинг в нечетком поиске вырос, и стало отображаться в другой объект…

    Но, как вариант первичного слияния двух замусоренных баз с поиском правых и виноватых, да, наверное, можно что-то придумать 🙂

    Reply
  18. tango

    (17) Evil Beaver, разумеется, обработка полуавтоматическая.

    ускорение работы оператора вполне реальное

    второе применение — подбор в 1с из ексельного файлика (т.н. «проблема номенклатуры поставщика»)

    Reply
  19. мх

    Спасибо за эту компоненту.

    До сих пор используем ее (работаем на 7,7)

    (17) Evil Beaver Используем для (первичной) привязки номенклатуры поставщика к собственному справочнику товаров

    Reply
  20. Sk0rp

    (11) Lemkus, области использования практически не пересекаются. Сравнивать не имеет смысла.

    (12) Makushimo, много было взято из metaphone:

    http://en.wikipedia.org/wiki/Metaphone

    Существует его адаптация и для русского языка.

    Затем считается количество совпавших звуков и последовательностей звуков (чем длиннее тем больше вес).

    Цифры обрабатываются отдельно.

    (13) Evil Beaver, изначально писалось как часть системы для полуавтоматической загрузки сканированных накладных поставщиков. Понятия электронного обмена в то время практически не существовало: была машина со сборной солянкой грузов от 50 поставщиков, коробка из 200 — 300 бумажных накладных и закрытый почти на неделю оптовый склад, т.к. операторам требовалось до 5 дней на обработку. С введением этой системы склад перестал закрываться на время приема вообще, а качество ввода накладных выросло.

    Reply
  21. Evil Beaver

    > Сравнение производится по звучанию.

    Прикольно, а это как вообще? Падонкафский езыг тоже понимает?

    Reply
  22. Lemkus

    (20)

    Видимо, я плохо понимаю, что значит «Сравнение производится по звучанию»

    Про полнотекстовый поиск в СП:

    # — нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос «#Система» найдет «систама», «сивтема»; запрос «Система#2» найдет «ситтама», «сеттема»;

    Разве это не то же самое, что в компоненте, в чем отличия?

    Reply
  23. Sk0rp

    (22) Lemkus, не совсем.

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

    Whiskey Jack Daniels 500ml

    500 Виски жек денил

    Whi5key 500 мл /ack Dan|e1s /при распознавании грязного текста/

    При этом расстояние Левингштейна между ними очень велико.

    Reply
  24. Evil Beaver

    (23) Круть, дайте две!

    Если мне вдруг что-то такое потребуется, буду знать, где скачивать! 🙂

    Reply
  25. tango

    да, пожалуй, нынешнее поколение, учившее «полнотекстовый поиск», воспринимает это со своими оттенками эмоций

    прикольно, что во времена 77 это воспринималось как будто так и надо

    Reply
  26. V.Nikonov

    Недавно мучился с синхронизацией расползшихся ИБ. Начал писать собственный алгоритм пословного сравнения… Работало чуть лучше полнотекстового поиска, но не совсем удовлетворяло. Были большие проблемы с сокращением наименований (Молочный — мол.; Шоколадный — Шок; и т.п.). Предлагаемый алгоритм не только нивелирует перестановку слов, но и должен качественно отлавливать всевозможные (разумные) сокращения!

    Спасибо Автору!!!

    Reply
  27. V.Nikonov

    А возможности скормить компоненте эталон и массив для поиска сложно? На выходе получить отсортированный массив? На низком уровне обрабатывать большой массив легче…

    Reply
  28. Yashazz

    (16) Так написал же — область индексации неуправляемая. У меня, допустим, три обалденных регистра сведений отмечены как используемые к полнотекстовому, но обновлял я лишь один регистр и искать хочу по нему — а обновление/слияние прочешет все три, степень гибкости маловата, время и ресурс жалко. Или я чего не знаю про полнотекстовый штатный?

    Reply
  29. Evil Beaver

    (25) tango, вброс не засчитан. Я, конечно, помоложе Вас буду (судя по фотке), но эмоции мои не от того, что я не представляю себе что такое нечеткий поиск, а от того, что теперь такой инструмент есть в общественном доступе. И да, я вряд ли в состоянии написать подобное, поскольку матчастью не владею. Но никому не дано знать все, верно же? Вы вот можете написать точно такую же полностью самостоятельно?

    Reply
  30. tango

    (29) Evil Beaver, начиная от «вброс» и далее везде. о чем вы хотите поговорить?

    отмечу только, что сабж общедоступен со времен hare.ru — вы не прочитали камент или настолько молоды?

    Reply
  31. Evil Beaver

    (30) tango, да, я настолько молод, что «во времена hare.ru» у меня не было интернетов 🙂 Поговорить, я собственно, ни о чем не хочу, непонятна была причина вашей иронии про «эмоции молодого поколения». Что не так с эмоциями?

    Reply
  32. tango

    (31) Evil Beaver, не вижу предмета для иронии, извините

    **

    наверное, это «репутация»

    Reply
  33. Sk0rp

    (27) V.Nikonov, именно так и работают кеши. Массив строк загружается один раз и предрассчитывается. Затем с ним можно быстро сравнивать различные образцы, получая на выходе отсортированные ключи (передаются вместе со строкой). Одновременно может быть неограниченное количество созданных кешей.

    Reply
  34. Evil Beaver

    (32) tango, чья «репутация», простите? И что вы хотели этим сказать?

    Reply
  35. cool.vlad4

    (11) Lemkus, тем, что они разные и по разному работают и ищут. во-первых надо заставить хоть как-то полнотекстовый искать «по созвучанию» (с помощью строк поиска, всякими # и прочее), во-вторых полнотекстовый не спрашивает, где искать он ищет во всем объекте, кушает дофига ресурсов и тормозной как не зная кто.

    (0) если она была бы под Native, это было бы очень клево. а так компонента очень полезная.

    Reply
  36. Sk0rp

    (1) yukon, (35) cool.vlad4, не совсем понимаю, что вы называете «Native».

    Компонента создана по технологии создания внешних компонент с ИТС. Реализует интерфейс расширения языка.

    Reply
  37. Evil Beaver

    (36) они имеют в виду новый вид API внешних компонент, которые не использует COM. Называется Native API и применяется в 8.2 наряду с COM-компонентами.

    Reply
  38. Sk0rp

    (37) Evil Beaver, ясно, спасибо.

    Думаю если еще не существует, то появится в ближайшее время обертка, которая позволит любую старую компоненту подключать через новый интерфейс.

    Reply
  39. tango

    (34) Evil Beaver, вычеркнул

    Reply
  40. cool.vlad4

    (39) это ближайшее время уже 2-3 года. этот 1С-ский native появился не вчера, его плюс в том, что работает на сервере, в том числе и на nix-ксах(поэтому мне не совсем понятна, какая в этом случае будет обертка, но все возможно), и не требует регистрации.

    Reply
  41. Жолтокнижниг

    (39) наврятли появится, т.к. Native поддерживает меньше типов данных (только простые, даже массивы не умеет). Так что придется городить кучу костылей или делать конкретные реализации для каждой COM-вк, но пользы от этого 0.

    Reply
  42. Torin99

    А не могли бы Вы сказать, что взято за меру «похожести»? «редакционное расстояние», «мера Джаккарда», «метод триад», расстояние Левенштейна ?

    Reply
  43. Sk0rp

    (42) Torin99, => (20)

    Reply
  44. Torin99

    Все классно, кроме одного — не хочет работать под операционкой на моем серваке — Windows Server R2 2008

    И добавление указанных Вами длл-ек — mfc71.dll и msvcr71.dll — проблему не решает…

    Reply
  45. Sk0rp

    (44) Torin99, как правило помогает однократный запуск 1С от имени администратора. На новых системах у компоненты не хватает прав, что бы зарегистрироваться. После этого можно запускать 1С как обычно. Существуют и другие, более специфичные, способы обойти проблемe нехватки прав, но это за рамками обсуждения самой компоненты.

    Могу добавить, что я длительное время её использовал на W2k8 Server R2 x64

    Reply
  46. ugroblin

    Спасибо за хорошую вещь. Попробовал, очень понравилось.

    Вопрос по выдаваемому коэффициенту. В описании указано «Коэффициент не маштабирован, т.е. его максимальное значение не ограничено». Почему сделано именно так?

    Лично мне удобнее использовать нормированный. Так значительно удобнее проводить анализ результатов, отсев по уровню сходности.

    StrMatch.Сравнить(А,Б)/StrMatch.Сравнить(А,А)

    Reply
  47. Sk0rp

    (46) ugroblin, потому, что там не линейный коэффициент, как переводить его в линейную шкалу процентов не понятно. А по здравому размышлению — не нужно. Все равно интересуют самые похожие из известных.

    К стати, StrMatch.Сравнить(А,Б)/StrMatch.Сравнить(А,А) может давать единицу для широкого класса значений Б. А падение значения будет очень сильно зависеть от длины A. Кому-то это может подойти, но не как общее решение для всех.

    Reply
  48. kilo81

    Привет. Оценил эту ДЛЛ-ку в ПиКе. Очень крутая штука.

    🙂 Терь там на 8-ке работают с ней же.

    Reply
  49. CheBurator

    Компонента меганужная.

    у меня на ней крутилоась фармация обработка поставщиков — целая система.

    для радиодеталей человеку под заказ делал.

    сейчас успешно работает на видеодисках.

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

    .

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

    http://infostart.ru/public/14255/

    .

    Reply
  50. CheBurator

    Пока единственную вещь не удалось забороть, может автор подскажет.

    делаю все как обычно, в результате получаю их хеша последовательность похожих на оригинал наименований — все отлично! но при этом индексы сравнения почему-то возвращаются нулевые..

    Проявляется эта фигня эпизодически.

    есть куча обработко — клоны одной и той же. отличаются незначительно, отличия не касаются работы ссо стрматч, одни обработки — нормально все, другие некоторые их меньше — индекс сравнения — нулевой…

    .

    ????

    Reply
  51. alexd73

    Привет!

    Может быть есть какая-то возможность все-таки провести зависимость от длины искомых фраз? Т.е. у длинной строки значение под 800, а у короткой 50-100.

    Т.е. при загрузке накладной можно выводить первые три значения (например), если нет точного соответствия, но хотелось бы ограничивать конкретные промахи. Например коэффициент ниже 50 для строки в 10 символов и ниже 300 для строки под 100 символов.

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

    Reply
  52. Sk0rp

    (51) alexd73, конечно такая возможность есть. Проблема в том, что их не одна и выбрать среди множества я не представляю как. Но вы вполне можете в своих обработках дополнить логику обычным 1С-ным кодом, масштабируя полученный индекс длиной строки или ограничивая количество вариантов. Как было указано выше — максимальный индекс для конкретной строки можно получить сравнением с нею же. Остальное на Ваше усмотрение.

    Reply
  53. Sk0rp

    (50) CheBurator, в старых версиях (стоит проверить на какой это возникает) был баг, приводящий к разным чудесам, если передаваемые для получения результата переменные к этому моменту еще не типизированы. Еще есть вариант, что индекс сравнения и правда ноль 🙂

    А вообще Вам могу выслать исходники, пока сам не потерял 🙂 — попробуйте сами разобраться.

    Reply
  54. CheBurator

    (53) ну что индекс сравнения = 0 — очень маловероятно, а вот вариант с нетипизированными переменными — спасибо за наводку, посмотрю.

    .

    Вопрос: выложенная компонента в публикации — последней версии?

    .

    Исходники можно скинуть на e.meil@mail.ru — разобраться я в них вряд ли разберусь, но в запасниках пусть будет — хуже от этого не станет.

    Reply
  55. CheBurator

    а у меня версия 2.1.0.0

    Reply
  56. cool.vlad4

    (53) тогда если несложно и мне, пожалуйста, исходники (все таки хочется, если получится перевести компоненту на native) (а еще лучше их в публикации может выложить?)

    Reply
  57. Evil Beaver

    Если не жалко выложите исходники в публикации. Глядишь — будет новый виток развития

    Reply
  58. d0dger

    Пытаюсь применить компоненту в качестве исправления опечаток вводимых наименований. Наткнулся на эту компоненту, очень интересно, но вероятно не лучшее решение под мою задачу.

    За исходники на 1c8x@ukr.net или в публикации буду благодарен…

    Reply
  59. FireFox_Manager

    Вещь!

    Вопрос к автору — можно ли использовать компоненту в своих коммерческих разработках?

    Reply
  60. Sk0rp

    (59) yinfo, да, можно. С указанием имени и авторства используемой компоненты.

    Reply
  61. FireFox_Manager

    (60) для указания авторства мне нужно знать, как вас зовут — в профиле нет этой информации. И ссылка на источник — ссылка на эту публикацию или у вас есть другая страничка?

    Reply
  62. Tim72

    (60)Sk0rp, доброго времени суток! Можете поделиться исходниками? Естественно, распространение с указанием авторства. Буду признателен.

    Mail: avparshin@ukr.net

    Reply
  63. Sk0rp

    (61) yinfo, В архиве с компонентой все есть.

    (62) Tim72, Выложу для всех куда-нибудь как руки дойдут.

    Reply
  64. bogdan_sukonnov

    Для меня главным минусом компоненты является то, что она всегда хоть что-то да находит, а коэффициенты абсолютно безотносительны. Пока решил попробовать в массив поиска добавлять и искомую строку, идея в том, что коэффициент по ней будет хоть каким-то ориентиром. Если есть другие варианты — подскажите, пожалуйста.

    Reply
  65. sttt

    (63) буду признателен если пришлете исходники: nohd@yandex.ru

    Reply
  66. Jill

    Я бы еще добавил что в x64 OS необходимо проверять наличие mfc71.dll и msvcr71.dll в C:WindowsSysWOW64 и класть именно туда.

    Как в (44), например.

    Reply
  67. Famza

    Может скажу глупость, но у меня итоговые таблицы получаются очень разными при сравнении двух массивов строк, те ТабИтог1 = Сравнить(Массив1, Массив2) очень отличается от ТабИтог2 = Сравнить(Массив2, Массив1) по количеству элементов. Обработка в 7.7: Массив1 — строки Наименование из Ехеля, Массив2 — строки Наименование из справочника 7.7.

    Ось ХР СП3, StrMatch.dll 2.1.0

    Reply
  68. CheBurator

    (53) Проверил — насчет того что не выдает индекс сравнения.

    см. скриншот — демо ошибки: http://screencast.com/t/0DbCzWI0h — выделенные зеленым должны стоять с самой верхней строки списка

    Проблема в том, что если в

    СравнитьСКэшем(<Ид>, <Стр>, <Кол>) — если «Кол» будет больше чем размер кеша — вылазит вот такая бяка с нулевыми индексами сравнения…

    Поэтому надо определять так, чтобы Кол = Мин(СколькоВыдатьПохожих,РазмерКэша)

    Reply
  69. CheBurator

    вот такая — правильно: http://screencast.com/t/1FjFvLsjZ

    Reply
  70. Famza

    Еще есть одно замечание. Строка поиска, например, «топор», в кэш помимо данной строки добавлена большая куча строк типа «кольцо стопорное 1234567890» и тд. Если при отборе количество наименований содержащих «топор» большое, то «топор» не то что не получает максимальный индекс, но и вообще не попадает в выборку. Такое ощущение, что поиск в самом деле настолько «нечеткий», что не видит полного совпадения вплоть до длины слова. Аналогично не определились «тяга», «реле» и тд. — вместо них подобрались более длинные с маркировкой типа «тяга поперечная ХХХХХХ», » реле ХХХ». А если увеличивать количество выбираемых похожих слов, то процесс поиска затягивается чрезвычайно.

    Вразумите, мож что надо сделать помимо того что указано в примере?

    ЗЫ. Свою задачу решил, но пришлось использовать несколько проверок дополнительных. И хотя для 14300 позиций не определились вообще только 18, не находить по полному соответствию как-то… неправильно.

    Reply
  71. CheBurator

    (70) тут совпадения по фонетическому зваучанию.

    на коротких словах работает плохо.

    на длинных — оч.хорошо, даже если значительная часть слова совпадает а разнятся малой частью

    Reply
  72. Sk0rp

    Какая-либо работа над компонентой прекращена и не планируется в обозримом будущем. Найденные исходники выложены сюда:

    https://github.com/5k0rp/StrMatch

    Возможно, исходники не самые свежие, т.к. в какой-то момент они терялись из-за умершего диска. Как и что удалось восстановить — не помню.

    Reply
  73. Famza

    (72), Очень жаль. Вещь таки нужная

    Reply
  74. AntonH851

    А у меня при вызове ПодключитьВнешнююКомпоненту 1С прекращает работу, при этом никаких ошибок, уже все перепробовали…

    Reply
  75. AntonH851

    На каких операционных системах она работает вообще?

    Reply
  76. Tim72

    (72), Огромное спасибо за исходники!

    Работаю в аптечном бизнесе 12 лет — компонента очень сильно помогает искать название лекарств по фонетике (не все же покупатели знают из точное написание 😉 ).

    Reply
  77. e-ilyich

    StrMatch.dll в win 8 x64 не могу зарегистрировать

    без регистрации ругается что нет у меня msvcr71.dll

    хотя я все что в инструкции сказано сделал в system32 положил файлики MFC71.dll, msvcr71.dll

    может под восьмерку нужно какието специальные файлики ?

    Reply
  78. yukon

    (77) e-ilyich,

    сказано сделал в system32 положил файлики MFC71.dll, msvcr71.dll

    Для 32-битных приложений в 64-битной системе, нужно выкладывать в C:WindowsSysWOW64

    Времена меняются, инструкция написана еще в те времена, когда 64-битные клиентские ОС были далеким будущим.

    Reply
  79. tormozit

    Спасибо. Реализовал с помощью этой ВК нечеткий поиск дублей в инструменте «Поиск дублей и замена ссылок» в подсистеме «Инструменты разработчика».

    Reply
  80. CheBurator

    (79) о! на это дело надо посмотреть, как у тебя это получилось… учти что для коротких строк работает плохо. чем длиннее строка, тем лучше. В ряде случаем нужно подымать/опускать вес чисел.

    Reply
  81. tormozit

    (80) В каждой паре я нормализую разницу веса к весу наибольшего из пары и сравниваю с порогом.

    Reply
  82. Steelvan

    (79) tormozit,

    Реализовали как Native ?

    Reply
  83. tormozit

    (82) Нет. Здесь же только COM вариант ВК. Его и использовал.

    Reply
  84. ostapchenko.alexandr

    Я бьюсь второй день. Что я только не делал, даже установил виртуальную машину Windows XP. Пишет ошибку на строке Новый COMОбъект:

    -2147467262(0x80004002): No such interface supported

    Даже скачал dll автора, хотя был у меня уже этот dll. Ошибка та же!

    Reply
  85. Gkmy

    (84) 8-ка?

    Reply
  86. ostapchenko.alexandr

    (85) Windows 10 64, но также пробовал на WIndows 7 64 и Windows 8 64. Создавал на них виртуальные машины Windows XP 32. Но всегда одна ошибка про No such interface supported.

    И в SYSWIN64 помещал и COM+ создавал, и всё очищал и заново пробовал. Ничего не помогло.

    Reply
  87. Gkmy

    (86) Спрошу иначе.. 8.х или 7.7?

    Reply
  88. ostapchenko.alexandr

    (87)

    8.x

    Reply
  89. Gkmy

    (88) «Компонента для нечеткого сравнения строк. Это (!!) репост моей публикации из «Клуба профессионалов 1С» .. Какая-либо работа над компонентой (!!) прекращена и не планируется в обозримом будущем. Найденные исходники (!!) выложены … StrMatch.dll — сама компонента. Версия 2.1.0 от (!!) 4 февраля 2005 … Для работы (!!) требуется … mfc71.dll и msvcr71.dll — если нет (не имеются в наличии см. далее — прим. мое), то найти в инете», — внимательно ознакомившись с вышеизложенным, дорогому читателю следует включить тумблер в положение: мозги.. В случае же отсутствия последнего: — Дорогой друг, пишите лично, сюда: https://infostart.ru/connect/?id=342676 — а лучше в телегу, ее в последнее время читаю все чаще.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *