Полнотекстовый поиск по информационной базе 1С

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

Отчёт поиска

Механизм полнотекстового поиска в 1С состоит из двух составных частей:

  • Полнотекстовый индекс;
  • Средства выполнения поиска.

Полнотекстовый индекс

Полнотекстовый индекс представляет собой, по сути, служебную базу данных, в которую заносится информация об объектах информационной базы. Средства выполнения полнотекстового поиска получают данные из него.

Будет ли информация о том или ином объекте входить в полнотекстовый индекс, определяется его свойством «Полнотекстовый поиск» (значение по умолчанию «Использовать») в конфигураторе.

Участие в индексе

Если установлено значение «Использовать», объект информационной базы будет участвовать в полнотекстовом поиске.

Полнотекстовый индекс создаётся только один раз. После этого он только периодически обновляется.

Частота обновления определяется исходя из интенсивности работы с информационной базой. Чем чаще в ней происходят изменения (добавление данных в справочники, создание и проведение документов и т.д.), тем чаще нужно обновлять полнотекстовый индекс. Иначе поиск будет предоставлять пользователю неактуальные данные.

Управлять полнотекстовым индексом можно из режима» 1С Предприятие» или программно.

В режиме «1С Предприятие»

В режиме «1С Предприятие» доступ к требуемому функционалу осуществляется с помощью меню «Все функции» — «Стандартные» — «Управление полнотекстовым поиском».

Управление поиском

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

Кнопка «Настройка» открывает диалоговое окно включения и отключения полнотекстового поиска как такового.

Настройка поиска

В программном коде

Для работы с полнотекстовым поиском в программном коде существует специальный объект «Полнотекстовый поиск».

Обновление полнотекстового индекса возможно в двух режимах:

  • Полное;
  • Частичное.

Первый режим используется для обновления полнотекстового индекса целиком.

Если

Для этого в методе ОбновитьИндекс в первом параметре передаётся значение «Истина» (второй имеет значение по умолчанию «Ложь»).

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

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

Второй режим применяется для быстрого обновления, так как данные обновляются отдельными порциями, максимальный размер которых составляет 10 000 записей. При этом за один раз обрабатывается только одна порция. То есть, если нужно обновить 25 000 записей, быстрое обновление придётся выполнить три раза.

Реализация частичного обновления полностью аналогична полному за исключение параметров передаваемых методу ОбновитьИндекс.

При быстром обновлении значение первого параметра остаётся по умолчанию («Ложь»), а во втором параметре передаётся наоборот «Истина». Тогда слияния не произойдет, и данные будут обновляться каждый раз частично.

Очистка индекса производится при помощи метода ОчиститьИндекс. Он не принимает никаких параметров.

Важно:

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

 

 

Включение и отключение полнотекстового поиска производится при помощи метода УстановитьРежимПолнотекстовогоПоиска. Он принимает единственный параметр типа РежимПолнотекстовогоПоиска.

Для включения полнотекстового поиска передаём РежимПолнотекстовогоПоиска.Разрешить

Для отключения РежимПолнотекстовогоПоиска.Запретить

Реализация полнотекстового поиска

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

Реализовать его можно при помощи такого объекта конфигурации как «Отчёт».

Для этого в режиме конфигуратор создаём новый «Отчёт» и сразу же создаём для него основную форму.

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

Внешний вид отчёта по поиску

Для работы с полнотекстовым поиском нам потребуются:

  • Три команды:
    • Поиск – Осуществляет непосредственно поиск данных;
    • Предыдущая – переход на предыдущую страницу поисковой выдачи;
    • Следующая – переход на предыдущую страницу поисковой выдачи.
  • Реквизиты:
    • Поисковое выражение – строка поиска;
    • РезультатПоиска – (строка) отображает результаты поиска. Для отображения сразу устанавливаем в свойстве «Вид» значение «Поле HTML документа»;
    • РезультатыПоиска – (список значений) Вспомогательный реквизит для хранения информации о найденных объектах информационной базы;
    • СообщенииеОРезультате – (строка) выводит сообщение о результатах поиска.;
    • ТекущаяПозиция – (число) вспомогательный реквизит, хранит условный номер страницы результатов поиска.

Поиск может выдать результат достаточно большого объёма. Поэтому сразу предусматриваем условное разделение их на страницы для удобства работы. Собственно для этого и созданы команды «Предыдущая», «Следующая» и реквизит «Текущая позиция».

Для работы формы поиска на форме необходимо разместить только все три команды, а также реквизиты «Поисковое выражение», «РезультатПоиска» и «СообщенииеОРезультате».

Всё вышеперечисленные элементы можно располагать по своему усмотрению. Возможный вариант их расположения:

Макет формы отчёта поиска

Этот же вариант в работе уже был показан в самом начале статьи. Однако для того чтобы придать созданной форме отчёта работоспособность разработать её внешний вид недостаточно.

Нужно реализовать программную логику работы с полнотекстовым поиском.

Основной механизм полнотекстового поиска и обработки его результатов

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

Получаем результаты поиска по введённой поисковой фразе и выбираем из них соответствующую часть.

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

  • Значение «0» – выбираем самую первую часть результатов поиска;
  • Значение «1» – выбираем следующую часть (страницу) результатов поиска относительно текущей позиции;
  • Значение «-1» – выбираем предыдующую часть (страницу) результатов поиска относительно текущей позиции.

Далее получаем информацию о каждом найденном объекте информационной базы и добавляем её в список РезультатыПоиска.

При этом краткую информацию о них отображаем в виде HTML в тестовом поле РезультатПоиска. Это именно то, что будет видеть пользователь, если был найден хотя бы один объект (иначе это текстовое поле останется пустым).

Сохраняем текущую позицию (условный номер текущей части (страницы) и общее количество частей (страниц) в поисковой выдаче.

В завершение обработки результатов поиска отображаем информацию о результатах поиска и устанавливаем доступность команд «Предыдущая» и «Следующая».

Полностью процедура поиска на стороне сервера выглядит следующим образом:

Приведённая процедура является основой выполнения полнотекстового поиска и представляет наиболее сложный его компонент.

Процедура работы с поиском на стороне клиента только проверяет, не задан ли пустой поисковый запрос и если он действительно не пуст, вызывает серверную процедуру.

Реализация клиентских команд и доступа к найденным объектам

Теперь, когда механизм поиска готов, можно без труда реализовать работу всех трёх ранее созданных команд на форме отчёта.

Смысл параметров передаваемых процедуре Искать подробно описан в предыдущем подразделе.

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

Теперь при клике мышью на любом из найденных объектов, отображаемых в списке, этот объект будет открыт для просмотра и редактирования.

Варианты обновления полнотекстового индекса

В заключение хотелось бы сказать несколько слов о таком важном вопросе, как применимость различных вариантов обновления полнотекстового индекса.

Как уже было сказано выше, возможны два варианта обновления полнотекстового индекса:

  • Вручную (через меню «Все функции»);
  • При помощи программного кода.

Они не является взаимоисключающими. Однако в зависимости от конкретных обстоятельств и IT инфраструктуры один из них, так или иначе, является более предпочтительным.

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

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

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

Ручное обновление незаменимо при работе с информационной базой в файловом режиме в одно лицо или в составе небольшой группы.

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

Однако требует определённой дисциплины, чтобы обновления выполнялись своевременно.

2 комментария

  1. Добрый день.

    Алгоритм полнотекстового поиска реализован в самописной конфе.
    Проблема заключается в сложной системе настройки прав к объектам (через регистр сведений), т.е. автоматом не убираются документы на которые у пользователя нет прав. По сути вопроса: РезПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПоиска, РазмерПорции); далее определяем где именно искать и размеры порций. В результате есть список найденных документов в переменной РезПоиска. Затем я проверяю права на полученные документы в РезПоиска, в итоге мне нужно отсеять те документы из общего списка на которые у тек. пользователя нет прав. Подскажите, как это можно реализовать? СПс.

    1. Здравствуйте, Дмитрий.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *