Как программно сбросить пользовательские отборы и поиск в динамическом списке 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на управляемых формах 1С часто возникает задача сбросить все пользовательские отборы в динамическом списке. Например, когда пользователь переходит между закладками формы или нажимает специальную кнопку «Сбросить фильтры». В этой статье мы подробно разберем, как устроена система настроек динамического списка и какими способами можно программно очистить отборы, период и поиск.

Почему обычная очистка отбора не всегда работает?

Разберем устройство КомпоновщикаНастроек динамического списка. В нем настройки разделены на три ключевые области:

  1. Настройки (Настройки.Отбор) — базовые отборы схемы компоновки данных, заданные на этапе разработки в конфигураторе.
  2. Пользовательские настройки (ПользовательскиеНастройки) — фильтры, сортировки и условное оформление, которые пользователь настраивает прямо в режиме «1С:Предприятие» через форму настроек или быстрые отборы.
  3. Фиксированные настройки (ФиксированныеНастройки) — жесткие отборы, задаваемые разработчиком из кода, которые пользователь не может изменить или отключить в интерфейсе.

Если попытаться очистить коллекцию Список.КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить(), пользовательские фильтры останутся неизменными, так как они хранятся в коллекции ПользовательскиеНастройки.

Способ 1. Полная очистка всех пользовательских настроек

Рассмотрим самый простой и надежный способ сбросить все пользовательские отборы, сортировки и оформления до первоначального состояния. Для этого на сервере достаточно загрузить в компоновщик новый пустой объект пользовательских настроек:


&НаСервере
Процедура СброситьВсеПользовательскиеНастройкиНаСервере()
    
    // Загружаем пустые пользовательские настройки
    Список.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(Новый ПользовательскиеНастройкиКомпоновкиДанных);
    
КонецПроцедуры

Этот метод полностью очистит все установленные пользователем элементы отбора в динамическом списке.

Способ 2. Точечное отключение или очистка элементов отбора

Если требуется очистить только отборы, сохраняя при этом другие пользовательские настройки (например, группировки или порядок колонки), проанализируем коллекцию ПользовательскиеНастройки.Элементы.

Пройдем циклом по элементам и очистим группы отборов или отключим использование отдельных элементов:


&НаСервере
Процедура ОчиститьПользовательскиеОтборыНаСервере()
    
    Для Каждого Элемент Из Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
        Если ТипЗнч(Элемент) = Тип("ОтборКомпоновкиДанных") Тогда
            Элемент.Элементы.Очистить();
        ИлиЕсли ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
            Элемент.Использование = Ложь;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Способ 3. Очистка реквизита отбора по периоду

В динамических списках период часто выносится на форму как отдельный реквизит типа СтандартныйПериод. Присвоение даты вида Дата(1,1,1) является не вполне корректным. Рассмотрим правильно выполненный сброс периода:


&НаКлиенте
Процедура СброситьПериодНаКлиенте()
    
    // Вариант 1. Установка нового пустого стандартного периода
    Период = Новый СтандартныйПериод;
    
    // Вариант 2. Сброс ограничений через элементы формы
    Элементы.Список.Период.Вариант = СтандартныйПериодВариант.БезОграничения;
    
КонецПроцедуры

Способ 4. Сброс сохраненных настроек при создании формы

Если задача заключается в том, чтобы список открывался всегда без ранее сохраненных пользователем отборов, проанализируем генерацию уникального ключа текущих настроек при открытии формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Присваиваем новый уникальный идентификатор ключу настроек
    Список.КлючТекущихПользовательскихНастроек = Строка(Новый УникальныйИдентификатор);
    
КонецПроцедуры

Особенности полнотекстового и контекстного поиска по колонкам

Важно учитывать ограничение платформы 1С:Предприятие 8.3: интерактивный контекстный поиск по тексту колонки (вызываемый сочетанием клавиш или строкой поиска над таблицей) работает на уровне клиента таблицы формы и не отображается в структуре КомпоновщикНастроек.

В платформе 1С отсутствуют прямые методы BSL для программной отмены текущего введенного текста в строке встроенного поиска таблицы формы. Поэтому для управления фильтрами рекомендуется использовать стандартные механизмы отборов СКД или отдельную панель с реквизитами фильтрации на форме.

← На главную