Как настроить отбор и фильтрацию строк в табличной части на управляемой форме 1С?

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

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

Разница между Динамическим списком и Табличной частью

Для понимания принципов работы интерфейса управляемых форм выясним различие между двумя основными типами табличных данных:

  1. Динамический список (ДС): представляет собой визуализированный результат запроса к таблицам базы данных. Платформа 1С автоматически предоставляет для него пункт меню Все действия — Настройка списка, позволяя пользователю накладывать произвольные отборы, сортировки и группировки. Однако динамический список отображает данные из БД и не предназначен для работы с произвольной таблицей значений из оперативной памяти.
  2. Табличная часть (ТЧ): хранит данные в оперативной памяти в рамках конкретного объекта (документа, справочника, обработки) или реквизита формы. К ней нельзя применить встроенный механизм настроек динамического списка, поэтому штатный пункт настройки списка для табличной части недоступен.

Использование свойства ОтборСтрок элемента формы

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

Посмотрим на пример установки отбора по конкретному значению (например, по выбранному складу):


// Установка отбора по выбранному складу
ОтборСтруктура = Новый Структура("Склад", Объект.Склад);
Элементы.ТаблицаТовары.ОтборСтрок = Новый ФиксированнаяСтруктура(ОтборСтруктура);

Для сброса ранее установленного отбора и отображения всех строк табличной части достаточно присвоить свойству значение Неопределено:


// Сброс отбора строк
Элементы.ТаблицаТовары.ОтборСтрок = Неопределено;

Важное ограничение: механизм ОтборСтрок поддерживает только жесткое равенство значений. С его помощью нельзя штатно настроить отбор по списку значений (например, выгрузка по двум складам одновременно), а также условия «Не равно», «Больше», «Содержит» или группы условий с логическим «ИЛИ».

Альтернативные варианты реализации сложных отборов

Если перед нами стоит задача отфильтровать строки по нескольким элементам или по сложному условию, проанализируем следующие доступные решения:

  1. Служебная колонка-флаг в сочетании с ОтборСтрок:

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

    
    // Заполнение служебной колонки на клиенте или сервере
    Для Каждого Стр Из Объект.Товары Цикл
        Стр.ПодходитПоОтбору = (СписокВыбранныхСкладов.НайтиПоЗначению(Стр.Склад) <> Неопределено);
    КонецЦикла;
    
    // Применение отбора по служебному полю
    Элементы.ТаблицаТовары.ОтборСтрок = Новый ФиксированнаяСтруктура("ПодходитПоОтбору", Истина);
    
  2. Фильтрация на сервере через запросы или СКД:

    Если табличная часть содержит большое количество строк, данные формы передаются на сервер с помощью РеквизитФормыВЗначение. Далее выполняется запрос к таблице значений или обработка через Систему компоновки данных (СКД), после чего результат выгружается обратно в реквизит формы с помощью ЗначениеВРеквизитФормы.

  3. Встроенный интерактивный поиск (горячие клавиши):

    Пользователи могут использовать встроенные возможности платформы без написания кода:

    1. Alt + F — установить отбор по значению текущей ячейки;
    2. Ctrl + F — вызов стандартного окна поиска по таблице;
    3. Ctrl + Shift + F — отмена всех установленных интерактивных отборов и поиска.
← На главную