Поиск по наименованию в динамическом списке

Публикация № 586119

Программирование - Практика программирования

3
Пример позиционирования в динамическом списке по набранной строке

Поскольку поиск в динамических списках в  типовой УТ сводится в конечном счете к отбору, что не всегда привычно для пользователей, работавших ранее без динамических списков, привожу пример простого позиционирования в списке.

Пример на работе формы подбора в документ закупки в конфигурации УТ 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")];
	
КонецПроцедуры

&НаКлиенте
Процедура ПоискПоНаименованиюВыполнить(Команда)
	ПоискПоНаименованиюПриИзменении("");
КонецПроцедуры


#КонецОбласти

3

Скачать файлы

Наименование Файл Версия Размер
ПодборТоваровВДокументЗакупки.epf
.epf 66,90Kb
08.02.17
6
.epf 66,90Kb 6 Скачать

См. также

Специальные предложения

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение