Добавляет элемент отбора по переданному описанию поля отбора в виде "пути". Например, если среди доступных полей есть поле "Контрагент", то возможно добавление элемента отбора "Контрагент", "Контрагент.ТипКонтрагента", "Контрагент.ТипКонтрагента.Наименование" и т.д. Внимание! Метод не доступен для отбора динамических списков (свойство Отбор объектов СправочникСписок.<Имя справочника>, ДокументСписок.<Имя документа> и т.д.).
Синтаксис
Добавить(<Описание>, <Имя>, <Представление>)Примеры платформы
Отбор = ОтчетОстатки.ПостроительОтчета.Отбор;
Если Отбор.Найти("Номенклатура") = Неопределено Тогда
Отбор.Добавить("Номенклатура");
КонецЕсли;
Отбор["Номенклатура"].Использование = Истина;
Отбор["Номенклатура"].Значение = Номенклатура;
Отбор["Номенклатура"].ВидСравнения =
?(Номенклатура.ЭтоГруппа,
ВидСравнения.ВСпискеПоИерархии,
ВидСравнения.Равно);Полное описание, параметры и ограничения
Отбор.Добавить (Filter.Add)
Отбор (Filter)
Добавить (Add)
Доступен, начиная с версии 8.0.
Синтаксис:
Добавить(<Описание>, <Имя>, <Представление>)
Параметры:
<Описание> (обязательный)
Тип: Строка.
Описание элемента отбора в виде наименования доступного поля или в виде развернутого пути.
Например, "Контрагент.Код", где "Контрагент" - одно из полей доступных для отбора.
<Имя> (необязательный)
Тип: Строка.
Имя элемента отбора. Если не задано, то имя задается автоматически по переданному в качестве первого параметра описанию.
<Представление> (необязательный)
Тип: Строка.
Пользовательское представление добавляемого элемента отбора.
Возвращаемое значение:
Тип: ЭлементОтбора, Неопределено.
Если добавить элемент отбора не удалось, то возвращает значение Неопределено.
Описание:
Добавляет элемент отбора по переданному описанию поля отбора в виде "пути".
Например, если среди доступных полей есть поле "Контрагент", то возможно добавление элемента отбора "Контрагент", "Контрагент.ТипКонтрагента", "Контрагент.ТипКонтрагента.Наименование" и т.д.
Внимание! Метод не доступен для отбора динамических списков (свойство Отбор объектов СправочникСписок.<Имя справочника>, ДокументСписок.<Имя документа> и т.д.).
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Добавление возможно только из коллекции доступных полей.
Пример:
Отбор = ОтчетОстатки.ПостроительОтчета.Отбор;
Если Отбор.Найти("Номенклатура") = Неопределено Тогда
Отбор.Добавить("Номенклатура");
КонецЕсли;
Отбор["Номенклатура"].Использование = Истина;
Отбор["Номенклатура"].Значение = Номенклатура;
Отбор["Номенклатура"].ВидСравнения =
?(Номенклатура.ЭтоГруппа,
ВидСравнения.ВСпискеПоИерархии,
ВидСравнения.Равно);
См. также:
Отбор, метод УстановитьДоступныеПоля
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Оставить суммы не меньше 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 и не ограничение доступа: правила только формируют учебный результат.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Отобрать товары с количеством больше одного и вернуть настройки
Новый отбор исключает Ручку, оставляя Книгу и Коробку. Снимок настроек восстанавливает исходный числовой порог после пробного изменения.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
Учебная внешняя обработка с пустой управляемой основной формой. Создайте команду УчебныйПример, кнопку команды и назначьте действие УчебныйПример.
Вставьте полный модуль урока: клиентский обработчик и серверную функцию. Каждый урок — отдельная копия модуля.
Откройте EPF в тонком клиенте Windows. Данные Книга/Ручка/Коробка создаются только в памяти; запрос урока с параметрами не читает таблицы базы.
ПостроительОтчета — существующий API для изучения/сопровождения старого кода. Это не СистемаКомпоновкиДанных и не рекомендация заменять ею современные отчёты.
&НаКлиенте
Процедура УчебныйПример(Команда)
ТабДок = СформироватьУчебныйОтчет();
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Учебный ПостроительОтчета");
КонецПроцедуры
&НаСервере
Функция СформироватьУчебныйОтчет()
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Образцы = Новый Массив;
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
Для Каждого Образец Из Образцы Цикл
СтрокаДанных = Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
КонецЦикла;
Описание = Новый ОписаниеИсточникаДанных(Данные);
Для Каждого Колонка Из Описание.Колонки Цикл
Колонка.Поле = Истина;
Колонка.Отбор = Истина;
Колонка.Порядок = Истина;
Колонка.Измерение = Колонка.Имя = "Категория";
КонецЦикла;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Описание;
Построитель.АвтоДетальныеЗаписи = Ложь;
Построитель.ВыводитьДетальныеЗаписи = Истина;
Построитель.ВыводитьЗаголовокОтчета = Истина;
Построитель.ВыводитьОбщиеИтоги = Ложь;
Построитель.ВыводитьПодвалОтчета = Ложь;
Построитель.ВыводитьПодвалТаблицы = Ложь;
Построитель.ВыводитьШапкуТаблицы = Истина;
Построитель.ОтображатьСостояние = Ложь;
Построитель.ОбрабатыватьПрерываниеПользователя = Истина;
Построитель.ТекстЗаголовка = "Учебный отчёт — вымышленные данные";
Фильтр = Построитель.Отбор.Добавить("Количество", "УчебныйПорог", "Количество больше порога");
Если Фильтр = Неопределено Тогда
ВызватьИсключение "Учебное поле недоступно для отбора";
КонецЕсли;
Фильтр.ВидСравнения = ВидСравнения.Больше;
Фильтр.Установить(1, Истина);
Сообщить(Фильтр.Использование);
Сообщить(Фильтр.Значение = 1);
Сообщить(Фильтр.Имя = "УчебныйПорог");
Сообщить(Фильтр.ТипЗначения.СодержитТип(Тип("Число")));
Настройки = Построитель.ПолучитьНастройки();
Фильтр.Установить(99, Истина);
Построитель.УстановитьНастройки(Настройки);
Восстановленный = Построитель.Отбор.Найти("УчебныйПорог");
Если Восстановленный = Неопределено Тогда
ВызватьИсключение "Отбор не восстановлен из собственных настроек";
КонецЕсли;
Сообщить(Восстановленный.Значение = 1);
Сообщить(Восстановленный.Использование);
Сообщить("Отбор выводит только Книгу 3 и Коробку 2, не Ручку 1.");
ТабДок = Новый ТабличныйДокумент;
Построитель.Вывести(ТабДок);
Возврат ТабДок;
КонецФункции
Разбор по шагам
Флаг Отбор у описания колонки включён до передачи источника построителю.
Добавить получает путь Количество, собственное имя УчебныйПорог и подпись. Метод может вернуть Неопределено — проверяем.
Больше с числовым значением 1 означает строго >1, не >=1. Использование включает фильтр.
ПолучитьНастройки сохраняет настройки отчёта, не товары и не документы базы.
После пробного порога 99 восстанавливаем настройки, заново находим элемент отбора и проверяем 1.
Старую ссылку Фильтр после восстановления больше не используем для изменения настроек.
Как проверить результат
Шесть проверок Истина.
В конечном отчёте Книга и Коробка, Ручки нет.
Исходная таблица остаётся с тремя строками: фильтр влияет на вывод.
Ожидаемый результат
Рабочий числовой отбор и восстановление его настроек показаны без удаления исходных данных.
На что обратить внимание
Это Отбор построителя, не ОтборНабораЗаписей и не ОтборКомпоновкиДанных.
ПолучитьНастройки — не резервная копия данных информационной базы.
Восстановление заменяет элементы настройки, поэтому ссылки на старые элементы нельзя считать актуальными.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.