Какая проблема решается?

Любой разработчик и пользователь 1С сталкивается с типовой задачей: необходимо быстро отфильтровать данные в списке по часто используемым условиям. Стандартные механизмы (отборы, быстрый поиск) требуют ручного ввода и не всегда удобны для сложных условий.
Решение позволяет:
- Администратору в специальном справочнике создать любое количество фильтров в виде запросов.
- Пользователю в один клик выбрать, какие из доступных фильтров он хочет видеть в виде кнопок над списком.
- Динамически отображать на каждой кнопке актуальное количество документов по данному фильтру в формате X/Y, где Y — общее количество по фильтру, а X — количество с учетом всех текущих ручных отборов пользователя.
Представленное расширение "Удобные фильтры" успешно решает задачу быстрой и наглядной фильтрации, экономя время пользователей. Несмотря на то что разработка велась для УТ, архитектура позволяет адаптировать его и для других конфигураций. Требуется лишь добавить справочник Удобные фильтры в нужные подсистемы для отображения в интерфейсе
Примерный вид панели с кнопками
Техническая реализация
1. Хранение метаданных и настроек
2. Механизм применения фильтра
3. Динамический подсчет элементов на кнопках (X/Y
)
КОЛИЧЕСТВО(*)
КОЛИЧЕСТВО(*)
и условие отбора дополняется условием из фильтра.Технические требования
1С:Управление торговлей, 11.5.14.69, 11.5.8.410
-
Исходный код открыт.
-
В перспективе можно доработать:
- Кэширование результатов подсчета для снижения нагрузки на СУБД.
- Изменение пользователем порядка кнопок.

Преодоление основных трудностей
1. Проблема: Нет надежного способа отследить изменение данных в списке, чтобы вовремя обновить счетчики на кнопках. Событие ПриПолученииДанныхНаСервере
не имеет контекста формы.
Решение: Было реализовано хранение последнего времени получения данных в хранилище общих настроек.
- В хранилище настроек пользователя сохраняется время последнего получения данных динамическим списком.
- При получении данных динамическим списком это время обновляется.
- Через подключенную обработку ожидания периодически проверяется это время.
- Если время изменилось, всем открытым формам передается оповещение, которое инициирует пересчет всех счетчиков на их кнопках.
2. Проблема: "Долгий" пересчет значений счетчиков на кнопках. (Долгий в кавычках, потому, что сам процесс происходит достаточно быстро, но т.к. это происходит в потоке клиентского приложения, тормоза, например при листании списка, всё равно могут быть заметны)
Решение: Была реализована возможность фонового расчета показателей или их отключение в настройках пользователя. При получении оповещения форма запускает фоновый расчет показателей и при этом продолжает откликаться на действия пользователя. Фоновый расчет изображается вращающимся "колёсиком" на кнопке настройки фильтров:
3. Проблема: Минимизация кода для подключения механизма к любой новой форме.
Решение: Подключение сведено к трем шагам:
-
Импортировать нужную форму списка в расширение и скопировать в модуль формы универсальный клиентский код.
-
Подключить два обработчика событий формы:
-
ПриСозданииНаСервере
-
ОбработкаОповещения
-
-
Подключить один обработчик события
-
ПриПолученииДанныхНаСервере для каждого списка на форме, где требуются Удобные фильтры.
-
После этого над списком появляется кнопка настройки фильтров, с помощью которой пользователь может выбрать отображаемые кнопки из списка заданных администратором:
Сами фильтры задаются в справочнике Удобные фильтры администратором:
Это делает решение максимально универсальным и простым во внедрении.
Остались вопросы?
Для получения дополнительной информации и помощи в настройке модуля под нужды вашего бизнеса — оставьте заявку

Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.14.69, 11.5.8.410