Как программно добавить или изменить отбор в динамическом списке на управляемой форме?

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

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

Основные принципы работы с отбором динамического списка

Для управления фильтрацией в ДинамическийСписок мы используем объект КомпоновщикНастроекКомпоновкиДанных. Основным местом для внесения изменений является коллекция Настройки.Отбор.Элементы. Важно понимать, что каждое изменение здесь напрямую влияет на запрос, исполняемый системой к базе данных.

Чтобы программно добавить новый элемент отбора, мы выполняем следующие шаги:

  1. Получаем доступ к коллекции Отбор.Элементы конкретного динамического списка.
  2. Добавляем новый элемент, используя тип ЭлементОтбораКомпоновкиДанных.
  3. Устанавливаем необходимые параметры: поле отбора (ЛевоеЗначение), вид сравнения (ВидСравнения) и значение (ПравоеЗначение).
  4. Активируем отбор, установив свойство Использование = Истина.

Практический пример реализации

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


// Проверка наличия элементов отбора
Если СписокНаФорме.Отбор.Элементы.Количество() = 0 Тогда
    // Создаем новый элемент отбора
    ЭлементОтбора = СписокНаФорме.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяВашегоПоля");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = ЗначениеДляОтбора;
    ЭлементОтбора.Использование = Истина;
Иначе
    // Изменяем существующий элемент
    СписокНаФорме.Отбор.Элементы[0].ПравоеЗначение = ЗначениеДляОтбора;
    СписокНаФорме.Отбор.Элементы[0].Использование = Истина;
КонецЕсли;

Как получить данные текущей строки

Зачастую требуется установить отбор на основе того, что выбрал пользователь в другом списке или таблице. Для получения доступа к данным текущей строки на управляемой форме используем коллекцию Элементы формы.

Рассмотрим, как получить значение идентификатора (например, ID) из выбранной строки динамического списка:


// Получаем данные текущей строки элемента формы
ТекущаяСтрокаДанные = Элементы.ИмяЭлементаСписка.ТекущиеДанные;

Если ТекущаяСтрокаДанные <> Неопределено Тогда
    ВыбранныйID = ТекущаяСтрокаДанные.ID;
КонецЕсли;

Важно помнить, что обращение Элементы.ИмяЭлемента.ТекущиеДанные возвращает объект, содержащий значения всех колонок, которые выведены в динамический список. Если в списке нет нужной колонки (даже если она есть в запросе динамического списка, но не выведена на форму), ТекущиеДанные могут не содержать этого поля.

Советы по эффективной настройке

Разберем несколько важных моментов, которые помогут избежать ошибок при работе с программными отборами:

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

← На главную