Имя: Пароль:
1C
1С v8
Фильтрация динамического списка
0 mns123
 
20.02.15
14:33
На форме есть текстовое поле. Хочу чтобы при вводе текста в поле список динамический список фильтровался по полю значению которого начинается с введенного текста. Текст наименование серии.

В событии ИзменениеТекстаРедактирования пытаюсь установить отбор

    Если НЕ Текст = "" Тогда
        Остатки.Отбор.Элементы.Очистить();
        НовыйОтбор = Остатки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйОтбор.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СерияНоменклатуры.Наименование");
        НовыйОтбор.ВидСравнения   = ВидСравненияКомпоновкиДанных.НачинаетсяС;
        НовыйОтбор.ПравоеЗначение = Текст;
        НовыйОтбор.Использование  = Истина;
    Иначе
        Остатки.Отбор.Элементы.Очистить();
    КонецЕсли;

Почему-то после обработки события текст из поля очищается. Что я делаю не так?
1 ejikbeznojek
 
20.02.15
14:49
Ну если другого кода нет. То логично предположить что текст очищается строчками где есть "" или очистить

Посмотри просто в отладке в какой момент текст становится равным "".
2 IamAlexy
 
20.02.15
14:50
в базе на основе бухни делают так:

&НаКлиенте
Процедура СтрокаПоискаПриИзменении(Элемент)
    Если СтрДлина(СтрокаПоиска)>0 Тогда
        ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"Информационнаястрока",СтрокаПоиска,ВидСравненияКомпоновкиДанных.Содержит,,Истина);
    Иначе
        ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список,"Информационнаястрока");
        
    КонецЕсли;

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



и соответственно




// Добавить или заменить существующий элемент отбора динамического списка.
//
// Параметры:
//  ДинамическийСписок      - ДинамическийСписок - реквизит формы, для которого требуется установить отбор.
//  ИмяПоля                 - Строка - имя поля компоновки данных (заполняется всегда).
//  ПравоеЗначение          - произвольный - сравниваемое значение.
//  ВидСравнения            - ВидСравненияКомпоновкиДанных - вид сравнения.
//  Представление           - Строка - представление элемента компоновки данных.
//  Использование           - Булево - использование элемента.
//  РежимОтображения        - РежимОтображенияЭлементаНастройкиКомпоновкиДанных - режим отображения.
//  ИдентификаторПользовательскойНастройки - Строка - см. ОтборКомпоновкиДанных.ИдентификаторПользовательскойНастройки
//                                                    в синтакс-помощнике.
//
Процедура УстановитьЭлементОтбораДинамическогоСписка(ДинамическийСписок, ИмяПоля,
    ПравоеЗначение = Неопределено,
    ВидСравнения = Неопределено,
    Представление = Неопределено,
    Использование = Неопределено,
    РежимОтображения = Неопределено,
    ИдентификаторПользовательскойНастройки = Неопределено) Экспорт
    
    Если РежимОтображения = Неопределено Тогда
        РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
    КонецЕсли;
    
    Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
    Иначе
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор;
    КонецЕсли;
    
    УстановитьЭлементОтбора(
        ОтборДинамическогоСписка,
        ИмяПоля,
        ПравоеЗначение,
        ВидСравнения,
        Представление,
        Использование,
        РежимОтображения,
        ИдентификаторПользовательскойНастройки);
    
КонецПроцедуры
3 IamAlexy
 
20.02.15
14:52
ну и далее - можно все в типовой бп3 подсмотреть
4 mns123
 
20.02.15
15:07
Вот весь текст, Поле с текстом очищается в момент срабатывания отбора
&НаКлиенте
Процедура ОтборСерийИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
    
    Если НЕ Текст = "" Тогда
        
        Остатки.Отбор.Элементы.Очистить();
        НовыйОтбор = Остатки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйОтбор.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("СерияНоменклатуры.Наименование");
        НовыйОтбор.ВидСравнения   = ВидСравненияКомпоновкиДанных.НачинаетсяС;
        НовыйОтбор.ПравоеЗначение = Текст;
        НовыйОтбор.Использование  = Истина;
    Иначе
        Остатки.Отбор.Элементы.Очистить();
    КонецЕсли;
    
КонецПроцедуры
5 kochurovg
 
20.02.15
15:14
Попробуй использовать событие ПриИзменении
6 mns123
 
20.02.15
15:15
2 А что в процедуре УстановитьЭлементОтбора()
7 borodin
 
27.02.15
04:55
В свойствах элемента формы, связанного с строкой поиска, есть свойство ОбновлениеТекстаРедактирования - установи значение в
"При изменении значения" и всё у тебя получиться.