0
DTX 4th
08.02.17
✎
16:51
|
В общем, есть список контрагентов. Хочу, чтобы при вводе строке в поле ввода, в списке оставались только те строки, где хотя бы в одной и колонок есть введённая строка.
Думал сделать две таблицы, одну со всеми строками, а вторую для отображения на форме с отбором, а в автоподборе текста каждый раз формировать.
Пробую:
&НаКлиенте
Процедура УстановитьОтбор(Текст = "")
Искать = ВРег(Текст);
Контрагенты.Очистить();
Если ПустаяСтрока(Текст) Тогда
Строки = КонтрагентыВсе;
Иначе
Строки = Новый Массив;
Для каждого Стр Из КонтрагентыВсе Цикл
Если Найти(ВРег(Стр.Код), Искать) > 0
ИЛИ Найти(ВРег(Стр.Наименование), Искать) > 0
ИЛИ Найти(ВРег(Стр.Код), Искать) > 0 Тогда
Строки.Добавить(Стр);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для каждого Стр Из Строки Цикл
ЗаполнитьЗначенияСвойств(Контрагенты.Добавить(), Стр);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПоискИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
//СтандартнаяОбработка = Ложь;
УстановитьОтбор(Текст);
КонецПроцедуры
В итоге отбор работает, но очень криво. Как только срабатывает ИзменениеТекстаРедактирования, введенное значение стирается. ЧЯДНТ?
Если в УстановитьОтбор() оставить только строку "Контрагенты.Очистить();", то значение всё равно будет стираться. А вот если не трогать таблицы формы, то всё ок.
Вот то, что получилось:
|
|