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

26.08.22

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

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

Скачать файлы

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

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

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

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

 

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

 

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61793    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54401    16    21    

42

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

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

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

2400 руб.

29.06.2020    16695    21    4    

35

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

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

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

27.12.2023    10735    750    elcoan    45    

106

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

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

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

2 стартмани

10.04.2023    9610    151    acces969    31    

118

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

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

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

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12079    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. basicmaster 2 26.08.22 07:34 Сейчас в теме
ай молодца, ай догада :-)
2. tormozit 7136 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) если видимость скрыта через условное оформление - не сработает
4. binx 167 26.08.22 13:06 Сейчас в теме
Супер, я так и знал что должен быть способ. Спасибо. Но хотелось бы вообще обойтить без перебора, чтобы стандартные методы работали без перебора строк, возвращая готовый набор видимых строк, но видимо чего нет, того нет. По крайней мере, теперь мы знаем как метод ПроверитьСтроку работает 👍
5. dhurricane 26.08.22 13:42 Сейчас в теме
А можете привести пример, когда информация о видимых строках вообще нужна? Делал однажды похожую задачу - расчет итогов для дин. списка. Здесь также? Или есть какие-то еще задачи?

А то про метод "ПроверитьСтроку" то я знаю, но вот ни разу пользоваться не приходилось. :-)
6. binx 167 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 167 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 167 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 Сейчас в теме
"При установке идентификатора видимых строк, свойство ТекущаяСтрока остается быть установленным в Неопределено, а если устанавливается идентификатор видимой строки, то в присвоенное значение. "

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