Нечёткий поиск строк в 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    4988    2    1    

3

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

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

6000 руб.

25.02.2026    4511    16    1    

20

Файловый обмен (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    46718    32    13    

50

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

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

7320 руб.

05.06.2026    355    2    0    

4

Поиск данных Программист Пользователь 1С 8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

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

1 стартмани

27.04.2026    1246    13    war41k    5    

16

Поиск данных Нейросети Программист Бесплатно (free)

Практический кейс исследовательской разработки (R&D) с использованием искусственного интеллекта и нейросетей в 1С для поиска по прайсам поставщиков. Рассматривается гибридный поиск (Hybrid Search: векторный + полнотекстовый), позволяющий находить товары по смыслу, а не по буквам — даже при сленге, опечатках и разном написании. Решение работает полностью локально, без облаков, и интегрируется с 1С.

14.01.2026    3180    Prepod2003    14    

13

Поиск данных 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

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

2 стартмани

18.08.2025    8106    39    sapervodichka    14    

77
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bakhroooom 08.07.26 12:01 Сейчас в теме
Обработка супер 👍👍Пригодилась сильно! Продолжайте творить 👏🏼
Для отправки сообщения требуется регистрация/авторизация