Как настроить поиск по любой части наименования номенклатуры в 1С

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

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

Причины поведения системы при автоподборе

Выясним, почему стандартная настройка метаданных не срабатывает в типовых конфигурациях (таких как «1С:Управление торговлей 11», «1С:ERP» и «1С:Комплексная автоматизация»). В этих решениях штатный механизм платформы по подбору по строке переопределен программно в событии ОбработкаПолученияДанныхВыбора модуля менеджера объекта или в специализированных общих модулях.

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

Запрос.УстановитьПараметр("СтрокаПоиска", СтрокаПоиска + "%");

В результате СУБД выполняет условие ПОДОБНО "Текст%", что обеспечивает поиск строго по началу строки и игнорирует вхождения текста в середине наименования.

Способ 1. Использование спецсимвола пользователем (без изменения кода)

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

Способ 2. Доработка логики через расширение конфигурации

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

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

// Изменение формирования параметра для поиска по любой части строки
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + СтрокаПоиска + "%");

Важно о производительности: Использование оператора ПОДОБНО "%Текст%" отключает использование индексов СУБД по наименованию. В крупных базах данных (от 100 000 элементов номенклатуры) это может приводить к повышенной нагрузке на сервер при одновременной работе нескольких пользователей.

Способ 3. Использование полнотекстового поиска (ППД)

Посмотрим, как решить задачу подбора без потери производительности на больших справочниках. Для этого необходимо задействовать полнотекстовый поиск платформы.

  1. Перейдем в раздел администрирования и убедимся, что полнотекстовый поиск включен.
  2. Проверим настройку регламентных заданий по обновлению и слиянию индекса полнотекстового поиска. Если индекс не обновлен, поиск по подстроке работать не будет.
  3. В обработчике ОбработкаПолученияДанныхВыбора установим использование полнотекстового поиска для параметра выборки:

Параметры.ПолнотекстовыйПоиск = ПолнотекстовыйПоискПриВводеПоСтроке.Использовать;

Способ 4. Использование штатной формы подбора товаров

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

← На главную