При разработке на управляемых формах часто возникает задача анализа отборов, установленных для динамического списка. Обычный доступ через КомпоновщикНастроек не всегда позволяет увидеть фильтры, заданные пользователем интерактивно через стандартное окно настройки списка (Alt+F). Давайте разберем, как получить «честный» и полный срез текущих настроек отбора.
Когда мы пытаемся обратиться к Список.КомпоновщикНастроек.Настройки.Отбор, мы получаем структуру, которая была задана разработчиком в конфигураторе или программно в модуле. Однако пользовательские фильтры, которые добавляются в процессе работы с программой через стандартный интерфейс («Еще» -> «Настроить список»), хранятся отдельно и не всегда отображаются в базовой коллекции настроек.
Проблема заключается в том, что динамический список — это сложный объект, использующий возможности Системы Компоновки Данных (СКД). Пользовательские настройки могут быть скрыты в объектах, которые не видны при простом обращении к элементам компоновщика.
Самый надежный способ получить актуальное состояние фильтрации — это метод ПолучитьИсполняемыеНастройкиКомпоновкиДанных(). Этот метод позволяет выгрузить итоговые настройки, которые в данный момент реально применяются сервером при формировании запроса к базе данных.
Рассмотрим, как это реализовать на практике:
Для того чтобы получить доступ к элементам отбора, используйте следующую конструкцию в модуле управляемой формы:
// Получаем исполняемые настройки списка
ИсполняемыеНастройки = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
// Проходим по элементам отбора, чтобы проанализировать установленные фильтры
Для Каждого ЭлементОтбора Из ИсполняемыеНастройки.Отбор.Элементы Цикл
Если ЭлементОтбора.Использование Тогда
// Обрабатываем активные отборы
Сообщить("Поле: " + Строка(ЭлементОтбора.ЛевоеЗначение));
Сообщить("Вид сравнения: " + Строка(ЭлементОтбора.ВидСравнения));
Сообщить("Значение: " + Строка(ЭлементОтбора.ПравоеЗначение));
КонецЕсли;
КонецЦикла;
При работе с полученной коллекцией Элементы, важно учитывать следующие особенности:
Использование. Если оно равно Ложь, значит, данный фильтр выключен пользователем и не должен учитываться в вашей логике.ПолучитьИсполняемыеНастройкиКомпоновкиДанных() «смешивает» программные отборы и пользовательские. Различить их программно бывает затруднительно, так как для платформы это единый набор параметров запроса.Список.КомпоновщикНастроек.Настройки.Отбор. Прямое изменение исполняемых настроек может привести к рассинхронизации состояния формы и отображаемых данных.Если ваша задача состоит в том, чтобы отслеживать момент изменения настроек пользователем, рассмотрите использование обработчика событий формы ПриЗагрузкеПользовательскихНастроекНаСервере. Это позволит вам перехватить новые фильтры сразу после того, как пользователь их применил, и выполнить необходимую обработку данных.
Таким образом, использование метода ПолучитьИсполняемыеНастройкиКомпоновкиДанных() — это лучший способ увидеть реальную картину фильтрации данных, которая применяется к динамическому списку, независимо от способа задания этих фильтров.