Внешняя Native-компонента FuzzyStringComparison - для нечеткого сравнения строк

04.01.25

Разработка - Разработка внешних компонент

В своё время написал программу для нечеткого сравнения строк FuzzyStringComparison. Теперь у меня возникла необходимость во внешней Native-компоненте с таким же функционалом. 32х и 64х-разрядные компоненты входят как макет FuzzyStringComparisonNative в прилагаемую к статье обработку "Проверка библиотеки FuzzyStringComparison Native".

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Обработка "Поиск товаров с FuzzyStringComparison Native.epf", содержит внешнюю Native-компоненту FuzzyStringComparison - для нечеткого сравнения строк.
.epf 2,46Mb
4 5 400 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

В своё время написал программу для нечеткого сравнения строк FuzzyStringComparison. Теперь у меня возникла необходимость во внешней Native-компоненте с таким же функционалом.

32х и 64х-разрядные компоненты входят как макет FuzzyStringComparisonNative в прилагаемую к статье обработку "Проверка библиотеки FuzzyStringComparison Native".

Содержимое ZIP-архива из макета обработки представлено на скриншоте:

 

 

Компонента проводит транслитерацию с последующей адаптацией фонетического алгоритма для русского языка. И далее проводится сравнение в соответствии с установленными флагами.

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

Компонента проста в работе и имеет три функции и два свойства:

1. функция ПодготовитьИсточник(SRS)

В качестве реквизита SRS надо передать текст с любым количеством строк, вида:
Код или номер строки или любой уникальный номер|Наименование товара|
которые разделены между собой символом перевод строки, н-р:

20835|A-Thermic носки Alpinist p.35-38|
20836|A-Thermic носки Alpinist p.39-42|
20837|A-Thermic носки Alpinist p.43-46|

Наличие символов "|" обязательно, т.к. по ним идет парсинг строк в компоненте.

2. функция ПодготовитьПриемник(DST)

По аналогии с 1-ой функцией, в качестве реквизита DST надо передать текст с любым количеством строк, вида:
Код или номер строки или любой уникальный номер|Наименование товара|
которые разделены между собой символом перевод строки, н-р:

19237|A-Thermic носки Running p.35-38|
19235|A-Thermic носки Running p.39-42|
19236|A-Thermic носки Running p.43-46|

3. Функция Сравнить()

Первые две функции можно вызывать в любой последовательности. Но функция Сравнить вызывается строго после первых двух, т.к. сравнивает подготовленные ими данные. Как видно функция Сравнить без параметров.

На выходе функция Сравнить возвращает текст вида:

Код_Приемник|Наименование_Приемник|Код_Источник;Расстояние_Левенштейна|, например:

26683|ящик A-Elita Sputnik|31403;0|16115;5|24613;6|02463;7|08040;11|21620;11|02243;12|09474;12|10807;12|15352;12|

13708|ящик A-Elita малый Sport|16115;5|02463;9|31403;10|24613;10|06966;13|03118;13|07200;13|06204;14|00447;14|19550;14| 21436|

ящик A-Elita малый SportBeg яркий|16115;13|31403;14|24613;15|02463;17|09744;19|27177;19|21620;19|04494;20|02727;20|14652;20|

Коды из базы-источника выстраиваются по возрастанию расстояния Левенштейна (0 - полное соответствие).

Если используется альтернативный алгоритм, тогда коды выстраиваются по убыванию (100 - полное соответствие).

Количество соответствий в настоящей версии компоненты 24 штуки, что более чем достаточно.

4. Булевские свойства "АлгоритмЛевенштейна" и "АлгоритмМетафон"

Флаги  АлгоритмЛевенштейна и АлгоритмМетафон, при желании, можно менять перед вызовом функции Сравнить(). По умолчанию во внешней компоненте:
АлгоритмЛевенштейна=Истина
АлгоритмМетафон=Истина

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

Описание обработки "Проверка библиотеки FuzzyStringComparison Native"

 

 

Обработка без правок должна работать в любой конфигурации на УФ, имеющей справочник Номенклатура.

В обработке есть четыре текстовых многострочных поля. При открытии поля SRS (источник) и DST (приемник) заполнены 19-ю одинаковыми строками. При желании можно посмотреть как меняется строка Результат при изменении флагов "Использовать алгоритм Левенштейна" и "Использовать алгоритм Metaphone".

При нажатии кнопки "Заполнить источник товарами из запроса" поле "SRS" заполняется данными из справочника Номенклатуры. В запросе обработки использовалась функция Строка(), которая работает с релиза платформы 1С 8.3.20.1549.

Нижняя строка отражает статистику времени работы при установке тех или иных флагов. Как видно из 1-ого скриншота, самое быстрое время работы при двух установленных флагах.

SRS (137 552)   DST (19)   Результат (19)     1 309 сек     Время начала 20.05.2024 14:29:02   (АлгоритмЛевенштейна=Нет; АлгоритмMetaphone=Нет)
SRS (137 552)   DST (19)   Результат (19)     294 сек     Время начала 20.05.2024 14:23:14   (АлгоритмЛевенштейна=Нет; АлгоритмMetaphone=Да)
SRS (137 552)   DST (19)   Результат (19)     45 сек     Время начала 20.05.2024 14:22:08   (АлгоритмЛевенштейна=Да; АлгоритмMetaphone=Нет)
SRS (137 552)   DST (19)   Результат (19)     35 сек     Время начала 20.05.2024 14:20:37   (АлгоритмЛевенштейна=Да; АлгоритмMetaphone=Да)

"Подводные камни" с которыми столкнулся при написании обработки:

1. Запрос на выборку 137552 товаров отрабатывал быстро, но последующая его укладка в строку через цикл работала очень долго, что сильно напрягало. Поэтому придумал алгоритм по быстрой укладке массива со столбцом из таблицы значений в нужную мне строку, через функцию ЗначениеВСтрокуВнутр(). Функция СтрСоединить() значительно улучшила производительность свертки столбца таблицы значений в строку.

2. Установку компоненты из ZIP-архива (макета обработки FuzzyStringComparisonNative) при каждом запуске выполнять не обязательно! Но если уже установлена старая версия компоненты, а надо использовать новую, тогда без установки не получится.
При подключении компоненты из ZIP-архива (макета обработки FuzzyStringComparisonNative) используется ранее установленная компонента. Компоненты устанавливаются в профиле пользователя "%AppData%\Roaming\1C\1cv8\ExtCompT\"

В обработке реализованы три механизма подключения внешней Native компоненты:

1. 1-ый вариант: подключение ВК из файла. Этот способ работает всегда, т.к. идет обращение к компоненте напрямую, а не через сохраненную копию в профиле пользователя.

2. 2-ой вариант: подключение ВК из общего макета. Этот способ работает только если не надо запускать новую версию компоненты, т.к. вначале происходит подключение к компоненте, а если подключение не прошло тогда компонента устанавливается. При подключении компоненты из ZIP-архива используется ранее установленная компонента. Компоненты устанавливаются в профиле пользователя "%AppData%\Roaming\1C\1cv8\ExtCompT\"

3. 3-ий вариант: подключение ВК из макета обработки. Проблемы аналогичные варианту 2, но в этой обработке устанавливаю компоненту каждый раз при запуске обработки. В обработке использую по умолчанию этот вариант.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

10000 руб.

02.09.2020    269065    1497    422    

1180

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    75492    381    170    

326

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    40321    115    54    

127

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    64250    130    36    

139

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    9124    39    50    

54

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    26521    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2704    6    0    

21

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки. 1.3.11 Доработан механизм контекстной подсказки по метаданным

9500 руб.

17.05.2024    54904    188    63    

220
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ветер в поле 3 23.05.24 10:11 Сейчас в теме
Крайне неудобный и нефункциональный интерфейс у компоненты. Есть же давно известная StrMatch. Там сначала добавляешь все источники (в цикле по одному, хотя тут не столь принципиально), потом по одному сравниваешь с искомой строкой. Причем ты задаешь количество возвращаемых наиболее похожих источников, а не как здесь только один самый похожий.
3. o2005 63 23.05.24 22:00 Сейчас в теме
(1) Вероятно, Вы не очень внимательно читали мою статью. В тексте написано:
"На выходе функция Сравнить возвращает текст вида:
Код_Приемник|Наименование_Приемник|Код_Источник;Расстояние_Левенштейна|, например:
26683|ящик A-Elita Sputnik|31403;0|16115;5|24613;6|02463;7|08040;11|21620;11|02243;12|09474;12|10807;12|15352;12|
......
Количество соответствий в настоящей версии компоненты 24 штуки, что более чем достаточно."

Как видно из текста компонента находит 24 совпадения.

Где Вы увидели что "а не как здесь только один самый похожий" ?
5. o2005 63 23.05.24 22:50 Сейчас в теме
(1) Компонента не визуальная. О каком "неудобный и нефункциональный интерфейс" Вы пишите ?
2. shard 293 23.05.24 10:42 Сейчас в теме
Про сложение (конкатенацию) строк обратите внимание на публикацию и ЗаписьXML
4. o2005 63 23.05.24 22:21 Сейчас в теме
(2) Спасибо большое за подсказку.
Функция СтрСоединить() значительно улучшила производительность свертки столбца таблицы значений в строку.
В моем случае код обработки стал более быстрым и лаконичным:
SRS = СтрСоединить(мСтроки, Символы.ПС);
Теперь выборка запросом 137552 товаров и укладка их в строку занимает менее 2 секунд.
Для отправки сообщения требуется регистрация/авторизация