Добрый день, 1с 8.3 КА 2.4
В динамическом списке, есть фильтры. Но каждый из них перекрывает другой, пытаюсь сделать, чтобы работали они одновременно и корректно.

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

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

Проблема в том что ГруппаОтбора должна быть определена только раз, но как это сделать?
Через ПользовательскиеНастройки тоже не получилось, там при каждом переключении статуса только и добавляются настройки, хотя по хорошему Статус = "1", должнен замениться на Статус = "2", а получаем отбор в виду Статус = "1", статус = "2" и в итого пустой результат. Очистить отбор мы не можем, т.к сотрется первый отбор по Заявителю.
---
Пробовали делать через

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка() ?

Собственно там есть много процедур, которые делают все тоже самое.

Не изобретайте велосипед
---
Пробовали делать через

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка() ?

Собственно там есть много процедур, которые делают все тоже самое.

Не изобретайте велосипед
---
```1c
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Статус", ОтборСтатус, ВидСравненияКомпоновкиДанных.Равно, , Истина);
```

(3) Отбор работает хорошо, но отменить отбор не получается. Пробую так:

```1c
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Статус", ОтборСтатус, ВидСравненияКомпоновкиДанных.Равно, , Ложь);
```

и

```1c
    ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Статус");
```

С помощью кода
```1c
    ЭтаФорма.Список.Отбор.Элементы.Очистить();
```
 очищаются все отборы =/
---
В итого получилось

```1c
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Статус", ОтборСтатус, ВидСравненияКомпоновкиДанных.Равно, , ЗначениеЗаполнено(ОтборСтатус));
```
---
А если функция отрабатывает. Галка с заголовком появляется, а тип сравнения и правое значение отсутствуют. как на форме списка, так и на форме настройки списка. Куда капать?
---
Без скриншотов непонятно. Похоже на то, что установили представление настройки
---
попробуйте перед установкой отборов, просто чистить старые отборы!
всего одна команда

Список.Отбор.Элементы.Очистить();
---
раньше так и работало, но мне нужны старые отборы, тк. их может быть 2-3 одновременно, по Заявителю, по Статусу и т.п.
---
тогда при добавлении "нового" отбора надо делать сначала поиск этого элемента отбора
если нашли то изменить/установить у него новое правое значение
если не нашли то добавить как обычно
---
вот с поиском как раз проблема, как его найти? и установить новое значение или очистить вовсе?
---
попробуйте такую процедуру, в каких-то отчетах я ее использовал, возможно для вашего случая (с группами) потредуется небольшая допилка

```1c
    Процедура УстановитьЗначениеОтбора(лкОтборы, ИмяПоля, ВидОперации = Неопределено, ЗначениеПоля = Неопределено, ИспользоватьОтбор = Неопределено)

    лкНайдено = Ложь;
    лкПоле = Новый ПолеКомпоновкиДанных(ИмяПоля);
    ЕстьЗначение = ЗначениеЗаполнено(ЗначениеПоля);
    лкВидОперации = ?(ВидОперации = Неопределено, ВидСравненияКомпоновкиДанных.Равно, ВидОперации);

    Для каждого лкСтр Из лкОтборы Цикл

    Если ТипЗнч(лкСтр) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
    //только для элементов

    Если лкСтр.ЛевоеЗначение = лкПоле Тогда

    лкНайдено = Истина;
    лкСтр.ПравоеЗначение = ЗначениеПоля;
    Если ИспользоватьОтбор = Неопределено Тогда
    //по значению
    лкСтр.Использование = ЕстьЗначение;
    Иначе
    лкСтр.Использование = ИспользоватьОтбор;
    КонецЕсли;
    Прервать;

    КонецЕсли;

    КонецЕсли;

    КонецЦикла;

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

    КонецПроцедуры
```
---
Страшное решение)))