8.2
УФ
Есть поле ввода с данными типа СправочникСсылка. Необходимо ограничить данные выбора по некоторым условиям. При этом должен работать как автоподбор, так и выбор из формы выбора, поэтому режим выбора из списка включать не могу.
Сразу оговорюсь - параметры выбора в поле ввода настроить не могу, т.к. в условии две точки. Например, Ссылка.СвойствоСсылки.СвойствоСвойства.
С формой выбора все просто - получаю программно форму в событии НачалоВыбора, накладываю отбор и показываю пользователю то, что нужно.
А вот с автоподбором проблема.
Даже если передать в обработчике АвтоПодбор в параметр ДанныеВыбора список значений с нужными мне данными, то если СтандартнаяОбработка = Истина тогда при начале набора текста в списке показываются и данные, которых нет в ДанныеВыбора. Если СтандартнаяОбработка = Ложь, тогда показываются данные которые нужны, но при наборе текста список не фильтруется. Я так понимаю в таком случае нужно писать свою фильтрацию списка?
Как вообще лучше обыграть эту ситуацию?
---
У меня работает так:

```1c
    &НаКлиенте
    Процедура ДобавитьВЗаказАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)

    ПараметрВыбора = Новый ПараметрВыбора("Отбор.Ссылка", ПолучитьМассивДокументов());
    мПараметры = Новый Массив;
    мПараметры.Добавить(ПараметрВыбора);
    фПараметры = Новый ФиксированныйМассив(мПараметры);
    Элемент.ПараметрыВыбора = фПараметры

    КонецПроцедуры
```
---
И да - когда работает стандартные АвтоПодбор - то ищет по началу тех реквизитов, которые у Справочнике указаны для ввода по строке. Если же делать СтандартнаяОбработка = Ложь, то в списке отображает только представление значения, что по идее логично.
---
Никто не решал подобный вопрос?
---
iRounder,
По-моему, эта возможность стандартно реализована в УТ 11.1:
1. В форме задаем обработчик события АвтоПодбор:

```1c
    СпискиВыбораКлиентСервер.АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка);
```

```1c
    Процедура АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) Экспорт

    СтандартнаяОбработка = Ложь;
    ДанныеВыбора = Новый СписокЗначений;

    КоличествоНайденных = 0;
    Для каждого ЭлементСписка Из Элемент.СписокВыбора Цикл
    Если ЛЕВ(ВРег(ЭлементСписка.Значение),СтрДлина(СокрЛП(Текст))) = ВРег(СокрЛП(Текст)) Тогда
    ДанныеВыбора.Добавить(ЭлементСписка.Значение);
    КоличествоНайденных = КоличествоНайденных + 1;
    Если КоличествоНайденных > 7 Тогда
    Прервать;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры
```

т.е, переопределив обработку события автоподбор
```1c
    СтандартнаяОбработка = Ложь
```
 на нужную тебе, можно формировать возвращаемый список выбора по любым условиям!
---
Нужен список выбора - не прокатит.
---
У меня работает так:

```1c
    &НаКлиенте
    Процедура ДобавитьВЗаказАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)

    ПараметрВыбора = Новый ПараметрВыбора("Отбор.Ссылка", ПолучитьМассивДокументов());
    мПараметры = Новый Массив;
    мПараметры.Добавить(ПараметрВыбора);
    фПараметры = Новый ФиксированныйМассив(мПараметры);
    Элемент.ПараметрыВыбора = фПараметры

    КонецПроцедуры
```
---
Не работает. Ошибка "Неправильное условие отбора"
---
Вечером попробую.
---
исключительно как идею, не решал эту проблему в тонком, но в толстом решал через запрос, и через еще одно поле формы тип СписокЗначений, может пригодится

СписокЗначений = Новый СписокЗначений;

 Запрос = Новый Запрос;
 Запрос.Текст =
 "ВЫБРАТЬ
 | Товар.Наименование
 |ИЗ
 | Справочник.Товар КАК Товар
 |ГДЕ
 | Товар.Наименование ПОДОБНО &Текст";

 Запрос.УстановитьПараметр("Текст", "%" + Текст + "%");
 Выборка = Запрос.Выполнить().Выбрать();
 СписокЗначений.Очистить();
 Пока Выборка.Следующий() Цикл
  СписокЗначений.Добавить(Выборка.Наименование);

 КонецЦикла;

ЭлементыФормы.ПолеСписка1.Значение = СписокЗначений;

В какой-то мере изврат, но работает.....
---
В итоге решил вопрос с помощью ОбработкаПолученияДанныхВыбора().
---
Каждый из ответов немного приблизил меня к решению задачи, но т.к. деньги можно отдать только одному - то отдал тому, кто в них больше нуждался (судя по отсутствию публикаций).
Просьба остальных не обижаться.