Нечёткий поиск строк в 1С через маленькую консольную программку fuzzlink.exe без лишних заморочек

08.07.26

Задачи пользователя - Поиск данных

Моя реализация нечеткого поиска для поиска данных с учетом опечаток, реализовано через вызов маленькой консольной программы, реализующей возможности бесплатной библиотеки RapidFuzz.

Файлы

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

Наименование Скачано Купить файл
Нечёткий поиск строк в 1С через маленькую консольную программку fuzzlink.exe без лишних заморочек
.epf 9,78Mb
0 2 500 руб. Купить

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

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

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

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

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

Нечёткий поиск строк в 1С через fuzzlink.exe

Короткая инструкция по использованию функции НайтиПохожиеСтроки() для поиска похожих строк с учётом опечаток.

 

Что делает функция

Функция принимает поисковый запрос и массив строк, передаёт их внешней утилите fuzzlink.exe через временные JSON-файлы и возвращает наиболее похожие совпадения. Полезно для поиска товаров, контрагентов и прочих строк, когда поисковой запрос может быть не точным.
 

Шаг 1. Подготовка

Поместите fuzzlink.exe в каталог программы, (там, куда указывает КаталогПрограммы()). У меня это "C:\Program Files\1cv8\8.3.25.1286\bin\" Функция вызывает его именно оттуда (либо доработайте как вам удобно). 

 

Шаг 2. Сформируйте массив строк

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

МассивТоваров = Новый Массив;
МассивТоваров.Добавить("Молоко Простоквашино 3.2% 950мл");
МассивТоваров.Добавить("Кефир Простоквашино 1%");
МассивТоваров.Добавить("Сметана Простоквашино 20% 315г");
МассивТоваров.Добавить("Творог Простоквашино 5% 220г");

 

Шаг 3. Вызовите функцию НайтиПохожиеСтроки()

Запрос = "малако прастоквашино"; // намеренно с опечатками
Результаты = НайтиПохожиеСтроки(Запрос, МассивТоваров, 3);

Где параметры:

  • Запрос - это искомая строка (заведомо не точная);
  • МассивТоваров - это сформированный массив строк в которых нужно найти наиболее похожие элементы; 
  • 3 - параметр лимита, какое количество похожих элементов нужно вернуть в результате запроса в порядке убывания. 

 

 Шаг 4. Обработайте результат

Для Каждого Элемент Из Результаты Цикл
    Сообщить(Строка(Элемент.text) + " ("+Строка(Элемент.score)+"%)" );
КонецЦикла;

Элемент результата имеет следующие поля:

  • Элемент.text - это текст найденного элемента;
  • Элемент.score - процент схожести (похожести) с искомой строкой;
  • Элемент.index -  индекс элемента в Массиве строк;

В итого получим следующий результат: 

  1. Молоко Простоквашино 3.2% 950мл (68%)
  2. Сметана Простоквашино 20% 315г (68%)
  3. Кефир Простоквашино 1% (57%)

В порядке наибольшей схожести.

 

Модуль тестовой обработки

&НаКлиенте
Процедура ТестироватьНечеткийПоиск(Команда)
	ТестНечеткогоПоиска();
КонецПроцедуры

&НаСервере
Процедура ТестНечеткогоПоиска() Экспорт
    
    // Массив строк, среди которых ищем
    МассивТоваров = Новый Массив;
    МассивТоваров.Добавить("Молоко Простоквашино 3.2% 950мл");
    МассивТоваров.Добавить("Молоко Домик в деревне 2.5% 1л");
    МассивТоваров.Добавить("Кефир Простоквашино 1%");
    МассивТоваров.Добавить("Сметана Простоквашино 20% 315г");
    МассивТоваров.Добавить("Творог Простоквашино 5% 220г");
    МассивТоваров.Добавить("Масло сливочное Крестьянское 72.5%");
    МассивТоваров.Добавить("Йогурт Активиа клубника 150г");
    МассивТоваров.Добавить("Молоко Веселый молочник 3.2%");
    
    // Заведомо "грязный" запрос с опечаткой
    Запрос = "малако прастоквашино";
    
    Результаты = НайтиПохожиеСтроки(Запрос, МассивТоваров, 3);
    
    // Выводим результат
    Сообщить("Запрос: " + Запрос);
    Сообщить("—————————————————————");
    Для Каждого Элемент Из Результаты Цикл
        Сообщить(Строка(Элемент.text) + " ("+Строка(Элемент.score)+"%)" );
    КонецЦикла;

КонецПроцедуры

&НаСервере
Функция НайтиПохожиеСтроки(Запрос, МассивСтрок, Количество = 5)

    Каталог = КаталогВременныхФайлов();

    Вход =
        Каталог + "request_" +
        Строка(Новый УникальныйИдентификатор()) +
        ".json";

    Выход =
        Каталог + "response_" +
        Строка(Новый УникальныйИдентификатор()) +
        ".json";

    // Формируем JSON
    Данные = Новый Структура;
    Данные.Вставить("query", Запрос);
    Данные.Вставить("limit", Количество);
    Данные.Вставить("items", МассивСтрок);

    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ОткрытьФайл(Вход);

    ЗаписатьJSON(ЗаписьJSON, Данные);

    ЗаписьJSON.Закрыть();

    // Запускаем EXE
    Команда =
        """" +
        ""+КаталогПрограммы()+"fuzzlink.exe" +
        """ """ +
        Вход +
        """ """ +
        Выход +
        """";
		
	Код = 0;
    ЗапуститьПриложение(
            Команда,
            ,
            Истина,
			Код
        );

    Если не (Код = 0 или Код = "0") Тогда
        ВызватьИсключение
            "Ошибка запуска приложения умного поиска!";
    КонецЕсли;
	
	ФайлОтвета = Новый Файл(Выход);

	Если НЕ ФайлОтвета.Существует() Тогда
        ВызватьИсключение
            "Файл ответа умного поиска не найден";
    КонецЕсли;

    // Читаем результат
    ЧтениеJSON = Новый ЧтениеJSON;

    ЧтениеJSON.ОткрытьФайл(Выход);

    Ответ =
        ПрочитатьJSON(ЧтениеJSON);

    ЧтениеJSON.Закрыть();

    // Очистка
    УдалитьФайлы(Вход);
    УдалитьФайлы(Выход);

    Если НЕ Ответ.success Тогда
        ВызватьИсключение Ответ.error;
    КонецЕсли;

    Возврат Ответ.results;

КонецФункции

 

О программе fuzzlink

fuzzlink - это написанная мной на языке python маленькая консольная программа и скомпилированная в .exe файл (не требует установки python или других зависимостей) в которой используется бесплатная библиотека RapidFuzz;

Код программы опубликован в github.

Скомпилированный .exe можете скачать там-же в папке /dist, или же в макете обработки прикрепленной к этой статье. 

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

Проверено на следующих конфигурациях и релизах:

  • Бухгалтерия предприятия, редакция 3.0, релизы 3.0.201.16

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

нечёткий поиск поиск опечатки fuzzlink exe RapidFuzz

См. также

Информационная безопасность Поиск данных ServiceDesk, HelpDesk Журналы и реестры данных 1С 8.3 Россия Бухгалтерский учет Бюджетный учет Налоговый учет Управленческий учет Платные (руб)

Полный контроль над изменениями в 1С без нагрузки на вашу базу. Мгновенный доступ к истории изменений, удобное сравнение и откат данных в один клик. Простой отчет с визуальным отображением изменений Откат на любую версию объекта в два клика История изменения данных хранится во внешней базе

180000 руб.

05.09.2025    5294    2    1    

4

Поиск данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

13420 руб.

14.05.2012    172246    360    253    

589

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    47159    32    15    

50

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5. Работает на возможностях платформы, внешние компоненты не используются.

6000 руб.

25.02.2026    5385    17    1    

20

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

1.обработка позволяет автоматически вычислить дубли и привести их к единому наименованию во всех документах. 2.так же есть возможность в документах поменять счета учета для номенклатуры. Например разные бухгалтера оформляют поступление одного и того же товара - один занес на 10.01, второй на 41.01 в результате в ОСВ у нас минусы. В обработке есть возможность наглядно увидеть такие ошибки и тут же их поправить не бегая по всем документам. Достаточно поставить галочку у номенклатуры и указать счет учета который надо найти и счет учета на который надо его заменить. Обработка сама вычислит документы в которых номенклатура с галочкой была задействована и заменит счета учета. Что бы не было излишнего изменения документов, в обработке указываются типы документов, где операция замены счета разрешена (например Поступление ТМЦ, Реализация, Отчет о розничных продажах, возврат покупателю итд.)

7320 руб.

05.06.2026    636    2    0    

4

Поиск данных Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта Стажер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Беларусь Россия Казахстан Платные (руб)

Встройте искусственный интеллект прямо в вашу 1С за один вечер. «Цифровой сотрудник» - это чат с нейросетью внутри привычного интерфейса 1С, который умеет отвечать не «в общем», а по вашим данным: обучите его на регламентах, инструкциях и прайсах компании, подключите к данным информационной базы - и получите ассистента, который консультирует бухгалтера по учёту, отвечает менеджеру по прайсу и достаёт цифры из базы по запросу на обычном русском языке. Поддерживаются OpenAI, DeepSeek, Qwen и локальные LLM - включая вариант, когда данные вообще не покидают ваш контур.

3660 руб.

03.08.2026    405    1    0    

2

Поиск данных 1С:Управление торговлей 11 Россия Платные (руб)

Возможность по ИНН контрагента быстро найти Партнера с которым связан контрагент.

7015 руб.

11.09.2025    1132    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bakhroooom 08.07.26 12:01 Сейчас в теме
Обработка супер 👍👍Пригодилась сильно! Продолжайте творить 👏🏼
4. Dilshod0331 23 10.07.26 13:53 Сейчас в теме
(1) Спасибо, рад что помогло
2. V.Nikonov 130 09.07.26 10:25 Сейчас в теме
Ограничения на размер передаваемого Массива есть?
3. Dilshod0331 23 10.07.26 13:53 Сейчас в теме
(2) Ограничения не предусмотрены в реализации и в используемой библиотеке, однако если вы собираетесь сравнивать с огромным массивом данных (миллионы строк) то обработка может занят значительное время. Основная часть библиотеки rapidfuzz написана на C++, поэтому производительность считается очень высокой.
Для отправки сообщения требуется регистрация/авторизация