Индексирование есть. Тип справочник ссылка.
Поиск в форме справочника когда выбирается поле (там справа появляется треугольник) и вводится значение с клавиатуры
---
Спасибо, подправил)

```1c
    Процедура РеквизитОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    //Можно ограничить минимальное количество симовлов..
    // Если СтрДлина(СокрЛП(Текст)) < 5 Тогда Возврат; Конецесли;

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Текст ", Текст);
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 50
    | т.Ссылка,
    | т.Код,
    | т.Представление
    |ИЗ
    | Справочник.Справочник1 КАК т
    |ГДЕ
    | т.Реквизит1 ПОДОБНО &Текст + "%"
    | ИЛИ т.Реквизит2 ПОДОБНО &Текст + "%"";
    Значение = Новый СписокЗначений;
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Значение.Добавить(Выборка.Ссылка, Выборка.Представление + " (Код: " + Выборка.Код + ")");
    КонецЦикла;
    КонецПроцедуры
```
---
НайтиПоРеквизиту()
(1)
---
НайденныйЭлемент = Справочники.ИмяСправочника.НайтиПоРеквизиту("ИмяРеквизита", ЗначениеРеквизита) ;
---
Лучше запросом, т.к. может быть несколько элементов с таким реквизитом.
я обычно так делаю: http://prntscr.com/jij4b8
---
Для обычных форм можно как-то так:

```1c
    Процедура РеквизитОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Реквизит1", Текст);
    Запрос.УстановитьПараметр("Реквизит2", Текст);
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | т.Ссылка,
    | т.Код,
    | т.Представление
    |ИЗ
    | Справочник.Справочник1 КАК т
    |ГДЕ
    | т.Реквизит1 ПОДОБНО &Текст + "%"
    | ИЛИ т.Реквизит2 ПОДОБНО &Текст + "%"";
    Значение = Новый СписокЗначений;
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Значение.Добавить(Выборка.Ссылка, Выборка.Представление + " (Код: " + Выборка.Код + ")");
    КонецЦикла;
    КонецПроцедуры
```

Тогда при вводе текста будет подбираться подходящие элементы и предоставляться на выбор. Ограничение 50 шт.
---
Это самый лучший вариант.
Единственное, текст ограничить нужно по минимальному количеству символов. А то, одну букву введут, и будет запросом выгребаться 50000 элементов справочника номенклатуры.
Ну и в запросе выборку также ограничить, скажем до 10-15 вариантов. По тем же самым соображениям.
---
```1c
    Запрос.УстановитьПараметр("Текст", Текст);
```
---
Спасибо, подправил)

```1c
    Процедура РеквизитОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    //Можно ограничить минимальное количество симовлов..
    // Если СтрДлина(СокрЛП(Текст)) < 5 Тогда Возврат; Конецесли;

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Текст ", Текст);
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 50
    | т.Ссылка,
    | т.Код,
    | т.Представление
    |ИЗ
    | Справочник.Справочник1 КАК т
    |ГДЕ
    | т.Реквизит1 ПОДОБНО &Текст + "%"
    | ИЛИ т.Реквизит2 ПОДОБНО &Текст + "%"";
    Значение = Новый СписокЗначений;
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Значение.Добавить(Выборка.Ссылка, Выборка.Представление + " (Код: " + Выборка.Код + ")");
    КонецЦикла;
    КонецПроцедуры
```