Как добавить отбор на управляемую форму в 1С:Предприятии 8.3

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

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

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

Способ 1. Использование стандартной настройки списка пользователем

Для начала проанализируем самый простой и базовый механизм, который доступен абсолютно в любом динамическом списке «из коробки». Если перед нами стоит задача быстро отфильтровать список документов (например, Расходных ордеров), мы можем воспользоваться стандартным окном настройки.

Рассмотрим, как это делает конечный пользователь в режиме «1С:Предприятие»:

  1. В правом верхнем углу таблицы динамического списка нажимаем кнопку «Еще».
  2. В выпадающем меню выбираем пункт «Настроить список...».
  3. Переходим на вкладку «Отбор».
  4. В левой колонке выбираем доступное поле (например, Контрагент или Склад) и перетаскиваем его в правую часть окна либо дважды кликаем по нему.
  5. Задаем вид сравнения (например, «Равно», «В списке», «Содержит») и указываем конкретное значение для фильтрации.
  6. Нажимаем кнопку «Завершить редактирование».

После выполнения этих шагов платформа автоматически перестроит запрос к базе данных и отобразит только те строки, которые соответствуют заданному условию.

Способ 2. Вынесение кнопки настройки отбора на форму из меню «Еще»

Выясним, как сделать стандартную команду настройки списка более заметной для пользователя. Если команда настройки списка или установки отбора скрыта в подменю «Еще», мы можем вынести ее непосредственно на командную панель формы.

Разберем по шагам, как это настроить в конфигураторе:

  1. Открываем нужную управляемую форму в конфигураторе.
  2. В окне элементов формы находим командную панель нашей таблицы (динамического списка). Обычно она называется СписокКоманднаяПанель.
  3. Если используется автозаполнение панели, то для управления конкретными кнопками нам нужно снять галочку Автозаполнение в свойствах командной панели и добавить команды вручную, либо добавить дополнительную кнопку, связанную со стандартным действием.
  4. Находим в списке стандартных команд таблицы команду НастройкаСписка.
  5. Перетаскиваем эту команду на командную панель формы.
  6. Выделяем созданную кнопку и переходим в ее палитру свойств.
  7. Находим свойство «ТолькоВоВсехДействиях» (вкладка «Основные»).
  8. Переключаем это свойство в значение «Нет».

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

Способ 3. Вывод «быстрых отборов» напрямую на форму (без кода)

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

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

  1. Открываем управляемую форму. В списке реквизитов находим основной реквизит формы с типом ДинамическийСписок (обычно он называется Список).
  2. Открываем свойства этого реквизита и находим строку «Настройка списка». Нажимаем на ссылку «Открыть».
  3. В появившемся окне компоновщика настроек переходим на вкладку «Отбор».
  4. Добавляем поле, по которому планируется делать отбор (например, Организация).
  5. Выделяем добавленное поле отбора и нажимаем на кнопку «Свойства пользовательской настройки» (иконка в виде желтой шестеренки в нижней части окна).
  6. В открывшемся диалоговом окне обязательно устанавливаем флаг «Включать в пользовательские настройки».
  7. В поле свойства «Режим редактирования» выбираем значение «Быстрый доступ». Нажимаем «ОК» и закрываем конструктор настройки списка.
  8. Теперь переходим к дереву элементов формы. Добавляем новую группу элементов. Для этого нажимаем «Добавить» и выбираем тип «Группа - Обычная группа». Назовем ее, например, ГруппаБыстрыеОтборы. Зададим ей горизонтальную группировку, чтобы поля располагались в ряд, и отключим отображение заголовка.
  9. Выделяем элемент таблицы динамического списка на форме.
  10. В палитре свойств таблицы находим свойство «Группа пользовательских настроек».
  11. В выпадающем списке выбираем нашу созданную ранее ГруппаБыстрыеОтборы.

Готово! При запуске приложения платформа автоматически спроецирует все настройки отборов, помеченные как «Быстрый доступ», в указанную группу на форме в виде готовых полей ввода.

Способ 4. Программная установка отбора в динамическом списке

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

Вариант А. Классический способ платформы (через элементы компоновки данных)

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


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

Вариант Б. Использование механизмов БСП (Библиотеки стандартных подсистем)

Если мы работаем в современной типовой конфигурации (такой как УТ, ERP, КА, БП или ЗУП), то в нашем распоряжении есть готовые программные модули БСП. Они позволяют решить задачу буквально в одну строку кода, избегая написания громоздких обходов коллекций:


&НаСервере
Процедура УстановитьОтборЧерезБСП()
    
    // Используем готовый общий модуль БСП для установки отбора
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
        Список, 
        "Контрагент", 
        Объект.Контрагент, 
        ВидСравненияКомпоновкиДанных.Равно
    );
    
КонецПроцедуры

Способ 5. Передача параметров отбора при открытии формы выбора

Рассмотрим сценарий, когда пользователь нажимает на кнопку выбора в поле ввода (например, выбирает расходный ордер), и нам нужно открыть форму выбора уже отфильтрованной по определенному складу или контрагенту.

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


&НаКлиенте
Процедура РасходныйОрдерНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отменяем стандартное открытие, будем открывать форму вручную
    
    ПараметрыВыбора = Новый Структура;
    
    // Создаем структуру отбора, где ключ — это имя поля в динамическом списке открываемой формы
    СтруктураОтбора = Новый Структура;
    СтруктураОтбора.Вставить("Склад", Объект.Склад);
    
    // Помещаем структуру отбора в параметры выбора под ключом "Отбор"
    ПараметрыВыбора.Вставить("Отбор", СтруктураОтбора);
    
    // Открываем форму выбора с нашими подготовленными параметрами
    ОткрытьФорму("Документ.РасходныйОрдер.ФормаВыбора", ПараметрыВыбора, Элемент);
    
КонецПроцедуры

Этот способ чрезвычайно прост и надежен для базовых отборов по равенству значений.

Способ 6. Отбор строк в табличных частях документов

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

Для фильтрации строк внутри обычной таблицы формы используется специальное свойство ОтборСтрок. Давайте посмотрим, как отфильтровать строки табличной части «Товары» по определенной номенклатурной позиции:


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

&НаКлиенте
Процедура СброситьФильтрСтрокТаблицы()
    
    // Для отмены отбора достаточно присвоить Неопределено
    Элементы.Товары.ОтборСтрок = Неопределено;
    
КонецПроцедуры

Использование свойства ОтборСтрок позволяет мгновенно скрывать лишние строки на стороне клиента без лишних серверных вызовов и перезаписи данных самого документа.

Мы подробно разобрали все ключевые и стандартные механизмы добавления отборов на управляемые формы в 1С:Предприятии 8.3. Комбинируя интерактивные настройки платформы и программное управление свойствами элементов, вы сможете создавать действительно удобные и интуитивно понятные интерфейсы для пользователей вашей системы.

← На главную