Предназначен для хранения условий отбора. Представляет собой коллекцию элементов отбора. Используется для установки фильтрации данных в различных выборках, наборах записей, визуальных списках. Каждый из элементов может устанавливать одно условие. Весь объект представляет собой составное условие, состоящее из отдельных условий, описываемых элементами, соединяющимися по "И".
Доступность
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Полное описание, параметры и ограничения
Предназначен для хранения условий отбора.
Представляет собой коллекцию элементов отбора. Используется для установки фильтрации данных в различных выборках, наборах записей, визуальных списках.
Каждый из элементов может устанавливать одно условие. Весь объект представляет собой составное условие, состоящее из отдельных условий, описываемых элементами, соединяющимися по "И".
Практические примеры
Установить отбор по учебному коду перед чтением набора
Показано чтение только одного собственного кода и проверка свойств элемента отбора. Отбор не заполнит автоматически измерение будущей новой записи.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую базу. В Конфигураторе корню задайте имя Учебная85; не добавляйте учебные регистры в рабочую УТ/КА2/УНФ/БП.
Регистры сведений → Добавить: УчебныеЦены. Режим записи Независимый, периодичность Непериодический. Измерение КодТовара: Строка, длина 50, индексировать. Ресурс Цена: Число, 12 цифр, 2 дробных, неотрицательное.
Проверку заполнения измерения установите Показывать ошибку. Модуль набора записей оставьте ПУСТЫМ; обработчики записи, обмена, фоновые задания и внешние сервисы для урока не создавайте.
Обновите конфигурацию базы данных. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки для вызова ВыполнитьПример() Экспорт.
Фрагмент вставьте в тело ВыполнитьПример. Каждую задачу запускайте отдельно. Вымышленные коды не являются справочными ссылками на рабочие товары.
Описание = Метаданные.РегистрыСведений.Найти("УчебныеЦены");
Если Описание = Неопределено Тогда
ВызватьИсключение "Сначала подготовьте собственный учебный регистр";
КонецЕсли;
Если Описание.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый
Или Описание.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
ВызватьИсключение "Настройки учебного регистра не соответствуют подготовке";
КонецЕсли;
Если Описание.Измерения.Количество() <> 1
Или Описание.Измерения.Найти("КодТовара") = Неопределено
Или Описание.Ресурсы.Найти("Цена") = Неопределено Тогда
ВызватьИсключение "Нужны одно измерение КодТовара и ресурс Цена";
КонецЕсли;
Набор = РегистрыСведений.УчебныеЦены.СоздатьНаборЗаписей();
Фильтр = Набор.Отбор.Найти("КодТовара");
Если Фильтр = Неопределено Тогда
ВызватьИсключение "Учебное измерение отсутствует в отборе";
КонецЕсли;
Фильтр.Установить("BOOK-A01", Истина);
Сообщить(Фильтр.Использование);
Сообщить(Фильтр.Значение = "BOOK-A01");
Сообщить(Фильтр.Имя = "КодТовара");
Сообщить(Фильтр.ТипЗначения.СодержитТип(Тип("Строка")));
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
Если Запись.КодТовара <> "BOOK-A01" Тогда
ВызватьИсключение "Прочитано значение вне установленного учебного отбора";
КонецЕсли;
КонецЦикла;
Сообщить("Прочитано собственных учебных строк: " + Строка(Набор.Количество()));
Фильтр.Использование = Ложь;
Сообщить(Не Фильтр.Использование);
// Повторное чтение с отключенным отбором не выполняем.
Сообщить("Запись не выполнялась.");Разбор по шагам
Отбор принадлежит набору и создан платформой по структуре регистра.
Находим измерение по Имя. Установить задаёт значение и признак использования одновременно.
Прочитать выполняем только с включённым фильтром BOOK-A01, не читаем все цены рабочего регистра.
В новой пустой базе результат обычно ноль строк. Если ранее вручную добавили свой BOOK-A01, выводится его фактическое количество.
Выключаем фильтр лишь после чтения и не запускаем новое чтение: уже загруженные данные не исчезают от переключения признака.
Как проверить результат
Пять булевых проверок Истина.
В пустой подготовленной базе прочитано 0, никаких строк не записано.
Всякая прочитанная строка должна иметь ровно BOOK-A01.
Ожидаемый результат
Новичок знает момент применения отбора и различает данные набора с настройкой будущего чтения.
На что обратить внимание
Отбор не является безопасной заменой проверки измерений перед записью: новые строки нужно заполнить и проверить отдельно.
Отключение отбора с последующим замещением может затронуть весь независимый регистр; здесь записи нет.
Это не универсальный Отбор компоновки данных: в наборе поддержка сравнений ограничена.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отобрать товары с количеством больше одного и вернуть настройки
Новый отбор исключает Ручку, оставляя Книгу и Коробку. Снимок настроек восстанавливает исходный числовой порог после пробного изменения.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Учебная внешняя обработка с пустой управляемой основной формой. Создайте команду УчебныйПример, кнопку команды и назначьте действие УчебныйПример.
Вставьте полный модуль урока: клиентский обработчик и серверную функцию. Каждый урок — отдельная копия модуля.
Откройте EPF в тонком клиенте Windows. Данные Книга/Ручка/Коробка создаются только в памяти; запрос урока с параметрами не читает таблицы базы.
ПостроительОтчета — существующий API для изучения/сопровождения старого кода. Это не СистемаКомпоновкиДанных и не рекомендация заменять ею современные отчёты.
&НаКлиенте
Процедура УчебныйПример(Команда)
ТабДок = СформироватьУчебныйОтчет();
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Учебный ПостроительОтчета");
КонецПроцедуры
&НаСервере
Функция СформироватьУчебныйОтчет()
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Образцы = Новый Массив;
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
Для Каждого Образец Из Образцы Цикл
СтрокаДанных = Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
КонецЦикла;
Описание = Новый ОписаниеИсточникаДанных(Данные);
Для Каждого Колонка Из Описание.Колонки Цикл
Колонка.Поле = Истина;
Колонка.Отбор = Истина;
Колонка.Порядок = Истина;
Колонка.Измерение = Колонка.Имя = "Категория";
КонецЦикла;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Описание;
Построитель.АвтоДетальныеЗаписи = Ложь;
Построитель.ВыводитьДетальныеЗаписи = Истина;
Построитель.ВыводитьЗаголовокОтчета = Истина;
Построитель.ВыводитьОбщиеИтоги = Ложь;
Построитель.ВыводитьПодвалОтчета = Ложь;
Построитель.ВыводитьПодвалТаблицы = Ложь;
Построитель.ВыводитьШапкуТаблицы = Истина;
Построитель.ОтображатьСостояние = Ложь;
Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
Построитель.ТекстЗаголовка = "Учебный отчёт — вымышленные данные";
Фильтр = Построитель.Отбор.Добавить("Количество", "УчебныйПорог", "Количество больше порога");
Если Фильтр = Неопределено Тогда
ВызватьИсключение "Учебное поле недоступно для отбора";
КонецЕсли;
Фильтр.ВидСравнения = ВидСравнения.Больше;
Фильтр.Установить(1, Истина);
Сообщить(Фильтр.Использование);
Сообщить(Фильтр.Значение = 1);
Сообщить(Фильтр.Имя = "УчебныйПорог");
Сообщить(Фильтр.ТипЗначения.СодержитТип(Тип("Число")));
Настройки = Построитель.ПолучитьНастройки();
Фильтр.Установить(99, Истина);
Построитель.УстановитьНастройки(Настройки);
Восстановленный = Построитель.Отбор.Найти("УчебныйПорог");
Если Восстановленный = Неопределено Тогда
ВызватьИсключение "Отбор не восстановлен из собственных настроек";
КонецЕсли;
Сообщить(Восстановленный.Значение = 1);
Сообщить(Восстановленный.Использование);
Сообщить("Отбор выводит только Книгу 3 и Коробку 2, не Ручку 1.");
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);
Возврат ТабДок;
КонецФункции
Разбор по шагам
Флаг Отбор у описания колонки включён до передачи источника построителю.
Добавить получает путь Количество, собственное имя УчебныйПорог и подпись. Метод может вернуть Неопределено — проверяем.
Больше с числовым значением 1 означает строго >1, не >=1. Использование включает фильтр.
ПолучитьНастройки сохраняет настройки отчёта, не товары и не документы базы.
После пробного порога 99 восстанавливаем настройки, заново находим элемент отбора и проверяем 1.
Старую ссылку Фильтр после восстановления больше не используем для изменения настроек.
Как проверить результат
Шесть проверок Истина.
В конечном отчёте Книга и Коробка, Ручки нет.
Исходная таблица остаётся с тремя строками: фильтр влияет на вывод.
Ожидаемый результат
Рабочий числовой отбор и восстановление его настроек показаны без удаления исходных данных.
На что обратить внимание
Это Отбор построителя, не ОтборНабораЗаписей и не ОтборКомпоновкиДанных.
ПолучитьНастройки — не резервная копия данных информационной базы.
Восстановление заменяет элементы настройки, поэтому ссылки на старые элементы нельзя считать актуальными.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.