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

26.08.22

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

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

Файлы

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

Наименование Скачано Купить файл
Пометка строк табличной части по строке поиска:
.epf 7,90Kb
1 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

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

Оформить подписку и скачать решение со скидкой

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

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

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

 

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

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    56405    31    25    

45

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36000 руб.

28.08.2025    2703    1    2    

4

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

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

6000 руб.

14.01.2016    58242    20    25    

46

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

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

5160 руб.

29.06.2020    22865    32    6    

51

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

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

5040 руб.

06.10.2020    12852    8    8    

14

Работа с интерфейсом Программист Стажер 1С:Предприятие 8 Бесплатно (free)

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

20.08.2024    43395    mrXoxot    44    

138

Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

27.05.2024    24834    smielka    38    

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

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

А то про метод "ПроверитьСтроку" то я знаю, но вот ни разу пользоваться не приходилось. :-)
6. binx 176 26.08.22 13:58 Сейчас в теме
(5) да, согласен ситуация нечастая. Задача стояла такая, я описал её в статье. Клиенту удобно фильтровать поиском строки табличной части, по части строки, пример можно посмотреть на картинках, а над видимыми строками выполнять различные действия.
7. Cyberhawk 137 01.09.22 10:15 Сейчас в теме
(5) Отметить флажками пачку отобранных (поиском или отбором) строк
8. dhurricane 01.09.22 11:35 Сейчас в теме
(7) Как правило, я такие задачи решаю проще: что выделил пользователь, то и отмечать флажками. Аналогичным образом работают и типовые списки, поэтому такое поведение пользователю будет привычнее. Как мне кажется.
9. Cyberhawk 137 01.09.22 11:52 Сейчас в теме
(8) Вариант через выделение строк действительно избавляет от необходимости пользоваться флажками, но он:
- довольно хрупок: одним ошибочным кликом мышки мы обнуляем весь накопленный результат
- если критериев отбора (т.е. этапов добавления порций кандидатов в итоговый перечень) больше одного, то чаще всего неприменим
.
Тут-то флажки (с возможностью помечать ими все отображаемые, т.е. попавшие в фильтр, строки таблицы) и пригождаются.
11. binx 176 01.09.22 15:13 Сейчас в теме
(9) Дело в том что строк много, поэтому пользователю проще так, тем более что они не подряд, выделять, разрозненные строки, с помощью Ctrl не тренированному пользователю, трудно, легко сбиться и потерять весь результат выделения.
Я не защищаю этот способ, была задача, надо было решать. Насчет ошибочного движения мышки, не могу согласиться.
- если критериев отбора (т.е. этапов добавления порций кандидатов в итоговый перечень) больше одного, то чаще всего неприменим
по факту критериев может быть несколько, если в строке поиска, несколько слов отделенных пробелами, опять же никто не говорит что это решение универсальное и заменяет отбор с группами ИЛИ, И, НЕ, >, <, =, !=. Просто способ фильтрации удобный для определенного пользователя.
13. Cyberhawk 137 01.09.22 15:17 Сейчас в теме
(11) Не очень понимаю, почему написанное адресовано мне. Пока кажется, что ты ошибся при выборе сообщения для ответа.
12. dhurricane 01.09.22 15:17 Сейчас в теме
(9) Не, Вы меня неверно поняли. Я не предлагал отказаться от флажков. Я говорил как раз про установку флажков в выделенных строках. В т.ч. и по клику на флажке в одной из выделенных строк. Как раз в типовых такое поведение и подсмотрел.
14. Cyberhawk 137 01.09.22 15:22 Сейчас в теме
(12) Получается твой способ для пометки всех попавших в отбор строк требует сначала выделить их все через нажатие Ctrl+A, так?
Сценарий в (7) пригождается для возможности пометить все одной кнопкой (одним кликом мышки) без необходимости предварительного выделения этих всех строк.
15. dhurricane 01.09.22 15:39 Сейчас в теме
(14) Да, собственно, из первого приведенного для меня примера я так и понял.
10. binx 176 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 210 15.08.24 10:30 Сейчас в теме
26. FoxSv 07.09.24 01:53 Сейчас в теме
Автор, дай бог тебе здоровья!!! :)
27. sir 19 10.10.24 14:25 Сейчас в теме
У меня на форме данные таблицы значений , "ПроверитьСтроку" не работает, пришлось изгаляться

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

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

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

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

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

Показать


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