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