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

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

При разработке интерфейсов на управляемых формах 1С часто возникает задача предоставить пользователю возможность самостоятельно фильтровать данные в таблице. Если вы используете ТаблицаЗначений в качестве реквизита формы, существует несколько подходов к решению этой задачи, различающихся по производительности и удобству использования.

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

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

Давайте разберем, как это реализовать на практике. Предположим, у нас есть таблица с именем ТЗД, и мы хотим отфильтровать её по значению в колонке СостояниеERP.

Для реализации «живого» фильтра мы можем использовать обработчик события ПриИзменении поля ввода, в котором пользователь указывает критерий фильтрации:


&НаКлиенте
Процедура СостояниеERPПриИзменении(Элемент)
    Отбор = Новый Структура;
    Отбор.Вставить("СостояниеERP", СостояниеERP);
    Элементы.ТЗД.ОтборСтрок = Отбор;
КонецПроцедуры

Важные моменты при использовании ОтборСтрок:

  1. Свойство ОтборСтрок доступно только для элементов управления формы.
  2. Для сброса фильтра достаточно присвоить свойству ОтборСтрок значение Неопределено или пустую структуру.
  3. Этот метод работает быстро, так как манипулирует только видимостью строк, а не физическим набором данных.

Метод НайтиСтроки: когда он полезен?

В ходе обсуждения часто упоминается метод НайтиСтроки(). Важно понимать принципиальную разницу между ним и свойством ОтборСтрок. Метод НайтиСтроки() работает с объектом данных (ТаблицаЗначений), а не с визуальным элементом формы.


// Пример использования НайтиСтроки
Отбор = Новый Структура;
Отбор.Вставить("СостояниеERP", СостояниеERP);
МассивНайденныхСтрок = ТЗД.НайтиСтроки(Отбор);

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

Чего следует избегать

При разработке интерфейсов в управляемых формах 1С крайне не рекомендуется использовать Условное оформление для скрытия строк целиком (например, путем установки цвета текста в тон фона). Это негативно сказывается на производительности, особенно при работе в веб-клиенте, и затрудняет работу пользователя с данными (скрытые строки остаются активными для выделения и копирования).

Рекомендация по архитектуре

Если ваша задача требует частого фильтрования больших объемов данных, мы рекомендуем рассмотреть переход с ТаблицыЗначений на ДинамическийСписок. ДинамическийСписок обладает встроенными механизмами настройки отборов, которые не требуют написания дополнительного кода, и перекладывает задачу фильтрации на сторону сервера базы данных, что значительно повышает скорость отклика системы.

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

← На главную