- Заметки из Зазеркалья
- 1С 8.3 : Ввод по строке — поиск по первым символам или в любом месте наименования
- Способ поиска строки при вводе по строке
- Страницы
- 22 авг. 2015 г.
- Использование полнотекстового поиска при вводе по строке
- Расширенный автоподбор при вводе по строке в поле ввода в управляемых формах
- Ввод по строке (переопределение)
Заметки из Зазеркалья
Реализовано в версии 8.3.3.641.
Мы серьёзно улучшили ввод по строке. Для этого нам пришлось реализовать новый мощный механизм поиска в поле ввода. Теперь он может быстро работать по миллионам записей, содержащихся в базе данных.
Мы проанализировали задачи поиска, возникающие у пользователей. Провели «ревизию» имеющихся в платформе механизмов, которые используют различные алгоритмы поиска. В результате ввод по строке приобрёл качественно новые возможности.
Теперь пользователи могут искать в любом месте названия, а не только по началу строки. Они могут использовать при этом полнотекстовый поиск и даже выполнять поиск с помощью фонового задания. Для того чтобы полнотекстовый поиск эффективно работал при вводе по строке, мы дополнительно оптимизировали этот механизм поиска и повысили его производительность.
Все новые свойства, позволяющие настраивать ввод по строке, мы собрали на отдельной закладке окна редактирования объекта конфигурации:
Например, вы можете указать, что поиск будет выполняться в любом месте строки, а не только в её начале:
Тогда пользователь может набирать любые фрагменты слов, а не только те символы, с которых начинается искомая строка:
Использование полнотекстового поиска при вводе по строке включается отдельным свойством:
С помощью полнотекстового поиска пользователи могут среди больших объёмов данных быстро находить подходящие данные по любому из слов, содержащихся, например, в наименовании:
Также они могут искать и по нескольким известным словам. Незаконченные слова будут автоматически дополняться возможными сочетаниями:
Если объём данных велик, то в обоих случаях вы можете указать, что поиск должен выполняться с помощью фонового задания:
Тогда рядом с полем ввода для пользователей будет отображаться анимированная картинка, похожая на картинку, которая отображается при фоновом выполнении отчета:
Общие рекомендации мы можем сформулировать так:
- если в объекте, который используется в поле ввода, не ожидается большого количества данных, то мы советуем включить поиск строки в любом месте;
- если в объекте планируется большое количество данных, то:
- мы советуем включить полнотекстовый и фоновый поиск;
Все перечисленные свойства вы можете, при необходимости, переопределить в процессе выполнения прикладного решения.
На клиенте — в клиентских обработчиках событий поля ввода АвтоПодбор и ОкончаниеВводаТекста:
На сервере — в модуле менеджера того объекта, в данных которого выполняется поиск. В обработчике события ОбработкаПолученияДанныхВыбора:
Естественно, в этом месте, на сервере, нельзя переопределить способ выполнения поиска «Непосредственно» или «Фоновым заданием». Потому что исполнение кода уже передано на сервер.
Источник
1С 8.3 : Ввод по строке — поиск по первым символам или в любом месте наименования
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования!
В 1С 8.3 по умолчанию настройки справочника номенклатуры такие:
При такой настройке, механизм поиска в справочнике номенклатуры работает так:
— в документе вводим первые символы Пета и видим такой результат подсказки:
Но, такой поиск не удобен и менеджеры захотели подбирать номенклатуру по артикулу, например 1320
Для этого изменим настройки указав поиск по Любой части и включив полнотекстовый поиск:
Сохраняем конфигурацию и в режиме предприятие обновляем Полнотекстовый поиск: Меню — Все функции — Стандартные — Управление полнотекстовый поиском
После этого пробуем в документе выполнить поиск по 1320 и видим:
Все Менеджеры пищат как дети на новогодней елке!
Пока писал эту статью нашел в интернете другое решение для платформы 8.2:
ОбработкаПолученияДанныхВыбора( , , )
В модуле менеджера справочника «Номенклатура» пишем:
В обработчике — ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбраблтка) для нас важны все три параметра. В первый «ДанныеВыбора» мы загружаем наш список номенклатуры, полученный по нашему алгоритму. Из параметра «Параметры» мы получим значение введенное пользователем, а третьему параметру «СтандартнаяОбработка» мы должны поставить значение «Ложь»(отключаем стандартный алгоритм системы).
В результате одной небольшой процедурой мы полностью решили поставленную задачу.
Источник
Способ поиска строки при вводе по строке
Страницы
22 авг. 2015 г.
Использование полнотекстового поиска при вводе по строке
Потребовалось тут как то реализовать в документе ввод по строке с поиском по строковым реквизитам справочника. Реализовывать по старинке через запрос при работающем и более функциональном полнотекстовом поиске совершенно не хотелось. К сожалению, на данный момент, даже при включении в настройках справочника использования полнотекстового поиска при вводе по строке поиск происходит только по указанным полям в настройке «Поле ввода».
Для демонстрации решения в тестовой базе буду использовать процедуру ОбработкаПолученияДанныхВыбора модуля менеджера справочника, чтобы механизм поиска действовал во всей конфигурации.
Первые наброски выглядят следующим образом:
Проверяем работу кода. Добавляем описание товара, не забываем обновить индекс полнотекстового поиска.
Выполняем ввод по строке в документе:
Поиск отрабатывает, но представление результата не информативно. Возвращаемся в конфигуратор и смотрим, из чего состоит ЭлементПоиска.
Свойство | Значение | Тип | |
ЭлементПоиска | ЭлементСпискаПолнотекстовогоПоиска | ЭлементСпискаПолнотекстовогоПоиска | |
Значение | Стол журнальный | СправочникСсылка.Номенклатура | |
Метаданные | Список товаров | ОбъектМетаданных | |
Описание | «Описание товара: Стекло, дуб, ковка» | Строка | |
Представление | «Стол журнальный» | Строка |
Перепишем заполнение элементов списка, представление элемента списка формируем из свойств «Представление» и «Описание».
Результат уже несколько лучше.
Но если посмотреть на работу стандартного механизма, то увидим, что результат поиска подсвечивается. Было бы замечательно реализовать такое отображение и нашем варианте.
Синтаксис-помощник подсказывает, что представлением элемента списка может выступать как Строка, так и ФорматированнаяСтрока. Ок, это как раз наш вариант. Осталось только выделить результат поиска в описании элемента. Используя метод ПолучитьОтображение можно получить отображение результата полнотекстового поиска в HTML и XML представлениях.
HTML-представление показалось мне неудобным для разбора, поэтому используем второй вариант. XML-представление дает на выходе объект ЧтениеXML, который в свою очередь передается в ПостроительDOM. Окончательный вариант процедуры:
Проверяем, результат получается вполне сносный.
Источник
Расширенный автоподбор при вводе по строке в поле ввода в управляемых формах
Ниже будет выложен готовый код. А тут несколько вводных слов к нему.
Альтернативный алгоритм максимально близок к штатному автоподбору при вводе по строке с режимом поиска по строке «Любая часть». Строки результата в которых слова поиска находятся в начале строки выдаются первыми. Чтобы изменить количество строк выдаваемого результата достаточно изменить значение переменной «МаксимумСтрокРезультата». Из забавного: подсветку слов поиска в результате пришлось реализовывать вручную в функции ПодсветитьСлова() и это оказалось сопоставимо по объему с остальным кодом.
Формирование списка позиций для автоподбора перехватывается в модуле менеджера объекта (соответствующего типу значения для поля ввода). Обработчик называется ОбработкаПолученияДанныхВыбора(). Собственно, в этом обработчике и необходимо организовать альтернативный алгоритм получения данных автоподбора при вводе по строке. К слову, получение данных выбора можно инициировать программно, вызвав метод модуля менеджера объекта ПолучитьДанныеВыбора().
Но так как может оказаться нежелательным менять алгоритм автоподбора при вводе по строке сразу для всех полей ввода в конфигурации, ниже будет демонстрация приема переопределения для конкретного поля ввода «Номенклатура» в модуле некоей формы с помощью перехвата события поля ввода «Автоподбор»:
Как видно из кода выше, для получения данных выбора мы передаем структуру с двумя параметрами — «СтрокаПоиска» и «ВводПоСтрокеРасширенный». Первый параметр является предопределенным и обязательным. А второй — это наш опциональный признак использования альтернативного алгоритма.
Ниже код модуля менеджера справочника «Номенклатура»:
Вот, собственно, и все чем я хотел поделиться в этой статье. Надеюсь, кому-то она сэкономит время.
Источник
Ввод по строке (переопределение)
При работе с клиентом столкнулся с пожеланием к вводу по строке при заполнении документа «Реализация товаров и услуг».
А именно было необходимо, чтобы система искала нужную номенклатуру, при наборе с клавиатуры не только по первым символам (это стандартное поведение), но и по вхождению введенных символов в название.
Рассмотрим пример. Допустим, есть список номенклатуры, в котором есть — газета «Ярмарка»:
Если мы начинаем набор со слова «газета», система нам находит нужную позицию. Совсем другое дело, если мы не помним точно, как у нас записана нужная номенклатура и, допустим, начинаем ввод со слова «Ярмарка». В этом случае система не сможет найти нужную нам позицию:
Решить данную задачу нам поможет обработчик модуля менеджера — ОбработкаПолученияДанныхВыбора().
В принципе, мы могли бы изменить обработчик изменения реквизита нужной нам формы, но этот метод является менее предпочтительным, если алгоритм работы нам необходимо поменять во всех формах, где используется нужный нам тип данных, т.е. справочник «Номенклатура».
Итак, обращаемся к модулю менеджера справочника «Номенклатура»:
Контекс выполнения этой процедуры — это «сервер», поэтому в получении нужного нам списка мы сможем использовать запрос. В реализации нашей задачи нам поможет оператор запроса «ПОДОБНО» и определенная маска для наименования:
Отметим, что в нашем обработчике — ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбраблтка) для нас важны все три параметра. В первый «ДанныеВыбора» мы загружаем наш список номенклатуры, полученный по нашему алгоритму. Из параметра «Параметры» мы получим значение введенное пользователем, а третьему параметру «СтандартнаяОбработка» мы должны поставить значение «Ложь«(отключаем стандартный алгоритм системы).
В результате одной небольшой процедурой мы полностью решили поставленную задачу:
Данный способ решиния задачи я использовал еще на Платформе 2.0. Как подсказали в комментариях коллеги в Платформе 3.0 задача решается ещё проще. В справочнике на закладке «Поле ввода» можно выбрать режим ввода по строке. Там два варианта: «начало» и «любая часть«.
Однако описанный в статье способ использования обработчика модуля менеджера — ОбработкаПолученияДанныхВыбора() хорошо подойдет, если понадобится другой вариант работы алгоритма ввода по строке, ну или если у Вас все ещё платформа 8.2.
Источник