В стандартные элементы формы, содержащие ссылки на объект могут быть подставлены данные подобранные по первым символам наименования или кода для справочников или же по номеру для документов. В качестве расширения указанное поле можно использовать для поиска по любому строковому содержанию в любом реквизите искомого объекта. Для этого необходимо подписаться на событие элемента формы "Окончание ввода текста" внутри обработчика которого установить передаваемому параметру "Значение" либо ссылку на соответствующий объект, либо внести в него список этих объектов. Во втором случае система предложит выбрать один вариант из заполненного списка. Если же в списке только один элемент, то система просто подставит его в указанный элемент формы. В примере ниже я реализовал подбор контрагента. Поиск осуществляется по строке в любой части наименования. Кроме того, в случае, если контрагент не найден, то будет выдан запрос на его создание, и открыто модальное окно для заполнения реквизитов. В случае если элемент записан, он будет подставлен в элемент формы.
Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
Значение = Новый СписокЗначений;
СтандартнаяОбработка = Ложь;
ТекстЗапроса = "ВЫБРАТЬ
| Контрагенты.Ссылка,
| Контрагенты.Наименование,
| Контрагенты.РНН
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ЭтоГруппа = ЛОЖЬ";
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.Текст = ТекстЗапроса;
ПостроительЗапроса.ЗаполнитьНастройки();
ЭлементОтбора = ПостроительЗапроса.Отбор.Добавить("Наименование");
ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.Значение = Текст;
ПостроительЗапроса.Выполнить();
Выборка = ПостроительЗапроса.Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Значение.Добавить(Выборка.Ссылка,Выборка.Наименование+?(СокрЛП(Выборка.РНН)="",""," ("+Выборка.РНН+")"));
Если Значение.Количество() >= 50 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Значение.Количество() = 0 Тогда
Ответ = Вопрос("Контрагент с наименованием "+Текст+" не найден.
|Создать?",РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
Элемент = Справочники.Контрагенты.СоздатьЭлемент();
Элемент.Наименование = Текст;
Форма = Элемент.ПолучитьФорму("ФормаЭлемента");
Форма.ОткрытьМодально();
Если НЕ Элемент.ЭтоНовый() Тогда
Значение = Элемент.Ссылка;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры