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