Имя: Пароль:
1C
1С v8
Поиск на "лету"
0 Nevskiy83
 
22.02.16
21:54
Скажите, пожалуйста, хочу сделать поиск из введенных ранее значений

Процедура НаименованиеАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    СписокЗначений = Новый СписокЗначений;
    Для каждого СтрокаТаб из ТаблицаЗначений цикл
        ОтборСтр = Новый Структура;
        ОтборСтр.Вставить("Строка", СтрокаТаб.Строка);
        
        Строки = ТаблицаЗначений.НайтиСтроки(ОтборСтр);
        
        Если Строки.Количество() > 1 Тогда
            Сч = 0;
            Пока Сч<Строки.Количество()-1 Цикл
                ТаблицаЗначений.Удалить(Строки[Сч]);    
                Сч = Сч+1;
            КонецЦикла;
        КонецЕсли;        
    КонецЦикла;    
    
    Если НЕ СокрЛП(Текст) = "*" Тогда
        ДополнинительноеУсловие =     "ГДЕ
                                        |    ВТ.Строка ПОДОБНО &СтрокаПоиска";
    Иначе
        ДополнинительноеУсловие = "";
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Строка
                   |ПОМЕСТИТЬ ВТ
                   |ИЗ
                   |    &ТЗ КАК ТЗ
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ВТ.Строка
                   |ИЗ
                   |    ВТ КАК ВТ
                   |" + ДополнинительноеУсловие;    
                  
        
    Запрос.УстановитьПараметр("ТЗ", ТаблицаЗначений);
    Если НЕ ДополнинительноеУсловие = "*" Тогда
        Запрос.УстановитьПараметр("СтрокаПоиска", Текст+"%");
    КонецЕсли;
    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
        
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        СписокЗначений.Добавить(ВыборкаДетальныеЗаписи.Строка);
    КонецЦикла;
    
    Если СписокЗначений.Количество()>0 Тогда
        ЭлементСЗ=ВыбратьИзСписка(СписокЗначений,Элемент);
    КонецЕсли;
    Если ЭлементСЗ<>Неопределено И СписокЗначений.Количество()>0 Тогда
        Элемент.Значение = ЭлементСЗ.Значение;
    КонецЕсли;
    
КонецПроцедуры

Поиск работает, но при выводе списка происходит позиционирование на первую строку и продолжить ввод в строке не возможно. Можно ли это как-нибудь обойти?

Спасибо.

P.S Формы не управляемые
1 Garykom
 
гуру
22.02.16
21:58
без картинки не совсем понятно что хочется
2 Nevskiy83
 
22.02.16
22:05
[URL=http://s013.radikal.ru/i323/1602/d6/6ec8e53764c1.jpg][IMG]http://s013.radikal.ru/i323/1602/d6/6ec8e53764c1t.jpg[/IMG][/URL]

Если я в поле Имя ввожу "1" и останавливаюсь, то появляется список найденного и дальше вводить не возможно, т.к фокус находится на первой строке списка.
3 Nevskiy83
 
22.02.16
22:05
4 Garykom
 
гуру
22.02.16
22:07
понятно делай задержку по таймеру который взводится заново нажатиями кнопок

как только не нажимаем кнопки 1 секунду (самим подобрать удобное) то только запускаем поиск
т.е. набрали слово, пауза 1 секунда - комп ищет
пока набираем ничего не ищет
5 Garykom
 
гуру
22.02.16
22:09
(4)+ еще можно играться с фокусом ввода http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=562834&threadtype=0
6 0xFFFFFF
 
22.02.16
22:10
(0) а потом говорят, ваша 1с тормозит...
7 0xFFFFFF
 
22.02.16
22:11
Искать на Подобно после ввода символа... мде
8 Nevskiy83
 
22.02.16
22:11
(6) Ну, вот, хотят люди, а ля "живой" поиск :)
(4) Спасибо! попробую
9 0xFFFFFF
 
22.02.16
22:12
Для приличия хоть бы в тз разово спихнул
10 0xFFFFFF
 
22.02.16
22:13
(8) а потом будут говорить про мертвую 1с :)
11 Garykom
 
гуру
22.02.16
22:24
(6) угу когда на яве подобное ваял, то сделал прерывание подбора в случае когда он запустился и тут снова кнопку нажали
и про ограничения подбора не забыл limit|top чтобы не искал слишком долго
12 youalex
 
22.02.16
22:45
(0) Сделать форму, эмулирующую "ВыбратьИзСписка" ?