14 мая 2013 г.

Способы программной установки отборов в управляемых формах

Поработав в режиме обычного приложения, привыкаешь, что для формы списка можно программно установить на доступные поля отбора любой вид сравнения. В режиме управляемого приложения работа с отбором динамического списка претерпела изменения.
Если мы после получения формы на стороне клиента программно установим необходимые параметры отбора, то они не применятся. При этом, если зайти в настройку списка открытой формы, то мы увидим, что параметры отбора установлены. Потребуется выполнить повторное чтение данных на сервере, чтобы настройки вступили в силу. 
Во избежание этого рекомендуется все необходимые параметры для фильтрации передавать при открытии/получении формы.

Классический вариант, установка фильтрации данных списка через параметр "Отбор". Передаем структуру, содержащую имена полей списка и значений отбора для них:
&НаКлиенте
Процедура ОткрытьВыбор(ПараметрыФормы)

 ФормаВыбораНоменклатуры = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы);
 ФормаВыбораНоменклатуры.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
 ФормаВыбораНоменклатуры.Открыть();

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

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


Использование параметра "Отбор" налагает определенные ограничения на использование. Например, если потребуется отобрать значения по подстроке в наименовании, необходимо предварительно сформировать запросом список значений и потом передать его в отбор. В этом случае можно воспользоваться параметром "ФиксированныеНастройки" динамического списка. Этот параметр имеет тип НастройкиКомпоновкиДанных и позволяет более гибко настроить фильтрацию.

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


И напоследок, все возможные параметры, передаваемые при открытии формы списка и других объектов можно посмотреть в синтаксис-помощнике в разделе "Управляемая форма", раздел "Параметры формы" необходимого объекта.


Комментариев нет:

Отправить комментарий