При работе с клиентом столкнулся с пожеланием к вводу по строке при заполнении документа "Реализация товаров и услуг".
А именно было необходимо, чтобы система искала нужную номенклатуру, при наборе с клавиатуры не только по первым символам (это стандартное поведение), но и по вхождению введенных символов в название.
Рассмотрим пример. Допустим, есть список номенклатуры, в котором есть - газета "Ярмарка":
Если мы начинаем набор со слова "газета", система нам находит нужную позицию. Совсем другое дело, если мы не помним точно, как у нас записана нужная номенклатура и, допустим, начинаем ввод со слова "Ярмарка". В этом случае система не сможет найти нужную нам позицию:
Решить данную задачу нам поможет обработчик модуля менеджера - ОбработкаПолученияДанныхВыбора().
В принципе, мы могли бы изменить обработчик изменения реквизита нужной нам формы, но этот метод является менее предпочтительным, если алгоритм работы нам необходимо поменять во всех формах, где используется нужный нам тип данных, т.е. справочник "Номенклатура".
Итак, обращаемся к модулю менеджера справочника "Номенклатура":
Контекс выполнения этой процедуры - это "сервер", поэтому в получении нужного нам списка мы сможем использовать запрос. В реализации нашей задачи нам поможет оператор запроса "ПОДОБНО" и определенная маска для наименования:
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование ПОДОБНО &Наименование";
Запрос.УстановитьПараметр("Наименование", "%" + Параметры.СтрокаПоиска + "%");
РезультатЗапроса = Запрос.Выполнить();
Таблица = РезультатЗапроса.Выгрузить();
Массив = Таблица.ВыгрузитьКолонку("Ссылка");
ДанныеВыбора = Новый СписокЗначений;
ДанныеВыбора.ЗагрузитьЗначения(Массив);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Отметим, что в нашем обработчике - ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбраблтка) для нас важны все три параметра. В первый "ДанныеВыбора" мы загружаем наш список номенклатуры, полученный по нашему алгоритму. Из параметра "Параметры" мы получим значение введенное пользователем, а третьему параметру "СтандартнаяОбработка" мы должны поставить значение "Ложь"(отключаем стандартный алгоритм системы).
В результате одной небольшой процедурой мы полностью решили поставленную задачу:
Данный способ решиния задачи я использовал еще на Платформе 2.0. Как подсказали в комментариях коллеги в Платформе 3.0 задача решается ещё проще. В справочнике на закладке "Поле ввода" можно выбрать режим ввода по строке. Там два варианта: "начало" и "любая часть".
Однако описанный в статье способ использования обработчика модуля менеджера - ОбработкаПолученияДанныхВыбора() хорошо подойдет, если понадобится другой вариант работы алгоритма ввода по строке, ну или если у Вас все ещё платформа 8.2.