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

26.08.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пометка строк табличной части по строке поиска:
.epf 7,90Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

 

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

 

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

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

5000 руб.

14.01.2016    55436    17    23    

43

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

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

6000 руб.

16.01.2015    63824    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    19716    28    6    

44

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

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

20.08.2024    21816    mrXoxot    44    

128

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

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    10930    smielka    37    

105

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

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

27.12.2023    17954    1225    elcoan    53    

125

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    12653    167    acces969    31    

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

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

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

Сам то понял, что написал?
25. KHoroshulinAV 171 15.08.24 10:30 Сейчас в теме
26. FoxSv 07.09.24 01:53 Сейчас в теме
Автор, дай бог тебе здоровья!!! :)
27. sir 18 10.10.24 14:25 Сейчас в теме
У меня на форме данные таблицы значений , "ПроверитьСтроку" не работает, пришлось изгаляться

&НаКлиенте
Процедура ОбновитьИтогиПослеОтбора()
		
	мТекущийЭлемент = ЭтотОбъект.ТекущийЭлемент;
	мТекущаяСтрока  = Элементы.СписокЗаказов.ТекущаяСтрока;
	
	ВыделитьСтрокиЗаказов(); 
	 
	ПодключитьОбработчикОжидания("ЗакончитьОбновитьИтогиПослеОтбора", 0.5, Истина);
	
КонецПроцедуры  

&НаКлиенте
Процедура ЗакончитьОбновитьИтогиПослеОтбора()
	
	СуммаДоходов = 0;
			
	ВыделенныеСтроки = Элементы.СписокЗаказов.ВыделенныеСтроки;
	
	Если ВыделенныеСтроки.Количество() > 1 Тогда
		Для Каждого с Из ВыделенныеСтроки Цикл
			стр = СписокЗаказов.НайтиПоИдентификатору(с);
			СуммаДоходов = СуммаДоходов + стр.СуммаДоходов;
		КонецЦикла;
	КонецЕсли;
	
	ЭтотОбъект.ТекущийЭлемент = мТекущийЭлемент;
	
	ВыделенныеСтроки.Очистить();;
	ВыделенныеСтроки.Добавить(мТекущаяСтрока);
	
	Элементы.СписокЗаказовНовыйСуммаДоходов.ТекстПодвала     = Формат(СуммаДоходов,"ЧДЦ=2; ЧН=' '"); ;
     
КонецПроцедуры

&НаКлиенте
Процедура АдресОтправленияОтборОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	
	ОбновитьИтогиПослеОтбора();

КонецПроцедуры

&НаКлиенте
Процедура ВыделитьСтрокиЗаказов()
	
	ЭтотОбъект.ТекущийЭлемент = Элементы.СписокЗаказов;
	
	ОбъектShell = Новый COMОбъект("Wscript.Shell");
	ОбъектShell.SendKeys("^A"); 
	 
КонецПроцедуры	

Показать


то есть после того как я установить отбор по строкам (это происходит при редактировании строчного реквизита "АдресОтправленияОтбор"),
я выделяю строки , обсчитываю и снимаю выделение.
Оставьте свое сообщение