Поиск любых справочников по частям слов наименования, при этом не важно, в каком порядке вводить части слов наименования.
Например при строке поиска «ламп 40 вт» результат будет тем же, что и при поиске по строке «вт ламп 40».
Поиск происходит очень быстро, при номенклатуре в 40 000 позиций, время работы около 1,5 — 2 сек.
Подключение к конфигурации производится путем объединения конфигураций.
В прилагаемом файле находится база данных с небольшим количеством номенклатуры для примера.
Конфигурация базы данных содержит только необходимые объекты метаданных:
1. Общий модуль с небходимыми процедурами
2. Подписка на событие «ПриЗаписи» объекта «СправочникОбъект.Номенклатура». Если необходимо выполнять поиск
в другом справочнике, то его тип нужно добавить в список типов источника подписки.
3. Регистр сведений «_БазаСлов» хранит «огрызки» слов, составляющих наименования элементов справочника
4. Обработка «_ПереиндексацияБазыСлов» служит для первоначального заполнения регистра сведений «_БазаСлов», а
так же для его очистки в случае необходимости.
5. Обработка «_БыстрыйПоискЭлементовСправочника» служит для ввода поисковой строки и вызывается из формы списка
справочника. Я в своем примере на форму списка номенклатуры добавил две кнопки «Поиск» и «ПоискОчистка», назначил
им сочетания клавиш «F7» и «Ctrl+F7»
Не используются внешние компоненты.
4. Обработка «_ПереиндексацияБазыСлов» служит для первоначального заполнения регистра сведений «_БазаСлов», а
так же для его очистки в случае необходимости.
А зачем? когда данная задача решается просто разбиением строки и формированием запроса через ПОДОБНО? и по скорости уж точно не медленнее, чем
Подскажу вам хитрость как это легко доработать в процедуре поиске стандартных конфигураций.
На примере обработки «Подбор номенклатуры» УТ 10.3
Показать
Заменяем на
Показать
P.S. не нужно хранить «огрызки» слов. Время работы около 0,5 — 1 сек.
Спасибо. Очень помогло.
(2) идея хорошая, вероятно вы выложили не весь текст который нужно заменить, и не совсем универсальный механизм.
Предлагаю в обработке Подбор номенклатуры в процедуре ВыполнитьПоиск() следующее:
Показать