При переходе с платформы 1С:Предприятие 8.2 (или обычных форм) на 1С:Предприятие 8.3 (интерфейс «Такси» и управляемые формы) многие пользователи и разработчики сталкиваются с изменением привычного поведения стандартного поиска по Ctrl + F. В старых версиях платформы диалоговое окно поиска содержало явный флажок «Искать в найденном». Отключив его, можно было выполнять новый поиск по всему списку без учета предыдущих результатов. В управляемом интерфейсе 8.3 этот флажок отсутствует, и каждый новый поиск по колонке автоматически фильтрует уже отобранные данные. Разберем подробно, почему так произошло, как устроена архитектура поиска в 8.3 и какими способами можно решать данную задачу.
Проанализируем архитектурные изменения. Начиная с версии платформы 8.3.5, фирма 1С полностью переработала элементы управления динамическими списками. В управляемом интерфейсе логика поиска стала накопительной по умолчанию:
Ctrl + F или выбор пункта «Найти» по текущему значению добавляет новое условие отбора, объединяя его с уже активными условиями по логике «И».Выясним, какие варианты и сценарии работы существуют для управления этим поведением.
Рассмотрим самый быстрый пользовательский путь работы со списками без изменения конфигурации. Для того чтобы повторный поиск выполнялся по всему объему данных, а не в выборке предыдущего запроса, необходимо предварительно сбросить текущие фильтры:
Ctrl + Q (или кнопку «Отменить поиск» на командной панели списка). Это полностью очищает текущие результаты поиска и восстанавливает отображение всего списка.Ctrl + F для открытия окна поиска и задаем новое условие по нужной колонке.Таким образом, последовательность действий Ctrl + Q → Ctrl + F заменяет работу со снятым флажком «Искать в найденном».
Разберем возможности встроенной строки поиска, расположенной над табличной частью или в командной панели динамического списка. Она обладает принципиально иной логикой по сравнению с диалогом по Ctrl + F:
Иванов Москва найдет строки, где встречаются оба эти значения.45 найдет номер 000000045).Посмотрим, как управлять отдельными наложенными условиями, если сбрасывать весь поиск целиком не требуется. При наложении нескольких условий поиска над таблицей динамического списка отображается область состояния просмотра, где каждое условие выводится в виде отдельной плашки:
Если панель состояния просмотра скрыта в вашей форме, проверим свойства таблицы в Конфигураторе:
Авто или Верх.Авто или Командная панель.Авто (это добавит кнопку вызова истории последних поисковых запросов).Рассмотрим задачу с точки зрения разработчика. Если требуется автоматически сбрасывать пользовательский поиск перед выполнением каких-либо действий, очищать фильтры через код или программно управлять структурой отбора, обратимся к объекту КомпоновщикНастроек динамического списка.
Проанализируем пример программной очистки пользовательских условий отбора динамического списка:
&НаКлиенте
Процедура СброситьПользовательскийПоиск()
// Очищаем пользовательские отборы динамического списка
ЭлементыПользовательскихНастроек = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
Для Каждого ЭлементНастройки Из ЭлементыПользовательскихНастроек Цикл
Если ТипЗнч(ЭлементНастройки) = Тип("ОтборКомпоновкиДанных") Тогда
ЭлементНастройки.Элементы.Очистить();
КонецЕсли;
КонецЦикла;
// Обновляем отображение динамического списка на форме
Элементы.Список.Обновить();
КонецПроцедуры
В случаях, когда требуется эмулировать нажатие клавиш очистки поиска при активации определенных колонок на стороне тонкого клиента (под Windows), некоторые разработчики используют обращение к объекту WScript.Shell, однако такой подход является платформенно-зависимым и не рекомендуется для кроссплатформенных и веб-клиентов:
&НаКлиенте
Процедура СписокПриАктивизацииПоля(Элемент)
#Если Клиент И Не ВебКлиент Тогда
// Пример эмуляции нажатия Ctrl+Q через Windows Script Host
Попытка
Скрипт = Новый COMОбъект("WScript.Shell");
Скрипт.SendKeys("^q");
Исключение
// Обработка отсутствия поддержки COM
КонецПопытки;
#КонецЕсли
КонецПроцедуры
Рекомендуется использовать штатные средства платформы: обучение пользователей горячим клавишам Ctrl + Q и использование строки глобального поиска динамического списка.