Добрый день!

Есть форма списка (регистра сведений, но это неважно) (рис. 1) с полями ПодкаталогTS, ЛеваяГраница, ПраваяГраница.

Делаю кнопку, чтобы при нажатии на неё открывалась форма списка другого регистра сведений "ПорядокM3u8" с отборами, чтобы ПорядокM3u8.ПодкаталогTS=ПодкаталогTS И ЛеваяГраница<= ПорядокM3u8.НомерСтрокиM3u8<= ПраваяГраница. Был бы простой отбор на равенство - заморачиваться не пришлось бы, а тут:

В первой форме списка сделал команду "ПорядокM3u8", в её обработчике написал:

```1c
    &НаКлиенте
    Процедура ПорядокM3u8(Команда)

    ТекДанные=Элементы.Список.ТекущиеДанные;
    ЗначениеОтбора = Новый Структура("ПодкаталогTS, ЛеваяГраница, ПраваяГраница", ТекДанные.ПодкаталогTS, ТекДанные.ЛеваяГраница, ТекДанные.ПраваяГраница);
    ПараметрыВыбора = Новый Структура("МойОтбор", ЗначениеОтбора);

    ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка",ПараметрыВыбора);
    КонецПроцедуры
```

Во второй форме обработки события:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Перем ПодкаталогTS, ЛеваяГраница, ПраваяГраница;

    Если НЕ Параметры.Свойство("МойОтбор") Тогда
    Возврат;
    КонецЕсли;

    МойОтбор=Параметры.МойОтбор;

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

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

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

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

В результате форма открывается, но в ней ПУСТО. (Рис. 2) Самое интересное, что, если открыть форму как обычно и такой же отбор задать руками, то значения появляются. (Рис. 3)

Значения передаются, проверил под отладчиком. Устанавливал стандартные настройки - не помогает. Самое весёлое, что, когда закомментирую всё, кроме правой границы - устанавливается отбор по каталогу, хотя он как раз закомментирован, а отбор по правой границе не устанавливается. Меняю

```1c
    Список.Отбор.Элементы
```

на

```1c
    Список.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеНастройки.Элементы
```

или

```1c
    Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы
```

ругается

```1c
    Коллекция пользовательских настроек не может изменять свой состав, так как она связана с настройками компоновки данных
```

На

```1c
    Список.КомпоновщикНастроек.Настройки.Отбор.Элементы
```

не ругается, но ничего не фильтрует.

Как сделать правильно и, желательно, чтобы не пропадал пользовательский отбор наверху? (Желательно, чтобы подкаталог и интервал менялись там, а другие отборы, если будут, отключить)
---
так?

```1c
    &НаКлиенте
    Процедура ПорядокM3u8(Команда)

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("РежимВыбора",Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор",Истина);

    ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");

    Форма = ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка", ПараметрыОткрытия, Элемент,,,,);

    ///Если хотим несколько условий
    ГруппаОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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

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

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

    КонецПроцедуры
```
---
Все проще чем кажется...

```1c
    &НаКлиенте
    Процедура ПорядокM3u8(Команда)

    НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

    ///Если хотим несколько условий
    ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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

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

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

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
    ПараметрыФормы.Вставить("РежимВыбора",Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор",Истина);

    ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");

    ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка",ПараметрыФормы,
    ЭтаФорма, , , , ОбработкаВыбора);

    КонецПроцедуры
```
---
А с пользовательскими настройками можно так?
---
Скорее нет...
Тогда так (3):

```1c
    Форма = ОткрытьФорму("РегистрСведений.МойРегистр.ФормаСписка");
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Форма.Список.КомпоновщикНастроек.Настройки.Отбор, "ПодкаталогTS",
    ТекДанные.ПодкаталогTS, ВидСравненияКомпоновкиДанных.Равно, ,Истина,
    РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ, Новый УникальныйИдентификатор);
```
---
Это с БСП. А без него?
---
А без него - ответ в (3)ilnur75
---
Это тоже не работает.
---
вот еще пример:

```1c
    НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

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

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

    ПараметрыФормыВыбора = Новый Структура;
    ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина);
    ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
    ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОбработкаЗакрытияФормыВыбора",ЭтаФорма);
    Форма = ОткрытьФорму("ВнешняяОбработка.ТестОткрытиеСпискаПоОтбору.Форма.ФормаВыбора", ПараметрыФормыВыбора, ЭтаФорма,,,,ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    Форма.список.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновки);
```
---
https://infostart.ru/1c/articles/565658/
Вся соль в комментах как обычно...
---
Хотел сделать, как Слава Крон из коммента №20, правда, GUID меня смутил - поменяют и привет! Уж не знаю из-за GUID'а или нет, но не работает тоже, что даже немного и хорошо тем, что не надо платить $m человеку, который даже не участвует в обсуждении :)

Короткий вариант из коммента №7 требует УправлениеНебольшойФирмойКлиент, а я на него ТАК надеялся!
---
по другому надо делать.

напрмер

&НаКлиенте
Процедура ТоварыПродавецНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

 СтандартнаяОбработка = Ложь;
 ПараметрыОткрытия = Новый Структура("РежимВыбора,ЗакрыватьПриВыборе", Истина, Истина);

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

КонецПроцедуры
---
Не работает :(
---
для начала одно условие отбора надо выполнить. если получится тогда следующее.
---
так?

```1c
    &НаКлиенте
    Процедура ПорядокM3u8(Команда)

    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("РежимВыбора",Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор",Истина);

    ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");

    Форма = ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка", ПараметрыОткрытия, Элемент,,,,);

    ///Если хотим несколько условий
    ГруппаОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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

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

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

    КонецПроцедуры
```
---
Так работает
---
по коду с отбором да, только значения границ известны ?
---
По первому полю на равенство, по второму - на интервал.