Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Динамические списки
Дальше: Сортировка

Отбор

Примечание

Пример можно посмотреть в демонстрационной базе «Оформление списков», форма списка документа Накладная, команда Отбор. Это локальная команда этой формы.

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

Обработчик этой команды выглядит следующим образом (листинг 3.75).

Листинг 3.75. Установка отбора динамического списка

&НаКлиенте

Процедура Отбор(Команда)

 

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

 

Если Отбор.Количество() > 0 Тогда

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Отбор уже задан. Команда не выполнена.";

Сообщение.Сообщить();

 

Возврат;

 

КонецЕсли;

 

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

УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаКонтроле");

УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

УсловиеОтбора.ПравоеЗначение = Истина;

 

Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки);

 

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

Список – это реквизит формы, содержащий динамический список. Его свойство Отбор может содержать произвольное количество элементов, описывающих условия отбора в этом списке. Эти условия могут быть заданы разработчиком в конфигураторе либо пользователем в режиме 1С:Предприятие или программно из встроенного языка.

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

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

В реальной жизни возможны различные алгоритмы, но, поскольку у нас всего лишь демонстрационный пример, мы поступим просто. Если для динамического списка уже заданы какие-то условия отбора, мы не будем предпринимать никаких действий и предложим пользователю самостоятельно удалить имеющиеся условия отбора (листинг 3.76).

Листинг 3.76. Анализ имеющихся условий отбора

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

 

Если Отбор.Количество() > 0 Тогда

 

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Отбор уже задан. Команда не выполнена.";

Сообщение.Сообщить();

 

Возврат;

 

КонецЕсли;

Если же никаких условий отбора еще не задано, мы зададим одно условие. Для этого в коллекцию элементов отбора добавим новый элемент (листинг 3.77).

Листинг 3.77. Добавление нового условия отбора

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

В простом случае отбора может быть перечислено несколько элементов, которые объединяются по условию И. В более сложных случаях отборов несколько элементов могут объединяться в группы, и для каждой группы можно задать собственное условие объединения элементов: И, ИЛИ, НЕ.

Таким образом, в коллекции условий отбора могут находиться как элементы, так и группы. В нашем простом примере мы добавляем один элемент, но если вы захотите формировать сложные условия, то нужно будет добавлять группы (Тип("ГруппаЭлементовОтбораКомпоновкиДанных")), устанавливать их свойство ТипГруппы и уже в эти группы добавлять отдельные элементы.

Итак, после того как элемент добавлен, нужно задать условие отбора.

У нашей накладной есть булев реквизит НаКонтроле, который проставляется для накладных, требующих «особого внимания» (рис. 3.101).

Рис. 3.101. Реквизит «НаКонтроле»

Мы хотим, чтобы в результате наших действий в списке отображались только те накладные, которые на контроле.

Условие отбора задается с помощью свойств ЛевоеЗначение, ВидСравнения и ПравоеЗначение.

В нашем случае левое значение – это поле НаКонтроле (листинг 3.78).

Листинг 3.78. Установка левого значения

УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаКонтроле");

Это поле мы создаем конструктором Новый, указывая имя поля.

Условие сравнения – равенство. Оно задается с помощью системного перечисления (листинг 3.79).

Листинг 3.79. Установка вида сравнения

УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

Правое значение – Истина (листинг 3.80).

Листинг 3.80. Установка правого значения

УсловиеОтбора.ПравоеЗначение = Истина;

Таким образом должны быть отобраны только те накладные, у которых поле НаКонтроле содержит значение Истина.

И в заключение мы должны загрузить измененные настройки обратно в компоновщик настроек динамического списка (листинг 3.81).

Листинг 3.81. Загрузка настроек в компоновщик настроек

Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки);

Запустим конфигурацию в режиме 1С:Предприятие. Откроется полный список накладных (рис. 3.102).

Рис. 3.102. Полный список накладных

После того как мы выполним команду Отбор, в списке останутся только накладные на контроле (рис. 3.103).

Рис. 3.103. Накладные на контроле

Если мы откроем настройку списка (Еще – Настроить список…), то увидим, что появилось условие отбора (рис. 3.104).

Рис. 3.104. Отбор в настройках динамического списка

Это то самое условие, которое мы добавили из встроенного языка. Пользователь может его изменить, отключить, удалить. Кроме того, у элемента отбора (и у других настроек) существует свойство РежимОтображения, с помощью которого он может сделать настройку невидимой и недоступной для изменения в пользовательском режиме (листинг 3.82).

Листинг 3.82. Загрузка настроек в компоновщик настроек

УсловиеОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;

Назад: Динамические списки
Дальше: Сортировка