Поскольку поиск в динамических списках в типовой УТ сводится в конечном счете к отбору, что не всегда привычно для пользователей, работавших ранее без динамических списков, привожу пример простого позиционирования в списке.
Пример на работе формы подбора в документ закупки в конфигурации УТ 11.2 (11.2.3.163). По сравнению с типовой обработкой внесены следующие изменения:
модуль формы:
в конце модуля #Область ПоискПоНаименованию;
добавлены команды: ПоискПоНаименованиюВыполнить, ПоискПоНаименованиюФокус
добавлен реквизит ПоискПоНаименованию, Строка
добавлены кнопки в группу ФормаГорячиеКлавиши: ПоискПоНаименованию2 (команда ПоискПоНаименованиюФокус), ПоискПоНаименованиюВыполнить (команда ПоискПоНаименованиюВыполнить)
добавлены поля ввода: ПоискПоНаименованию1 (при ) в группе СтандартныйПоискНоменклатура, ПоискПоНаименованию в группе РасширенныйПоискНоменклатура. Данные для обоих полей ПоискПоНаименование, для обоих полей при изменении вызывается ПоискПоНаименованиюПриИзменении
Привожу код области #Область ПоискПоНаименованию
#Область ПоискПоНаименованию
процедура СпозиционироватьсяВСправочнике(Результат, ДополнительныеПараметры) экспорт
Текст=сокрП(ПоискПоНаименованию);
Если Не ПодборТоваровКлиентСервер.ЭтоФормаПодбораТоваровПоКатегориям(ЭтаФорма) Тогда
ИдСписка=ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма);
Иначе
ИдСписка="СписокРасширенныйПоискНоменклатура";
КонецЕсли;
_Список=Элементы[ИдСписка];
Настройки=_Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
Схема=_Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки=КомпоновщикМакета.Выполнить(Схема,Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
МакетКомпоновки.НаборыДанных.НаборДанныхДинамическогоСписка.Запрос=
МакетКомпоновки.НаборыДанных.НаборДанныхДинамическогоСписка.Запрос+
"
//|и СправочникНоменклатура.НаименованиеПолное подобно """+Текст+"%""
|и СправочникНоменклатура.Наименование подобно """+Текст+"%""
|";
// добавляем ссылку в макет
ЯчейкиМакета1=МакетКомпоновки.Макеты.Макет1.Макет.Ячейки;
ЯчейкиМакета1.Очистить();
ЯчейкаСсылки=ЯчейкиМакета1.добавить();
ЯчейкаСсылки.Имя="Ссылка";
ЯчейкаСсылки.Заголовок="Ссылка";
ЯчейкаСсылки.ТипЗначения=новый описаниетипов("СправочникСсылка.Номенклатура");
ЯчейкиМакета2=МакетКомпоновки.Макеты.Макет2.Макет.Ячейки;
ЯчейкиМакета2.Очистить();
ЯчейкаСсылки=ЯчейкиМакета2.добавить();
ЯчейкаСсылки.Значение=новый ПараметрКомпоновкиДанных("ПараметрСсылка");
ЯчейкаСсылки.Колонка="Ссылка";
ПараметрыМакета2=МакетКомпоновки.Макеты.Макет2.Параметры;
ПараметрыМакета2.Очистить();
НовПараметр=ПараметрыМакета2.Добавить(тип("ПараметрОбластиВыражениеКомпоновкиДанных"));
НовПараметр.Выражение="НаборДанныхДинамическогоСписка.Ссылка";
НовПараметр.Имя="ПараметрСсылка";
ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода=новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
мНоменклатура=ПроцессорВывода.Вывести(ПроцессорКомпоновки).ВыгрузитьКолонку("Ссылка");
если мНоменклатура.Количество()>0 тогда
текПозиция=_Список.ТекущаяСтрока;
текинд=мНоменклатура.найти(текПозиция);
индНужнойПозиции=0;
если текинд=неопределено тогда
иначеесли текинд<мНоменклатура.Количество()-1 тогда
индНужнойПозиции=текинд+1;
КонецЕсли;
_Список.ТекущаяСтрока=мНоменклатура[индНужнойПозиции].ссылка;
ТекущийЭлемент = ЭтаФорма.Элементы[ИдСписка];
иначе
ТекущийЭлемент=ЭтаФорма.Элементы["ПоискПоНаименованию"+?(ИдСписка="СписокРасширенныйПоискНоменклатура","","1")];
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоНаименованиюПриИзменении(Элемент)
если сокрл(ПоискПоНаименованию)="" тогда возврат КонецЕсли;
Оповещение=Новый ОписаниеОповещения("СпозиционироватьсяВСправочнике", ЭтотОбъект);
ВыполнитьОбработкуОповещения(Оповещение);
//СпозиционироватьсяВСправочнике(ПоискПоНаименованию);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоНаименованиюФокус(Команда)
Если Не ПодборТоваровКлиентСервер.ЭтоФормаПодбораТоваровПоКатегориям(ЭтаФорма) Тогда
ИдСписка=ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма);
Иначе
ИдСписка="СписокРасширенныйПоискНоменклатура";
КонецЕсли;
ТекущийЭлемент=ЭтаФорма.Элементы["ПоискПоНаименованию"+?(ИдСписка="СписокРасширенныйПоискНоменклатура","","1")];
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоНаименованиюВыполнить(Команда)
ПоискПоНаименованиюПриИзменении("");
КонецПроцедуры
#КонецОбласти