Как организовать удобный поиск данных по всей базе 1С?

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

Зачастую перед разработчиками встает задача реализации сквозного поиска по конфигурации: пользователи хотят вводить ключевые слова (например, наименование товара или название контрагента) и получать список всех объектов, где это упоминается — будь то справочники, документы или даже комментарии. Давайте разберем, как сделать это грамотно, не создавая излишней нагрузки на сервер и не занимаясь разработкой «велосипедов».

Использование механизма полнотекстового поиска (ППД)

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

Для начала работы рассмотрим программное создание списка поиска:


СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПоиска, 50);
СписокПоиска.ПолучатьОписание = Истина;
СписокПоиска.ПерваяЧасть();

Важные моменты при настройке ПолнотекстовыйПоиск:

  1. Ограничение области поиска: Не обязательно индексировать абсолютно все объекты. Через настройки состава метаданных вы можете исключить классификаторы (адреса, банки) и служебные справочники, которые не несут полезной нагрузки для пользователя. Это уменьшит размер индекса и ускорит работу.
  2. Актуальность данных: Индекс обновляется регламентным заданием. Если бизнес требует мгновенного появления данных в поиске, рассмотрите возможность вызова ПолнотекстовыйПоиск.ОбновитьИндекс(), но помните, что частое обновление создает нагрузку на сервер БД.

Доработка «Глобального поиска»

В современных конфигурациях на платформе 8.3 (начиная с 8.3.15+) уже существует готовый инструмент — Глобальный поиск. Разработчику не нужно изобретать новую обработку, достаточно правильно настроить существующую. Рассмотрим, как сделать этот инструмент удобнее для пользователей:

Почему не стоит создавать «свою» обработку с нуля

Создание самописной обработки, которая перебирает все таблицы базы данных через Запрос, является ошибочным подходом. Рассмотрим причины:

  1. Производительность: Сканирование табличной части документов и комментариев по всей базе при каждом нажатии кнопки «Найти» приведет к зависанию системы даже на мощном сервере.
  2. Поддерживаемость: После обновлений конфигурации или добавления новых объектов в расширения, вашу обработку придется постоянно дорабатывать. Механизм ПолнотекстовыйПоиск адаптируется к изменениям структуры метаданных автоматически.
  3. Бардак в учете: Если информация «размазана» по комментариям, лучшее решение — наведение порядка в архитектуре данных (например, использование дополнительных реквизитов или связанных объектов), а не автоматизация хаоса.

Пошаговый план реализации

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

  1. Анализ данных: Выясните, в каких объектах чаще всего ищут информацию. Сформируйте список метаданных для включения в индекс ПолнотекстовыйПоиск.
  2. Настройка состава: В консоли администрирования или настройках программы включите только нужные реквизиты.
  3. Создание интерфейса: Сделайте управляемую форму с одним полем ввода и табличным полем для вывода результатов. Используйте СписокПоиска.ПолучитьРезультат() для отображения найденных элементов.
  4. Тестирование: Проверьте быстродействие на реальных данных. Если поиск по-прежнему работает медленно из-за огромного объема данных, рассмотрите использование специализированных внешних решений, таких как Elasticsearch, хотя для большинства задач 1С штатного ППД более чем достаточно.

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

← На главную