Фильтрация как в Excel

07.09.23

Разработка - Работа с интерфейсом

Расширение, дополняющее интерфейс всех динамических списков командами контекстного меню для установки отборов с помощью предварительно заполненных списков с флажками. Аналогичный функционал многие используют в MS Excel и Google Таблицах.

Скачать исходный код

Наименование Файл Версия Размер
Фильтрация как в Excel для ERP и, возможно, других конфигураций на базе БСП 3.1:
.cfe 41,44Kb
15
.cfe 1.1.0.0 41,44Kb 15 Скачать
Фильтрация как в Excel для УНФ:
.cfe 41,60Kb
1
.cfe 1.1.0.0 41,60Kb 1 Скачать

Описание (что получите после скачивания)

После установки расширения во всех динамических списках появятся три команды:

 

 

  • «Фильтр» - Показывает окно для выбора элементов, по которым планируется установить отбор в динамическом списке
  • «Отменить фильтр для колонки» - Удаляет ранее установленный отбор в текущей колонке.
  • «Отменить всю фильтрацию» - Удаляет все ранее установленные отбор в динамическом списке.

Узнайте о возможностях расширения за 8 минут:

 

 

Порядок работы

После выбора команды «Фильтр» появится такое окно:

 

 

Изначально список заполнен всеми уникальными значениями текущей колонки динамического списка.

Пользователь может выбрать одно или несколько значений и нажать «ОК». При этом окно исчезнет и произойдёт отбор динамического списка. За кадром программа сходит в настройки списка и добавит туда дополнительный отбор с видом сравнения «В списке» указанных значений:

 

 

Если на другой колонке нажать правую клавишу мыши и выбрать команду «Фильтр», то в списке отразятся только те уникальные значения, которые находятся в строках динамического списка, получившиеся в результате предыдущего отбора:

 

 

Кнопки «Установить флажки» и «Снять флажки» работают только для строк, которые в данный момент удовлетворяют поиску в поле ввода «Поиск», аналогично команде «(Выделить все результаты поиска)» в фильтре Excel.

 

 

Кнопка «Вставить из буфера» расставляет флажки у элементов, скопированных в буфер обмена:

 

 

Особенности

Так как вставка из буфера реализована через COM-объект, то на клиентах не Windows и на Веб-клиенте откроется окно с текстовым полем, куда пользователь вставит содержимое буфера сочетанием Ctrl+V и после нажатия кнопки «Вставить» выполнится алгоритм установки флажков.

Кнопки «Подбор» и «Добавить» здесь отсутствуют так как список уже предварительно заполнен всеми возможными значениями.

Учтены включенные разработчиком ограничения на отборы в некоторых колонках (см. метод реквизита формы типа ДинамическийСписок - ПолучитьОграниченияИспользованияВОтборе())

Если на колонке имеется другая картинка, то при включённой фильтрации она не заменяется.

 

Учет большого количества данных

Список фильтрации реализован аналогично динамическому списку: пользователю на форму выводится только первые 1000 значений.

Если пользователь активирует одну из последних 50 строк, то в список добавятся ещё 1000 строк и так далее...

При использовании кнопок «Установить флажки» и «Снять флажки» отметки расставятся даже на те строки, которые не выведены на форму, но с учётом совпадения с текстовым полем «Поиск»

 

О поиске

Поиск введённого фрагмента текста в поле «Поиск», как и при вставке искомых строк из буфера обмена, происходит по совпадению подряд идущих символов в представлении значения.
В запросе прописано условие:

ТаблицаЭлементов.Представление ПОДОБНО "%" + &ТекстПоиска + "%"

Если в датах нет времени, то представление без времени: Формат(Стр.Значение, "ДФ=dd.MM.yyyy");
В числах убираются символы разделителя групп: Формат(Стр.Значение, "ЧГ=0");
В строках отсекаются крайние незначительные символы:  СокрЛП(Стр.Значение)

 

Требования и рекомендации

Расширение будет работать в любой конфигурации с БСП не ниже 3.1.

Разработка тестировалась на платформе 1С:Предприятие 8.3 (8.3.23.1865) и конфигурации 1С:ERP Управление предприятием 2 (2.5.11.96).

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

Фильтрация Excel ДинамическийСписок Отбор Интерфейс

См. также

Управление дашбордами

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    17176    23    4    

37

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    11647    775    elcoan    46    

107

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    10184    157    acces969    31    

120

Модель состояния для MVC

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4198    kalyaka    4    

31

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

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

6000 руб.

18.01.2022    9105    1    2    

6

Программный интерфейс для доработки форм

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    9992    AtamanovYS    19    

141
Вознаграждение за ответ
Показать полностью
Отзывы
12. EvgeTrofi 127 03.09.23 05:27 Сейчас в теме
Есть ещё одна "особенность" в УНФ.
Не всегда удаётся команды фильтрации разместить сверху контекстного меню.
Если будут продуктивные предложения по решению этой проблемы - отблагодарю.
Прикрепленные файлы:
22. EvgeTrofi 127 07.09.23 05:49 Сейчас в теме
(21) Спасибо за подсказку! Перевёл тебе 3 СМ.
Невозможно выпустить универсальное решение для всех релизов и всех конфигураций, так как сами разработчики конфигураций вносят изменения в БСП.
В версии расширения 1.1.0.0 добавил упрощённую адаптацию к подчёркиваниям.
Теперь в расширении для УНФ в общем модуле ПодключаемыеКоманды добавлена адаптация:

&Вместо("ОпределитьИмяКоманды")
Функция ФКЕ_ОпределитьИмяКоманды(Форма, ИмяГруппы, ИдентификаторКоманды, СчетчикКомандСАвтогенерируемымИменем, ПрефиксКоманд)
	Результат = ПродолжитьВызов(Форма, ИмяГруппы, ИдентификаторКоманды, СчетчикКомандСАвтогенерируемымИменем, ПрефиксКоманд);
	Результат = СтрЗаменить(Результат, "ГруппаФильтрацияОбычное__", "ГруппаФильтрацияОбычное_");
	Возврат Результат;
КонецФункции


Так что, если у вас не свежий релиз УНФ и при выполнении команды конфигуратора [Действия] - [Конфигурация] - [Проверка возможности применения] укажет на эту процедуру, то просто удалите её.
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bprogs 208 28.08.23 09:45 Сейчас в теме
было бы хорошо, если бы кнопка была для табличного документа
корум; Pira; +2 1 Ответить
2. kser87 2444 28.08.23 11:24 Сейчас в теме
Идея на миллион
Krasnyj; Nikola23; Pira; EvgeTrofi; maksa2005; SergVolga_34; +6 Ответить
3. bprogs 208 28.08.23 12:17 Сейчас в теме
4. WI_IL 123 28.08.23 14:45 Сейчас в теме
Багованная очень сильно, еще 7 см, пожалел то что скачал.
5. EvgeTrofi 127 28.08.23 18:19 Сейчас в теме
(4) добрый день, коллега.
Хотелось бы увидеть более подробное описание ошибки или, если очень сильно багованная, то список ошибок в студию.
PowerBoy; cleaner_it; +2 Ответить
6. markw 29.08.23 14:20 Сейчас в теме
Насколько я понимаю, работает только для колонок списка, которые добавлены в конфигураторе и не работает для колонок, которые добавили пользователи в режиме приложения из реквизитов через ссылку?
13. EvgeTrofi 127 03.09.23 06:31 Сейчас в теме
7. user646537_99253 29.08.23 15:11 Сейчас в теме +3 $m
Управление нашей фирмой, редакция 3.0 (3.0.5.114)
БСП 3.1.8.375
1С:Предприятие 8.3 (8.3.22.1923)
Не запустилась, вылезло куча багов. Толи в УНФ свой:)) подход к подключаемым командам, толи в БСП 3.1.8.375

1.Ошибка при установке значения атрибута контекста (Отображение)
{ОбщийМодуль.ПодключаемыеКоманды.Модуль(1159)}:Подменю.Отображение = ШаблонНового.Отображение;
пришлось исправлять
Процедура ПриОпределенииВидовПодключаемыхКоманд(ВидыПодключаемыхКоманд) Экспорт
	
	Вид = ВидыПодключаемыхКоманд.Добавить();
	Вид.Имя         = "ФильтрацияКакВExcel";
	Вид.ИмяПодменю  = "ГруппаФильтрация";
	Вид.Заголовок   = НСтр("ru = 'Фильтрация';|en = 'Filter'");
	Вид.Порядок     = 1;
   Вид.ВидГруппыФормы = ВидГруппыФормы.ГруппаКнопок;
   //Вид.Отображение = ОтображениеКнопки.Текст;// вместо 
   Вид.Отображение = ОтображениеГруппыКнопок.Авто;// делаем так
	
КонецПроцедуры
Показать


2. Ошибка
Добавляем нижнее подчеркивание ГруппаФильтрацияОбычное_ делаем так ГруппаФильтрацияОбычное__
Процедура ФКЕ_ВывестиКоманды(Форма, Команды, ПараметрыРазмещения)
	
	СлужебныеЭлементы = Новый Массив;
	СлужебныеЭлементы.Добавить("ГруппаФильтрацияОбычное__ПолучитьЭлементыТекущейВыборки");
	СлужебныеЭлементы.Добавить("ГруппаФильтрацияОбычное__ВыполнитьКомандуФильтрацииВКонтекс­тномМеню");
	СлужебныеЭлементы.Добавить("ГруппаФильтрацияОбычное__РасставитьОтметкиОтфильтрованныхКо­лонок");

3. Ошибка
Добавляем нижнее подчеркивание ГруппаФильтрацияОбычное_ делаем так ГруппаФильтрацияОбычное__
Процедура РасставитьОтметкиОтфильтрованныхКолонок(Форма, Источник) Экспорт

	ПараметрКоманды = Новый Структура;
	
	Контекст = Новый Структура();
	Контекст.Вставить("ИмяКомандыВФорме", "ГруппаФильтрацияОбычное__" + ФКЕ_ФильтрацияКлиентСервер.ИмяКомандыРасставитьОтметкиОтфильтрованныхКолонок());

и в этой процедуре добавляем нижнее подчеркивание ""ГруппаФильтрацияОбычное_ делаем так ГруппаФильтрацияОбычное__"
Процедура ПослеВыбораФильтра(Результат, ПараметрыВыполнения) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ПараметрыВыполнения.Свойство("ИмяРеквизитаФормы") Тогда
		ПараметрыВыполнения.Форма.ЭтотОбъект[ПараметрыВыполнения.ИмяРеквизитаФормы].ЗагрузитьЗначения(Результат);
	Иначе //это фильтр контекстного меню
		
		Контекст = Новый Структура();
		Контекст.Вставить("ИмяКомандыВФорме", "ГруппаФильтрацияОбычное__ВыполнитьКомандуФильтрацииВКонтекс­тномМеню");
Показать

После заработало, но всё-же 7 см:))
8. EvgeTrofi 127 01.09.23 04:41 Сейчас в теме
(7) Я говорю, спасибо тебе, user646537_99253!
За проделанную тобой работу я перевёл тебе 3 см.
Чуть позже постараюсь выпустить релиз, адаптированный под УНФ, чтобы пользователям не приходилось редактировать расширение самостоятельно.
support; user646537_99253; +2 Ответить
10. user646537_99253 01.09.23 10:21 Сейчас в теме
(8) Есть ешё проблема в УНФ. Не правильно отрабатывает эта Процедура, не определяет
она правильно переменную "ЭтоФормаОбъекта", надо как-то по другому делать.
&После("ОбновитьКоманды")
Процедура ФКЕ_ОбновитьКоманды(Форма, Знач Источник)
	#Если Клиент Тогда
   ЭтоФормаОбъекта = ТипЗнч(Источник) = Тип("ДанныеФормыСтруктура");
   Если НЕ ЭтоФормаОбъекта Тогда
      ФКЕ_ФильтрацияКлиент.РасставитьОтметкиОтфильтрованныхКолонок(Форма, Источник);
   КонецЕсли;
	#КонецЕсли
КонецПроцедуры
Показать
11. EvgeTrofi 127 03.09.23 05:23 Сейчас в теме
(10) На какой форме наблюдаются проблемы с этим кодом?
14. user646537_99253 03.09.23 13:23 Сейчас в теме +3 $m
(11) Проблемы при открытие формы списка Номенклатуры. На первый взгляд я погрешил на этот код:)) Но проблема оказалась глубже.
В данной форме процедура
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат)

не "Экспорт"-ная вызвать её в
Процедура РасставитьОтметкиОтфильтрованныхКолонок(Форма, Источник) Экспорт

так
Форма.Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат);
не получиться
16. EvgeTrofi 127 03.09.23 21:34 Сейчас в теме
(14) Это отклонение от стандартов БСП.

В БСП до 3.1 должно было быть так:
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
    ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
Показать


Либо так:
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
    ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
    ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
Показать


В статье об этом я упомянул и в видео тоже есть об этом несколько секунд. На остальное я не подписывался :)
Можно адаптировать самостоятельно костыльно конкретно под эту форму, добавив в расширение экспортную процедуру. Но это уже выходит за рамки данного проекта.

Да и чего там фильтровать то в списке номенклатуры? Там всего один столбец с наименованием.
Думаю, корректнее всего здесь вообще заглушку поставить, чтобы перед вызовом экспортной процедуры делать проверку на существование этой процедуры в модуле формы. Это исключит сообщение об ошибке, чтобы не раздражать пользователей.
В следующем релизе будет.

	Если Форма.ПараметрыПодключаемыхКоманд.Свойство("ВызовСервераЧерезОбработкуОповещения") Тогда
		
		Если ЕстьЭкспортныйМетод(Форма, "Подключаемый_ПродолжитьВыполнениеКомандыНаСервере") Тогда
			ОписаниеОповещения = Новый ОписаниеОповещения("Подключаемый_ПродолжитьВыполнениеКомандыНаСервере", Форма);
			ВыполнитьОбработкуОповещения(ОписаниеОповещения, Контекст);
			Результат = Контекст.Результат;
		ИначеЕсли ЕстьЭкспортныйМетод(Форма, "Подключаемый_ВыполнитьКомандуНаСервере") Тогда
			Форма.Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат);
		КонецЕсли;
		
	ИначеЕсли ЕстьЭкспортныйМетод(Форма, "Подключаемый_ВыполнитьКомандуНаСервере") Тогда
		Форма.Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат);
	КонецЕсли;
Показать
user646537_99253; +1 Ответить
23. EvgeTrofi 127 07.09.23 06:35 Сейчас в теме
(14) За подсказку о том, что на форме списка экспортных процедур БСП может и не оказаться перевёл тебе ещё 3 СМ.
user646537_99253; +1 Ответить
15. support 4449 03.09.23 14:29 Сейчас в теме
(8) Это была бы хорошая традиция, возвращать стартмани за найденные баги.
Dem1urg; EvgeTrofi; +2 Ответить
18. krumenko 32 06.09.23 16:38 Сейчас в теме
(15)Тем более если стартмани куплены за деньги)
17. krumenko 32 06.09.23 16:37 Сейчас в теме
(8)А релиз уже залит?
Ошибки все равно "сыпятся"
Пришлось купить подписку - и все равно ошибки
19. krumenko 32 06.09.23 16:40 Сейчас в теме
(17)Сведения о команде "ГруппаФильтрацияОбычное__ПолучитьЭлементыТекущейВыборки" не существуют.
20. EvgeTrofi 127 06.09.23 20:00 Сейчас в теме
(19)
Уточните пожалуйста, в какой конфигурации, на какой форме и при каком действии возникает ошибка?
21. krumenko 32 06.09.23 20:48 Сейчас в теме +3 $m
(20)Релиз не очень свежий 1.6.27.200. Удалил второе "подчеркивание": то есть сделал по всей видимости как было. И все "зашуршало")
EvgeTrofi; +1 Ответить
22. EvgeTrofi 127 07.09.23 05:49 Сейчас в теме
(21) Спасибо за подсказку! Перевёл тебе 3 СМ.
Невозможно выпустить универсальное решение для всех релизов и всех конфигураций, так как сами разработчики конфигураций вносят изменения в БСП.
В версии расширения 1.1.0.0 добавил упрощённую адаптацию к подчёркиваниям.
Теперь в расширении для УНФ в общем модуле ПодключаемыеКоманды добавлена адаптация:

&Вместо("ОпределитьИмяКоманды")
Функция ФКЕ_ОпределитьИмяКоманды(Форма, ИмяГруппы, ИдентификаторКоманды, СчетчикКомандСАвтогенерируемымИменем, ПрефиксКоманд)
	Результат = ПродолжитьВызов(Форма, ИмяГруппы, ИдентификаторКоманды, СчетчикКомандСАвтогенерируемымИменем, ПрефиксКоманд);
	Результат = СтрЗаменить(Результат, "ГруппаФильтрацияОбычное__", "ГруппаФильтрацияОбычное_");
	Возврат Результат;
КонецФункции


Так что, если у вас не свежий релиз УНФ и при выполнении команды конфигуратора [Действия] - [Конфигурация] - [Проверка возможности применения] укажет на эту процедуру, то просто удалите её.
9. muskul 01.09.23 09:04 Сейчас в теме
ну не правда, что бы было как в эксель нужно уменьшить шрифт раз в 10, что бы нельзя было разобрать что выбирать
awk; корум; +2 Ответить
12. EvgeTrofi 127 03.09.23 05:27 Сейчас в теме
Есть ещё одна "особенность" в УНФ.
Не всегда удаётся команды фильтрации разместить сверху контекстного меню.
Если будут продуктивные предложения по решению этой проблемы - отблагодарю.
Прикрепленные файлы:
24. krumenko 32 26.01.24 18:16 Сейчас в теме
Приветствую. Чуть доработал по пустой ссылке чтобы можно было. С примитивными ссылками все ок в частности по дате. А вот с ссылками проблема. Это ограничение платформы? В данном отборе ничего не выводит - пусто.
Прикрепленные файлы:
Оставьте свое сообщение