Как реализовать интеллектуальный поиск и сопоставление номенклатуры в 1С?

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

При импорте прайс-листов от поставщиков мы часто сталкиваемся с проблемой несоответствия наименований товаров. Например, один и тот же товар может быть записан как «Саморез 4,8*35 цвет красное вино (RAL 3005)» во внешнем файле и как «Саморез 35*4,8 (уп. 250 шт.) (производство) красное вино» в нашей базе. Обычное строгое соответствие здесь не сработает. Давайте разберем, какие подходы помогут нам решить эту задачу.

Этап 1: Очистка и нормализация данных

Прежде чем приступать к поиску, необходимо подготовить данные. Любой алгоритм «запутается», если будет сравнивать «сырые» строки. Мы рекомендуем следовать стратегии предобработки:

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

Этап 2: Выбор алгоритма поиска

Рассмотрим технологии, которые помогут нам сопоставить наименования:

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

Метод N-грамм: В отличие от классического расстояния Левенштейна, которое хорошо ловит опечатки, метод N-грамм разбивает строку на части (например, по 3 символа) и сравнивает их количество. Это более эффективно для сопоставления сложных номенклатурных позиций, где слова могут идти в разном порядке.

Весовые коэффициенты: Мы можем реализовать систему подсчета рейтинга схожести. Разделите строку на токены (слова или числа) и назначьте им веса:

Этап 3: Практическая реализация в 1С

Чтобы реализовать систему предложений, используйте комбинированный подход. Рассмотрим пример структуры кода для анализа схожести:


Функция ПолучитьКоэффициентСхожести(Строка1, Строка2)
    // 1. Очистка строк от стоп-слов
    // 2. Разбиение на токены
    // 3. Сравнение токенов с учетом весов
    Результат = 0;
    // Логика сравнения
    Возврат Результат;
КонецФункции

Для реализации нечеткого поиска можно использовать стандартные средства PostgreSQL, если ваша база работает на этой СУБД. Там доступны встроенные инструменты для полнотекстового поиска (textsearch), которые работают очень быстро и позволяют настроить поиск даже с учетом специфики ваших данных.

Рекомендации по внедрению

Не пытайтесь сразу автоматизировать всё на 100%. Мы советуем реализовать систему так, чтобы она предлагала оператору 3–5 наиболее вероятных вариантов, отсортированных по расчетному коэффициенту. Это позволит товароведу быстро выбрать правильную позицию, а не искать её вручную по всей базе.

Помните, что для метизов критически важными являются именно числовые параметры. При написании алгоритма убедитесь, что система одинаково воспринимает «4,8» и «4.8», игнорируя разделитель дробной части. Начните с классического разбора на слова и присвоения приоритетов, и по мере накопления статистики вы сможете уточнять веса параметров, приближая работу системы к интеллектуальной.

← На главную