В процессе работы с большими списками документов в 1С:Комплексная автоматизация пользователи часто сталкиваются с необходимостью быстрого поиска. Стандартный механизм, вызываемый сочетанием клавиш Alt + F, предлагает три режима: «По началу строки», «По части строки» и «По точному совпадению». Часто возникает задача зафиксировать один из этих режимов (например, точное совпадение) как основной, чтобы исключить ошибки ввода или лишние клики. Давайте детально разберем, почему это нельзя сделать стандартными настройками и какие существуют технические способы решения данной задачи.
Прежде всего, проанализируем ситуацию с точки зрения архитектуры платформы. Диалоговое окно, которое открывается при нажатии Alt + F или через меню «Еще — Найти», является системным объектом ядра платформы. Оно не представлено в дереве объектов конфигурации как отдельная форма, которую можно отредактировать в Конфигураторе.
Разберем основные ограничения этого механизма:
=, в то время как другие режимы используют оператор LIKE. Управление этим поведением на уровне стандартного окна полностью закрыто для вмешательства.Поскольку прямого способа настройки не существует, рассмотрим альтернативные методы реализации требуемого функционала.
Наиболее корректный с точки зрения современной разработки способ — это перехват стандартного действия и замена его собственной логикой. Мы можем создать свою команду, назначить ей сочетание клавиш Alt + F и вызывать свою мини-форму поиска.
Рассмотрим по шагам, как это реализовать:
ФормаСписка документов РеализацияТоваровУслуг).СвойПоиск, и устанавливаем для неё сочетание клавиш Alt + F.Пример кода для установки поиска по точному совпадению через программный фильтр ДинамическийСписок:
&НаКлиенте
Процедура СвойПоиск(Команда)
// Вызываем ввод значения у пользователя
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВводаТекстаПоиска", ЭтотОбъект);
ПоказатьВводЗначения(ОписаниеОповещения, "", "Введите текст для поиска по точному совпадению");
КонецПроцедуры
&НаКлиенте
Процедура ПослеВводаТекстаПоиска(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
УстановитьПоискПоТочномуСовпадению(Результат);
КонецПроцедуры
&НаСервере
Процедура УстановитьПоискПоТочномуСовпадению(ЗначениеПоиска)
// Находим или создаем элемент отбора
ОбщееУсловие = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОбщееУсловие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); // Пример поиска по номеру
ОбщееУсловие.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОбщееУсловие.ПравоеЗначение = ЗначениеПоиска;
ОбщееУсловие.Использование = Истина;
ОбщееУсловие.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
КонецПроцедуры
Если ваша цель — не заменить окно, а сделать поиск в строке над списком (SearchControl) более предсказуемым, проанализируем свойства динамического списка в Конфигураторе.
Выясним причину, по которой поиск может работать медленно или неточно. В свойствах элемента формы Список есть раздел «Состав поиска». Здесь можно жестко ограничить поля, по которым платформа будет искать данные.
Номер, Дата, Контрагент).Проанализируем ситуацию: пользователю часто удобнее не вызывать диалоговое окно, а видеть поле ввода сразу на форме. Это стандартная практика для современных конфигураций на базе 1С:ERP и 1С:КА.
Разберем шаги по созданию такой панели:
Строка).ПриИзменении.ПараметрыОтбора или ФиксированныеНастройки динамического списка.Пример реализации быстрого отбора:
&НаСервере
Процедура ПолеПоискаПриИзмененииНаСервере()
ЭлементОтбора = Неопределено;
ПолеПоиска = Новый ПолеКомпоновкиДанных("Номер");
// Ищем существующий отбор по этому полю
Для Каждого Элемент Из Список.Отбор.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") И Элемент.ЛевоеЗначение = ПолеПоиска Тогда
ЭлементОтбора = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеПоиска;
КонецЕсли;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // Гарантируем точное совпадение
ЭлементОтбора.ПравоеЗначение = Объект.РеквизитПоиска;
ЭлементОтбора.Использование = ЗначениеЗаполнено(Объект.РеквизитПоиска);
КонецПроцедуры
Посмотрим на ситуацию шире. Иногда поведение поиска в списках меняется из-за включенного полнотекстового поиска. Если для объекта включено ИспользоватьПолнотекстовыйПоиск, платформа может пытаться использовать индексы ППД даже в обычных списках.
Проанализируем настройки:
Комментарий или ДополнительныеСведения) не стоит индексация для полнотекстового поиска, если она там не нужна.Подводя итог, можно утверждать: штатной «галочки» в настройках 1С для изменения режима окна Alt+F не существует. Платформа 8.3.24 сохраняет за собой контроль над этим интерфейсом. Для реализации жесткого условия «Только точное совпадение» мы рекомендуем использовать сочетание создания расширения с переопределением горячих клавиш и добавление визуальных полей фильтрации непосредственно в шапку формы списка. Это обеспечит лучший пользовательский опыт и гарантированную точность поиска.