Предназначен для хранения условий отбора. Представляет собой коллекцию элементов отбора. Используется для установки фильтрации данных в различных выборках, наборах записей, визуальных списках. Каждый из элементов может устанавливать одно условие. Весь объект представляет собой составное условие, состоящее из отдельных условий, описываемых элементами, соединяющимися по "И".
Полное описание, параметры и ограничения
Отбор (Filter)
Отбор (Filter)
Доступен, начиная с версии 8.0.
Элементы коллекции:
ЭлементОтбора
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы отбора.
Возможно обращение к элементу отбора посредством оператора [...]. В качестве аргумента передается индекс элемента (нумерация с 0).
Свойства:
<Имя элемента отбора> (<Filter element name>)
Методы:
Добавить (Add)
Индекс (IndexOf)
Количество (Count)
Найти (Find)
Получить (Get)
ПолучитьДоступныеПоля (GetAvailableFields)
Сбросить (Reset)
Сдвинуть (Move)
Удалить (Delete)
УстановитьДоступныеПоля (SetAvailableFields)
Описание:
Предназначен для хранения условий отбора.
Представляет собой коллекцию элементов отбора. Используется для установки фильтрации данных в различных выборках, наборах записей, визуальных списках.
Каждый из элементов может устанавливать одно условие. Весь объект представляет собой составное условие, состоящее из отдельных условий, описываемых элементами, соединяющимися по "И".
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Установить отбор по учебному коду перед чтением набора
Показано чтение только одного собственного кода и проверка свойств элемента отбора. Отбор не заполнит автоматически измерение будущей новой записи.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу. В Конфигураторе корню задайте имя Учебная85; не добавляйте учебные регистры в рабочую УТ/КА2/УНФ/БП.
Регистры сведений → Добавить: УчебныеЦены. Режим записи Независимый, периодичность Непериодический. Измерение КодТовара: Строка, длина 50, индексировать. Ресурс Цена: Число, 12 цифр, 2 дробных, неотрицательное.
Проверку заполнения измерения установите Показывать ошибку. Модуль набора записей оставьте ПУСТЫМ; обработчики записи, обмена, фоновые задания и внешние сервисы для урока не создавайте.
Обновите конфигурацию базы данных. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки для вызова ВыполнитьПример() Экспорт.
Фрагмент вставьте в тело ВыполнитьПример. Каждую задачу запускайте отдельно. Вымышленные коды не являются справочными ссылками на рабочие товары.
Описание = Метаданные.РегистрыСведений.Найти("УчебныеЦены");
Если Описание = Неопределено Тогда
ВызватьИсключение "Сначала подготовьте собственный учебный регистр";
КонецЕсли;
Если Описание.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый
Или Описание.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
ВызватьИсключение "Настройки учебного регистра не соответствуют подготовке";
КонецЕсли;
Если Описание.Измерения.Количество() <> 1
Или Описание.Измерения.Найти("КодТовара") = Неопределено
Или Описание.Ресурсы.Найти("Цена") = Неопределено Тогда
ВызватьИсключение "Нужны одно измерение КодТовара и ресурс Цена";
КонецЕсли;
Набор = РегистрыСведений.УчебныеЦены.СоздатьНаборЗаписей();
Фильтр = Набор.Отбор.Найти("КодТовара");
Если Фильтр = Неопределено Тогда
ВызватьИсключение "Учебное измерение отсутствует в отборе";
КонецЕсли;
Фильтр.Установить("BOOK-A01", Истина);
Сообщить(Фильтр.Использование);
Сообщить(Фильтр.Значение = "BOOK-A01");
Сообщить(Фильтр.Имя = "КодТовара");
Сообщить(Фильтр.ТипЗначения.СодержитТип(Тип("Строка")));
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
Если Запись.КодТовара <> "BOOK-A01" Тогда
ВызватьИсключение "Прочитано значение вне установленного учебного отбора";
КонецЕсли;
КонецЦикла;
Сообщить("Прочитано собственных учебных строк: " + Строка(Набор.Количество()));
Фильтр.Использование = Ложь;
Сообщить(Не Фильтр.Использование);
// Повторное чтение с отключенным отбором не выполняем.
Сообщить("Запись не выполнялась.");Разбор по шагам
Отбор принадлежит набору и создан платформой по структуре регистра.
Находим измерение по Имя. Установить задаёт значение и признак использования одновременно.
Прочитать выполняем только с включённым фильтром BOOK-A01, не читаем все цены рабочего регистра.
В новой пустой базе результат обычно ноль строк. Если ранее вручную добавили свой BOOK-A01, выводится его фактическое количество.
Выключаем фильтр лишь после чтения и не запускаем новое чтение: уже загруженные данные не исчезают от переключения признака.
Как проверить результат
Пять булевых проверок Истина.
В пустой подготовленной базе прочитано 0, никаких строк не записано.
Всякая прочитанная строка должна иметь ровно BOOK-A01.
Ожидаемый результат
Новичок знает момент применения отбора и различает данные набора с настройкой будущего чтения.
На что обратить внимание
Отбор не является безопасной заменой проверки измерений перед записью: новые строки нужно заполнить и проверить отдельно.
Отключение отбора с последующим замещением может затронуть весь независимый регистр; здесь записи нет.
Это не универсальный Отбор компоновки данных: в наборе поддержка сравнений ограничена.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Управлять редактированием: Отбор
В своей обычной форме получаем НастройкаОтбора из настоящего типизированного табличного поля. Меняем разрешения, не удаляя сами данные.
Где и как запускать
Полный модуль новой обычной формы учебной внешней обработки, толстый клиент 8.5.1.1343.
Подготовка
Отдельная собственная конфигурация УчебнаяКонфигурацияСинтаксиса, платформа 8.5.1.1343, толстый клиент с обычными формами. Не управляемая форма и не мобильный клиент.
Создайте отдельную учебную внешнюю обработку и её обычную основную форму. В реквизитах формы добавьте УчебныеДанные с типом Отбор; это реквизит формы, не реквизит документа.
В редакторе формы добавьте ТабличноеПоле с именем ТаблицаНастроек. Свойство Данные свяжите с УчебныеДанные. Расширение определяется типом этих данных, а не ручным созданием класса расширения.
Добавьте обычную кнопку УчебнаяКоманда, назначьте действие УчебнаяКоманда. Событие формы ПриОткрытии свяжите с процедурой ПриОткрытии. Вставьте полный модуль на уровне формы.
Откройте форму и до нажатия кнопки проверьте доступность СвойПорог и СвояКатегория. Нажатие учебной кнопки показывает операции коллекции разрешений и затем очищает только эти разрешения.
Правила доступности интерфейса не являются правами на данные, RLS или запретом программного изменения. Код не записывает базу, не читает рабочие каталоги и не меняет чужие формы.
Это поле связано с Отбор собственного построителя, не с СправочникСписок или ДокументСписок. Для настройки отбора динамического списка Добавить недоступен; данный урок туда не переносить.
Перем ИсходноеКоличество;
Перем Построитель;
Процедура ПриОткрытии()
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Образцы = Новый Массив;
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
Для Каждого Образец Из Образцы Цикл
СтрокаДанных = Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
КонецЦикла;
Описание = Новый ОписаниеИсточникаДанных(Данные);
Для Каждого Колонка Из Описание.Колонки Цикл
Колонка.Поле = Истина;
Колонка.Отбор = Истина;
Колонка.Порядок = Истина;
Колонка.Измерение = Колонка.Имя = "Категория";
КонецЦикла;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Описание;
Построитель.ЗаполнитьНастройки();
Построитель.ИзмеренияСтроки.Очистить();
Построитель.ИзмеренияКолонки.Очистить();
Построитель.ВыбранныеПоля.Очистить();
Построитель.ВыбранныеПоля.Добавить("Наименование", "Товар");
Построитель.ВыбранныеПоля.Добавить("Количество", "Количество");
Построитель.ВыбранныеПоля.Добавить("Сумма", "Сумма");
УчебныеДанные = Построитель.Отбор;
Порог = УчебныеДанные.Добавить("Количество", "СвойПорог", "Количество от двух");
Категория = УчебныеДанные.Добавить("Категория", "СвояКатегория", "Только канцелярия");
Если Порог = Неопределено Или Категория = Неопределено Тогда
ВызватьИсключение "Не созданы собственные условия отбора";
КонецЕсли;
Порог.ВидСравнения = ВидСравнения.БольшеИлиРавно;
Порог.Установить(2, Истина);
Категория.Установить("Канцелярия", Истина);
ИсходноеКоличество = 0;
Для Каждого СобственныйЭлемент Из УчебныеДанные Цикл
ИсходноеКоличество = ИсходноеКоличество + 1;
КонецЦикла;
Поле = ЭтаФорма.ЭлементыФормы.ТаблицаНастроек;
Управление = Поле.НастройкаОтбора;
Управление.Очистить();
Управление.Добавить("СвойПорог", Ложь);
Управление.Добавить("СвояКатегория", Истина);
Сообщить("До кнопки: СвойПорог недоступно для интерактивного изменения, СвояКатегория доступно");
КонецПроцедуры
Процедура УчебнаяКоманда(Кнопка)
Поле = ЭтаФорма.ЭлементыФормы.ТаблицаНастроек;
Управление = Поле.НастройкаОтбора;
Первое = Управление.Найти("СвойПорог");
Второе = Управление.Найти("СвояКатегория");
Если Первое = Неопределено Или Второе = Неопределено Тогда
ВызватьИсключение "Откройте свою форму заново: собственные разрешения уже очищены";
КонецЕсли;
Сообщить(Управление.Количество() = 2);
Сообщить(Первое.Имя = "СвойПорог");
Сообщить(НЕ Первое.Доступность);
Сообщить(Второе.Доступность);
Сообщить(Управление.Индекс(Второе) = 1);
Сообщить(Управление.Получить(0) = Первое);
Сообщить(Управление.Найти("НетТакойУчебнойНастройки") = Неопределено);
Первое.Доступность = Истина;
Сообщить(Первое.Доступность);
Управление.Удалить(Второе);
Сообщить(Управление.Количество() = 1);
Управление.Очистить();
Сообщить(Управление.Количество() = 0);
ТекущееКоличество = 0;
Для Каждого СобственныйЭлемент Из УчебныеДанные Цикл
ТекущееКоличество = ТекущееКоличество + 1;
КонецЦикла;
Сообщить(ТекущееКоличество = ИсходноеКоличество);
Сообщить("Очистили только коллекцию разрешений, собственные исходные настройки сохранились");
Построитель.Выполнить();
Результат = Построитель.Результат.Выгрузить();
Сообщить(Результат.Количество() = 1);
Сообщить(Результат[0].Наименование = "Книга");
Сообщить(Результат.Итог("Сумма") = 750);
КонецПроцедурыРазбор по шагам
Создать собственные данные нужного типа и связать их с обычным табличным полем через свойство Данные в редакторе формы.
Получить настоящий объект управления из расширения поля: у этого класса нет конструктора. Добавить своё запрещённое и разрешённое имя.
После ручной проверки интерфейса нажать кнопку. Найти свои элементы по именам, проверить позиции и включить доступность первого.
Удалить второй элемент разрешения, затем очистить только коллекцию разрешений. Сверить количество исходных настроек, а не принимать Очистить за удаление данных.
Повторный запуск требует заново открыть только свою форму: кнопка уже очистила созданные правила доступности.
Как проверить результат
Одиннадцать проверок коллекции разрешений и сохранения исходных настроек дают Истина.
До кнопки проверьте недоступность первого и доступность второго собственного элемента в реальном обычном поле. После кнопки ограничения очищены; исходные данные не удалены.
Ещё три проверки настоящего результата дают Истина: после очистки разрешений условия отбора остаются, результат содержит только Книгу на 750.
Ожидаемый результат
Полный подключённый к обычному редактору пример доступности с собственной типизированной формой и сохранением исходных настроек.
На что обратить внимание
Класс управления и класс исходных данных разные. У элемента управления Имя только читается, Доступность изменяется.
Свойство расширения поля только читается как ссылка на коллекцию. Не присваивайте Поле.НастройкаОтбора = Новый ... и не создавайте несуществующий конструктор.
Очистить разрешения не отключает существующий отбор и не удаляет исходные правила, области или параметры.
Статические проверки пособия подтверждают имена API и структуру кода, но не поведение конкретного редактора обычной формы: его проверяет пользователь в своей учебной базе.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.