Способ программного определения видимых строк пользователю, если пользователь отфильтровал строки таблицы формы, введя текст в строке поиска

26.08.22

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

В статье описан способ определить видимые пользователю строки, когда строки отфильтрованы текстом в строке поиска.

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

Наименование Файл Версия Размер
Пометка строк табличной части по строке поиска:
.epf 7,90Kb
0
.epf 7,90Kb Скачать

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

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

Тестовый пример прилагаю. Тестирование проводилось на платформе 8.3.21.1302.

 

	//Установка пометок для строк только отображаемых пользователю
	//замечено, что для строк которые скрыты от пользователя ТекущаяСтрока принимает значение Неопределено
	КоличествоСтрок = ТаблицаЗначений.Количество();
	ТекущееПоложение = Элементы.ТаблицаЗначений.ТекущаяСтрока;
	Элементы.ТаблицаЗначений.ТекущаяСтрока = Неопределено;
	ПометкиУстановлены = Ложь;
	Для каждого Строка из ТаблицаЗначений Цикл
		
		Ид = Строка.ПолучитьИдентификатор();
		Элементы.ТаблицаЗначений.ТекущаяСтрока = Ид; 
		Если НЕ Элементы.ТаблицаЗначений.ТекущаяСтрока = Неопределено Тогда
			Строка.Пометка = Истина;
		Иначе                       
			Строка.Пометка = Ложь;
		КонецЕсли;
		
	КонецЦикла;
	
	Элементы.ТаблицаЗначений.ТекущаяСтрока = ТекущееПоложение;

 

См. также

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

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

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

2400 руб.

29.06.2020    17187    23    4    

37

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

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

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

27.12.2023    11668    776    elcoan    46    

107

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

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

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

2 стартмани

10.04.2023    10205    157    acces969    31    

120

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

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

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

1 стартмани

05.07.2022    4206    kalyaka    4    

31

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

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

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

6000 руб.

18.01.2022    9107    1    2    

6

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

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

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

25.11.2021    10006    AtamanovYS    19    

141
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. basicmaster 2 26.08.22 07:34 Сейчас в теме
ай молодца, ай догада :-)
2. tormozit 7168 26.08.22 09:46 Сейчас в теме
Только выделенные строки не восстановил
3. dhurricane 26.08.22 09:56 Сейчас в теме
Все намного проще:
Для каждого ТекущаяСтрока Из Таблица Цикл
		
	ТекущаяСтрока.Пометка = Элементы.Таблица.ПроверитьСтроку(ТекущаяСтрока.ПолучитьИдентификатор());
		
КонецЦикла;
golod; RomanUzmov; bulpi; SlavaKron; ltfriend; dimanich70; DrAku1a; binx; Nikola23; tormozit; +10 Ответить
17. Риник 13 13.03.23 17:59 Сейчас в теме
(3) если видимость скрыта через условное оформление - не сработает
20. VKislitsin 978 08.05.24 15:32 Сейчас в теме
(3) У вас источником данных для ТаблицыФормы является ТабличнаяЧасть или НаборЗаписей. А у автора речь идет про источник данных - реквизит формы типа ТаблицаЗначений. В этом случае метод ПроверитьСтроку() не работает.

Правда, на 24-й платформе и метод, предложенный в статье, тоже не работает.
21. dhurricane 08.05.24 15:38 Сейчас в теме
(20) Проверил на платформе 8.3.23.2040 на таблице значений - работает.
22. VKislitsin 978 08.05.24 19:34 Сейчас в теме
(21) Тут не понял что работает - ПроверитьСтроку() или метод автора публикации?
23. dhurricane 09.05.24 01:57 Сейчас в теме
(22) ПроверитьСтроку. Я держу ответ только за свой предложенный алгоритм.
24. VKislitsin 978 09.05.24 09:12 Сейчас в теме
(23) Да, работает. Я тоже уже понял где ошибся - процедура была в серверном контексте, а я не обратил на это внимания.
4. binx 168 26.08.22 13:06 Сейчас в теме
Супер, я так и знал что должен быть способ. Спасибо. Но хотелось бы вообще обойтить без перебора, чтобы стандартные методы работали без перебора строк, возвращая готовый набор видимых строк, но видимо чего нет, того нет. По крайней мере, теперь мы знаем как метод ПроверитьСтроку работает 👍
5. dhurricane 26.08.22 13:42 Сейчас в теме
А можете привести пример, когда информация о видимых строках вообще нужна? Делал однажды похожую задачу - расчет итогов для дин. списка. Здесь также? Или есть какие-то еще задачи?

А то про метод "ПроверитьСтроку" то я знаю, но вот ни разу пользоваться не приходилось. :-)
6. binx 168 26.08.22 13:58 Сейчас в теме
(5) да, согласен ситуация нечастая. Задача стояла такая, я описал её в статье. Клиенту удобно фильтровать поиском строки табличной части, по части строки, пример можно посмотреть на картинках, а над видимыми строками выполнять различные действия.
7. Cyberhawk 135 01.09.22 10:15 Сейчас в теме
(5) Отметить флажками пачку отобранных (поиском или отбором) строк
8. dhurricane 01.09.22 11:35 Сейчас в теме
(7) Как правило, я такие задачи решаю проще: что выделил пользователь, то и отмечать флажками. Аналогичным образом работают и типовые списки, поэтому такое поведение пользователю будет привычнее. Как мне кажется.
9. Cyberhawk 135 01.09.22 11:52 Сейчас в теме
(8) Вариант через выделение строк действительно избавляет от необходимости пользоваться флажками, но он:
- довольно хрупок: одним ошибочным кликом мышки мы обнуляем весь накопленный результат
- если критериев отбора (т.е. этапов добавления порций кандидатов в итоговый перечень) больше одного, то чаще всего неприменим
.
Тут-то флажки (с возможностью помечать ими все отображаемые, т.е. попавшие в фильтр, строки таблицы) и пригождаются.
11. binx 168 01.09.22 15:13 Сейчас в теме
(9) Дело в том что строк много, поэтому пользователю проще так, тем более что они не подряд, выделять, разрозненные строки, с помощью Ctrl не тренированному пользователю, трудно, легко сбиться и потерять весь результат выделения.
Я не защищаю этот способ, была задача, надо было решать. Насчет ошибочного движения мышки, не могу согласиться.
- если критериев отбора (т.е. этапов добавления порций кандидатов в итоговый перечень) больше одного, то чаще всего неприменим
по факту критериев может быть несколько, если в строке поиска, несколько слов отделенных пробелами, опять же никто не говорит что это решение универсальное и заменяет отбор с группами ИЛИ, И, НЕ, >, <, =, !=. Просто способ фильтрации удобный для определенного пользователя.
13. Cyberhawk 135 01.09.22 15:17 Сейчас в теме
(11) Не очень понимаю, почему написанное адресовано мне. Пока кажется, что ты ошибся при выборе сообщения для ответа.
12. dhurricane 01.09.22 15:17 Сейчас в теме
(9) Не, Вы меня неверно поняли. Я не предлагал отказаться от флажков. Я говорил как раз про установку флажков в выделенных строках. В т.ч. и по клику на флажке в одной из выделенных строк. Как раз в типовых такое поведение и подсмотрел.
14. Cyberhawk 135 01.09.22 15:22 Сейчас в теме
(12) Получается твой способ для пометки всех попавших в отбор строк требует сначала выделить их все через нажатие Ctrl+A, так?
Сценарий в (7) пригождается для возможности пометить все одной кнопкой (одним кликом мышки) без необходимости предварительного выделения этих всех строк.
15. dhurricane 01.09.22 15:39 Сейчас в теме
(14) Да, собственно, из первого приведенного для меня примера я так и понял.
10. binx 168 01.09.22 15:08 Сейчас в теме
(8) Ну что тут скажешь, он пользователь, он так видит.
18. RomanUzmov 40 11.06.23 18:26 Сейчас в теме
(5) Ну, например, когда в таблице на форме документа пользователь вводит в строке поиска какое-либо значение для поиска, либо накладывает фильтр, и строки выводятся на форме согласно заданному поиску/фильтру, надо чтобы итоги по столбцам при этом пересчитались. Крайне удобная вещь. В стоковом варианте итоги будут равны итогам по всей таблице, невзирая на фильтры, что неудобно для пользователя.
19. dhurricane 13.06.23 00:52 Сейчас в теме
(18) Как поймать момент, когда пользователь ввел строку поиска?
16. bulpi 215 02.09.22 02:55 Сейчас в теме
"При установке идентификатора видимых строк, свойство ТекущаяСтрока остается быть установленным в Неопределено, а если устанавливается идентификатор видимой строки, то в присвоенное значение. "

Сам то понял, что написал?
Оставьте свое сообщение