Как эффективно настроить поиск и удаление дублей номенклатуры в 1С:УТ 11.4 при различиях в пробелах и спецсимволах

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

При работе в 1С:Управление торговлей 11.4 пользователи часто сталкиваются с ситуацией, когда в справочнике «Номенклатура» накапливается множество позиций-дублей. Типичный пример: «Холодильник № 10» и «Холодильник №10». Несмотря на очевидную идентичность для человека, стандартная обработка «Поиск и удаление дублей» при настройке «Похожие слова» может их не увидеть. Рассмотрим детально, почему это происходит и как решить проблему программными и административными методами.

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

Прежде всего, проанализируем ситуацию с технической стороны. Алгоритм «Похожие слова» в типовых решениях 1С базируется на механизме полнотекстового поиска. Система разбивает строку на отдельные «токены» (лексемы). Для программы «№ 10» — это два отдельных слова, а «№10» — одно слово. Из-за разного количества токенов алгоритм считает эти строки недостаточно похожими.

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

Решение 1: Нормализация наименований через групповое изменение реквизитов

Самый быстрый способ заставить стандартный поиск работать — привести все наименования к единому стандарту (убрать лишние пробелы). Мы можем воспользоваться встроенной обработкой «Групповое изменение реквизитов», которая позволяет выполнять произвольный алгоритм на встроенном языке 1С.

Рассмотрим по шагам, как убрать лишний пробел после символа «№»:

  1. Откройте обработку «Групповое изменение реквизитов».
  2. Выберите объект «Номенклатура».
  3. В настройках (кнопка «Дополнительные параметры») включите возможность «Выполнять произвольный алгоритм».
  4. В поле кода введите следующую конструкцию:

Объект.Наименование = СтрЗаменить(Объект.Наименование, "№ ", "№");

Этот код найдет все вхождения «№ » (с пробелом) и заменит их на «№» (без пробела). После выполнения этой обработки названия станут идентичными, и стандартный поиск дублей по «Полному совпадению» мгновенно их обнаружит.

Решение 2: Обработка сложных случаев со вторым вхождением символа

Иногда встречаются более сложные задачи, например: «Холодильник № 10 вид № 171». Если нам нужно убрать пробел только после второго символа «№», или выполнить более точную замену, проанализируем пример кода, который можно использовать в обработке:


Рез = СтрНайти(Объект.Наименование, "№ ", НаправлениеПоиска.С Конца);
Если Рез > 0 Тогда
    Объект.Наименование = Лев(Объект.Наименование, Рез) + Сред(Объект.Наименование, Рез + 2);
КонецЕсли;

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

Решение 3: Создание временного «поискового ключа»

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

Пример функции нормализации:


Функция ПолучитьПоисковыйКлюч(ВходнаяСтрока)
    Результат = НРег(ВходнаяСтрока);
    Результат = СтрЗаменить(Результат, " ", "");
    Результат = СтрЗаменить(Результат, "№", "");
    // Добавьте замену других спецсимволов по необходимости
    Возврат Результат;
КонецФункции

После такой обработки строки «Холодильник № 10» и «холодильник №10» превратятся в идентичный ключ холодильник10. Сравнивая эти ключи, вы со 100% вероятностью найдете все скрытые дубли.

Критически важный нюанс: Ключи аналитики учета номенклатуры

Выполняя слияние дублей в 1С:УТ 11.4, необходимо учитывать архитектуру регистров. В этой конфигурации данные о товарах хранятся в специальных регистрах сведений — «Ключи аналитики учета номенклатуры». Проанализируем ситуацию: если вы просто удалите одну карточку и перенаправите ссылки на другую, записи в регистрах аналитики могут «зависнуть» или некорректно продублироваться.

Рекомендации после удаления дублей:

Использование регулярных выражений (RegExp)

Для наиболее продвинутых случаев, когда нужно найти сложные паттерны (например, любые цифры после знака номера), мы можем задействовать объект VBScript.RegExp через COM-соединение. Это позволит заменить конструкцию «№ [любое количество пробелов] [цифра]» на «№[цифра]» одной командой. Это гораздо надежнее, чем вложенные функции Лев(), Прав() и Сред().

Профилактика появления дублей

Чтобы проблема не вернулась снова, после очистки базы обязательно настройте контроль уникальности. В 1С:УТ 11.4 за это отвечает функционал «Проверять уникальность номенклатуры и характеристик по сочетанию реквизитов». Мы рекомендуем также рассмотреть использование расширений, которые выполняют нормализацию строки (удаление лишних пробелов) непосредственно в момент записи новой карточки номенклатуры. Это предотвратит создание «грязных» данных в будущем.

← На главную