Поделитесь в соцсетях

Как установить отбор в открываемой форме

Как программно установить отбор в открываемой форме?

Установка отбора в форме при открытии

 

Установка отбора в 8.1 обычное приложение

Для установки отбора используется свойство "Отбор" у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:

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

В данном случае мы применили вид сравнения "Равно", но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.

Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу "Группа Покупатели" в которой находится договор:


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

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

Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)

Фильтр по одному элементу

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

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

    ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора",ПараметрыВыбора, Элемент); // здесь передан Элемент, чтобы выбранное значение попало в поле

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

Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?

&НаКлиенте
Процедура СписокДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    МассивДоговоров = ПолучитьДоговорыНаСервере();
    СЗДоговоров = Новый СписокЗначений;
    СЗДоговоров.ЗагрузитьЗначения(МассивДоговоров);

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

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

Ещё один вариант открытия формы с отбором в списке для 8.3

Ниже текст процедуры открытия формы для команды объекта 

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

Комментарии   

+15 #1 3dHelg 11.04.2016 08:12
А если нужно открыть управляемую форму выбора со сложным отбором (отбор по 2-м и более реквизитам). Причем по первому реквизиту нужно сравнить по условию равенства, а по второму сравнить по наличию в списке?
Заранее спасибо за ответ.

Недостаточно прав для комментирования