Как исключить поле «Родитель» из полнотекстового поиска в форме выбора справочника «Абоненты»?

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

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

Понимание механизмов поиска в 1С

Для начала важно разграничить два понятия, которые часто путают: Ввод по строке и Полнотекстовый поиск. Это принципиально разные механизмы:

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

Настройка способа поиска для оптимизации выбора

Если ваша задача — изменить то, как 1С находит элементы при вводе в поле, рассмотрим настройку Способ поиска строки. Именно этот параметр определяет, будет ли система искать только по началу строки или по любой ее части.

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

  1. Откройте нужный справочник в конфигураторе.
  2. Перейдите на вкладку Поле ввода.
  3. Найдите настройку Способ поиска строки.
  4. Установите значение Любая часть.

Важное предупреждение: При базе объемом в 500 000 записей, использование поиска по «любой части» (оператор LIKE в SQL) может создать высокую нагрузку на СУБД. Если поиск начинает «тормозить», стоит ограничить количество полей, по которым идет поиск, через свойства реквизитов.

Управление индексацией реквизита «Родитель»

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

  1. В дереве конфигурации откройте ветку вашего справочника.
  2. Перейдите в раздел Стандартные реквизиты.
  3. Найдите реквизит Родитель.
  4. В свойствах реквизита установите свойство Полнотекстовый поиск в значение Не использовать.

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

Профессиональный подход: использование динамического списка

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

Рассмотрим, как реализовать этот подход:

  1. Создайте на форме динамический список.
  2. В запросе динамического списка явно укажите только те поля, по которым разрешен поиск (например, только Наименование и Код).
  3. Исключите поле Родитель из условия поиска в запросе.
  4. Разместите на форме отдельное поле ввода для поисковой строки.
  5. В обработчике события ПриИзменении этого поля программно обновляйте параметры динамического списка.

Пример логики обновления параметров:


// В обработчике события поля ввода
Список.Параметры.УстановитьЗначениеПараметра("СтрокаПоиска", "%" + ТекстПоиска + "%");

При таком подходе нагрузка на сервер будет минимальной, так как поиск выполняется строго по индексируемым полям, которые вы выбрали сами. Это позволит вашему абонентскому отделу работать с базой в 500 000 клиентов без задержек, предоставляя только релевантные результаты поиска.

Резюме

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

← На главную