Имя: Пароль:
1C
1С v8
Отбор списка
0 Deviljin08
 
25.07.16
15:33
Имеется Справочник "ДоговорыКонтрагентов". В нем создал форму "ФормаВыбораНовая" с динамическим списком. Есть два поля строковых с поиском по "контрагенту" и "наименованию" (договора). Нужно организовать по ним отбор "без нажатия клавиши Enter". Чтобы отбор происходил динамически.
Подскажите пожалуйста в чем тут проблема? Есть подозрение на "очистить".


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

&НаКлиенте
Процедура Наименование1ПриИзменении(Элемент)
    Если Не Наименование = "" Тогда
        УстановитьОтбор(Наименование, "Наименование", Наименование);
    Иначе
        ЭлементыОтбора = Список.Отбор.Элементы;
        ЭлементыОтбора.Очистить();

    КонецЕсли;
КонецПроцедуры

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


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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ВыборГруппировки = "БезГруппировки";
КонецПроцедуры


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

&НаКлиенте
Процедура Наименование1АвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Если НЕ Наименование = "" Тогда
        УстановитьОтбор(Наименование, "Наименование", Текст);
    Иначе
        ЭлементыОтбора = Список.Отбор.Элементы;
        ЭлементыОтбора.Очистить();
        
        //Наименование = Текст;
    КонецЕсли;
КонецПроцедуры
1 aleks_default
 
25.07.16
15:42
А ПриИзменении разве не по нажатию Enter отрабатывает?
2 Zhuravlik
 
25.07.16
15:45
(0) А полнотекстовый заюзать?
3 Zhuravlik
 
25.07.16
15:46
Платформа какая? Режим УФ?
4 Deviljin08
 
25.07.16
15:56
8.3, управляемая. Полнотекстовый - не вариант. Можно было бы - заюзал.
5 Zhuravlik
 
25.07.16
16:27
Можно попробовать через запрос самого дин. списка. Добавить в секцию ГДЕ что-то вроде:
Выбор когда &ОтборВключен_ПоНаименованиюКонтрагента Тогда Договоры.Владелец.Наименование ПОДОБНО &СтрокаПоиска
Когда &ОтборВключен_ПоНаименованиюДоговора Тогда
Договоры.Наименование ПОДОБНО &СтрокаПоиска КОНЕЦ

И устанавливать параметры соотв.
6 lubitelxml
 
25.07.16
16:30
Пробуй через компоновщикНастроек обратиться в отбору дс...
7 lubitelxml
 
25.07.16
16:35
типа ЭлементыОтбора = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы;
Дальше очищай
8 Defender aka LINN
 
25.07.16
16:37
Поставь платформу поновее, там уже все есть
9 Deviljin08
 
25.07.16
16:41
&НаКлиенте
Процедура ВыборГруппировкиПриИзменении(Элемент)
    ГруппировкаСписка   = Список.Группировка.Элементы;
    Если ВыборГруппировки = "Контрагент" Тогда
        
        ЭлементГруппировки   = ГруппировкаСписка.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
        ЭлементГруппировки.Поле  = Новый ПолеКомпоновкиДанных("Владелец");
    ИначеЕсли ВыборГруппировки = "БезГруппировки" Тогда
        ГруппировкаСписка.Очистить();
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура Наименование1ПриИзменении(Элемент)
    Если Не Наименование = "" Тогда
        УстановитьОтбор(Наименование, "Наименование", Наименование);
    Иначе
        ЭлементыОтбора = Список.Отбор.Элементы;
        ЭлементыОтбора.Очистить();

    КонецЕсли;
КонецПроцедуры

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


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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ВыборГруппировки = "БезГруппировки";
КонецПроцедуры


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

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

Я немного поправил, стало лучше, но поиск по "Контрагенту" ведется так: показывает список, соответствующий введенному в поле "Наименование договора" значению (сверху показывает), но не отбрасывает остальные списки. Тоесть подходящие результаты просто сверху выводит. По Наименованию вообще перестало работать. И при переходе текстового поля с контрагентов на договоры, а потом обратно, отбор очищается и выводятся все результаты. А так не нужно.
10 Deviljin08
 
25.07.16
18:30
&НаКлиенте
Процедура УстановитьОтбор(ОчищаемоеПоле, РеквизитОтбора, ЗначениеРеквизита)
    ЭлементыОтбора = Список.Отбор.Элементы;
    
    ОчищаемоеПоле = "";
    ЭлементыОтбора.Очистить();
    
    ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(РеквизитОтбора);
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
    ЭлементОтбора.ПравоеЗначение = ЗначениеРеквизита;
    ЭлементОтбора.Использование = Истина;
    
КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ВыборГруппировки = "БезГруппировки";
КонецПроцедуры


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

&НаКлиенте
Процедура Наименование1ПриИзменении(Элемент, Текст)
    Если НЕ Наименование = ""  Тогда
        УстановитьОтбор(Наименование, "Наименование", Наименование);
    Иначе
        ЭлементыОтбора = Список.Отбор.Элементы;
        ЭлементыОтбора.Очистить();
        
    КонецЕсли;
    
КонецПроцедуры

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



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

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



/////////////////////////////

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

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


Подскажите пожалуйста
11 Deviljin08
 
25.07.16
18:40
почему-то старый список очищается при переходе на другую строку. И поиск ведется только по одному из полей
12 Deviljin08
 
26.07.16
11:15
Сделано, можно закрывать тему.
&НаКлиенте
Процедура УстановитьОтбор(РеквизитОтбора, ЗначениеРеквизита)
    СоздаватьОтбор = Истина;    
    ЭлементыОтбора = Список.Отбор.Элементы;
    Для Каждого ТекСтр из ЭлементыОтбора Цикл
        Если ТекСтр.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(РеквизитОтбора) Тогда
            ЭлементОтбора = ТекСтр;
            СоздаватьОтбор = Ложь;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если СоздаватьОтбор
        Тогда ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(РеквизитОтбора);
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
    КонецЕсли;
    ЭлементОтбора.ПравоеЗначение = ЗначениеРеквизита;
    ЭлементОтбора.Использование = Истина;
    
  ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(РеквизитОтбора);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.ПравоеЗначение = ЗначениеРеквизита;

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ВыборГруппировки = "БезГруппировки";
КонецПроцедуры


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

&НаКлиенте
Процедура Наименование1ПриИзменении(Элемент, Текст)
    Наименование);
КонецПроцедуры

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
"ВладелецНаименование", Текст);

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



&НаКлиенте
Процедура Наименование1АвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    Если НЕ Текст = "" Тогда
        УстановитьОтбор("Наименование", Текст);

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

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