Здравствуйте!

Допустим, вам нужно добавить/изменить отбор в динамическом списке формы выбора или формы списка.
Если вас не заботит модальность, вы можете поступить так

```1c
    Форма = ПолучитьФорму(...);
    ЭлементОтбора = Форма.Список.Отбор.Элементы.Добавить(...)
    ...
    Выбор = Форма.ОткрытьМодально()
```

А если заботит?
Тогда единственный вариант - открывать форму через ОткрытьФорму(..., ПараметрыФормы,...)
Как через параметры можно изменить отбор динамического списка?
---
Как-то так:

```1c
    &НаКлиенте
    Процедура КомандаОткрытьФормуВыбора(Команда)
    НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

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

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

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

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

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

    ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыВыбора,
    ЭтаФорма, , , , ОбработкаВыбора);

    КонецПроцедуры
```
---
Примерно так:

```1c
    ОтборДляФормы = Новый Структура;
    ОтборДляФормы.Вставить("ИмяРеквизитаДляОтбора",ЗначениеОтбора);
    ПараметрыФормы = Новый Структура("Отбор",ОтборДляФормы);
    ОткрытьФорму(..., ПараметрыФормы,...)
```
---
Если бы интересовал отбор на равенство реквизита заданному значению, я бы вопрос не задавал.
Вопрос как раз в том, как добавить в отбор динамического списка элементы, позволяющие, например, проверить, что значение реквизита принадлежит заданному списку значений или что оно больше/меньше заданного значения.
---
Если бы интересовал отбор на равенство реквизита заданному значению, я бы вопрос не задавал.
Так задавайте вопрос так, чтобы он был понятен другим, без привлечения телепатов.
---
Александр, я задал вопрос в общем виде "вам нужно добавить/изменить отбор в динамическом списке формы выбора или формы списка". И даже пример привел, показывающий именно изменение отбора динамического списка.
 Вы ответили на очень частный случай и разобиделись, когда я указал, что ваше решение для частного случая.
---
А вы ожидаете, что вам для каждого случая будут примеры расписывать?
Еще раз. Формулируйте вопросы нормально, чтобы потом не воротить нос от ответов.
---
Ну вопрос вы реально непонятно задали. Вы определитесь, что вы спрашиваете. Открыть форму с отбором или менять отбор из другой формы или по кнопке в самой форме. Так же напишите, какие отборы вы хотите простой, например на равенство или более сложный. Тогда и ответ получите адекватный.

1. Если простой отбор при открытии то вам правильно написал Sashares в (2)
2. Если сложный отбор при открытии, то предаете параметры при открытии формы и обрабатываете в событии "ПриСозданииНаСервере"
3. Если нужно изменить отбор, то меняйте его как хотите. У динамических списков есть свойство Отбор.

Удобно использовать процедуру из БСП ОбщегоНазначенияКлиентСервер.УстановитьОтборДинамическогоСписка
---
ОК, сорри.
Мне из моей формы нужно открыть типовую (!) форму выбора с установленным мной отбором.
Например, я хочу открыть форму выбора номенклатуры с видом номенклатуры "телевизоры" так, чтобы показывались только телевизоры брендов Samsung и LG.

При использовании модальных форм я бы это написал так:

```1c
    Форма = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора");
    Отбор = Форма.Список.Отбор;

    СписокБрендов = Новый СписокЗначений;
    СписокБрендов.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("Samsung"));
    СписокБрендов.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("LG"));

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

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

    ВыбранныйТелевизор = Форма.ОткрытьМодально();
```

При исполнении этого кода откроется форма выбора справочника номенклатура, в которой будут присутствовать только телевизоры и только брендов Samsung и LG.
Пользователь выберет интересующий и исполнение продолжится.
Все просто и понятно.

Но теперь давайте откажемся от модальных вызовов.
Метода Открыть() формы управляемого приложения не позволяет указать ОписаниеОповещения при закрытии формы - нет у него такого параметра.
Таким образом, использовать последовательность Форма = ПолучитьФорму(..); ... Форма.Открыть() мы не можем, и, стало быть, не можем получить доступ к реквизиту формы Список, отборы которого мы хотим изменить.
Можем использовать универсальный метод ОткрытьФорму("ИмяФормы", ..... ПараметрыФормы, ... ОписаниеОповещенияОЗакрытии), но тогда мы наш отбор можем передать в открываемую форму только как параметр.
Вот я и пытаюсь понять, как мне это сделать..

На мой взгляд, задача достаточно типовая.
Теперь я достаточно подробно описал?
---
Теперь я достаточно подробно описал?
Так лучше, спасибо.

Стандартный отбор в параметре Отбор поддерживает отбор "на равно" и "в списке".
Таким образом, вам нужно привести все свои отборы к перечисленным способам отбора.
Например, если отбор в форме выбора справочника и надо поставить отбор на больше/меньше и другие отборы, то в исходной форме делаете запрос, получаете список ссылок, и делается отбор по Ссылке.
---
Вы сейчас опять рассердитесь, но что делать,если я захочу отобрать не LG и Samsung, а все, что стоит меньше 30000? :)
---
Получаете список нужных ссылок в исходной форме и передаете их в отбор.

```1c
    НужныеСсылки = <тут функция которая вернет вам нужные ссылки>
    СтруктураОтбор = Новый Структура("Ссылка", НужныеСсылки );
    ПараметрыОткрытия = Новый Структура("Отбор", СтруктураОтбор );
    ОткрытьФорму("ИмяФормы", ПараметрыОткрытия, ....., ОписаниеОповещиня);
```
---
Т.е. я один раз просмотрю справочник номенклатуры для получения списка ссылок в своей форме, а затем еще раз его просмотрю в форме выбора, чтобы выбрать из уже отобранных мной ссылок.
А для модальных вызовов достаточно одного просмотра!
И это мы с Вами смотрим на выборку из справочника.
А если в динамическом списке достаточно сложный запрос, шерстящий половину базы?
---
У всего есть плюсы и минусы.

Если в форме выбора надо ограничивать отбор по сумме или по каким-то другим не простым отборам, то стоит в форме выбора это реализовать.
Например, для отбора по сумме задать параметр в форме, задать параметр в динамическом списке и в ПриСозданииНаСервере его устанавливать.

Тогда будет достаточно только передать значение параметра.
---
Вы как-то никак не хотите меня услышать.
Вот смотрите. Есть форма выбора. Если вы ее вызываете модально, то вы можете поменять отборы в списке.
Если вы ее вызываете немодально, то у вас, на первый взгляд (я надеюсь, что все-таки можно найти решение), нет возможности поменять отборы.
Но ведь речь идет о ВЫЗОВАХ, сама-то форма не меняется. Все различие только в том, что перехватывается событие закрытия вызываемой формы и вызывается процедура, описанная в Оповещении. И все.
А получается, что смена типа вызова заставляет писать собственную форму выбора (неважно, копируем или расширяем мы существующую, или вообще свою форму создаем). Фигня какая-то!
---
Я вас услышал.
Да, вы правы, если открываем не модально, то нельзя в форме изменить отбор, если это не предусмотрено в форме выбора.
Я описал примеры выше, как можно обойтись существующими средствами.
---
В целом понятно. В управляемых формах, нельзя менять форму из вне и это я считаю правильно. Т.е. вам придется изменить доработать код типовой формы(Можно скопировать форму или добавить в расширение) и обрабатывать параметры в событии "ПриСозданииНаСервере",если хотите сложный отбор.

Кстати в параметрах открытия формы можно передавать список и он будет работать:

СписокБрендов = Новый СписокЗначений;
СписокБрендов.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("Samsung"));
СписокБрендов.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("LG"));

СтруктураОтбор = Новый Структура("Бренд", СписокБрендов);
ПараметрыОткрытия = Новый Структура("Отбор", СтруктураОтбор );
ОткрытьФорму("ИмяФормы", ПараметрыОткрытия, ....., ОписаниеОповещиня);
---
Можно скопировать форму или добавить в расширение
Это под каждое нестандартное обращение к форме выбора ее нужно модифицировать? Некузяво как-то!
Должно быть решение...
Ладно, спасибо, будем думать.
---
Вопрос ведь не в том, как с помощью отбора формы решить задачу, а в том, что для модальных вызовов есть простой и понятный способ изменения отборов динамического списка, а для немодальных нет!
---
Как-то так:

```1c
    &НаКлиенте
    Процедура КомандаОткрытьФормуВыбора(Команда)
    НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

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

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

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

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

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

    ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыВыбора,
    ЭтаФорма, , , , ОбработкаВыбора);

    КонецПроцедуры
```
---
Спасибо большое!
Я знал, что не может не быть решения.
---
В УТ 11.4 можно фиксированный массив передать

```1c
    &НаСервере
    Функция МассивНоменклатуры()
    Результат = Новый Массив;
    Результат.Добавить(Справочники.Номенклатура.НайтиПоНаименованию("Морковь"));
    Результат.Добавить(Справочники.Номенклатура.НайтиПоНаименованию("Свёкла"));
    возврат Результат
    КонецФункции

    &НаКлиенте
    Процедура Команда1(Команда)

    ЭлементыНоменклатуры = МассивНоменклатуры();
    ЭлементОтбора = Новый Структура("Ссылка", новый ФиксированныйМассив(ЭлементыНоменклатуры));
    ПараметрыОткрытия = Новый Структура("Отбор", ЭлементОтбора);
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", ПараметрыОткрытия, ЭтаФорма, ЭтаФорма.УникальныйИдентификатор);

    КонецПроцедуры
```
---
Огромное спасибо за этот топик!
Надо было, чтобы кассиры видели только свои Заказы на перемещение.
Весь день не мог понять, почему параметры не передавались в форму списка. Добавил ПараметрыВыбора1. И всё заработало.
В итоге рабочий код:

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

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

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

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

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

    ОткрытьФорму("Документ.ЗаказНаПеремещение.ФормаСписка",ПараметрыВыбора1, ЭтаФорма,,,,);
```