Как в 1С:КА 8.3 настроить расширенный поиск по точному совпадению по умолчанию?

Программист 1С:Комплексная автоматизация
← На главную

В процессе работы с большими списками документов в 1С:Комплексная автоматизация пользователи часто сталкиваются с необходимостью быстрого поиска. Стандартный механизм, вызываемый сочетанием клавиш Alt + F, предлагает три режима: «По началу строки», «По части строки» и «По точному совпадению». Часто возникает задача зафиксировать один из этих режимов (например, точное совпадение) как основной, чтобы исключить ошибки ввода или лишние клики. Давайте детально разберем, почему это нельзя сделать стандартными настройками и какие существуют технические способы решения данной задачи.

Анализ работы платформенного окна поиска

Прежде всего, проанализируем ситуацию с точки зрения архитектуры платформы. Диалоговое окно, которое открывается при нажатии Alt + F или через меню «Еще — Найти», является системным объектом ядра платформы. Оно не представлено в дереве объектов конфигурации как отдельная форма, которую можно отредактировать в Конфигураторе.

Разберем основные ограничения этого механизма:

Поскольку прямого способа настройки не существует, рассмотрим альтернативные методы реализации требуемого функционала.

Решение 1: Использование расширений для переопределения команды «Найти»

Наиболее корректный с точки зрения современной разработки способ — это перехват стандартного действия и замена его собственной логикой. Мы можем создать свою команду, назначить ей сочетание клавиш Alt + F и вызывать свою мини-форму поиска.

Рассмотрим по шагам, как это реализовать:

  1. Создаем Расширение для вашей конфигурации.
  2. В расширении находим нужную форму списка документов (например, ФормаСписка документов РеализацияТоваровУслуг).
  3. Добавляем новую команду формы, назовем её СвойПоиск, и устанавливаем для неё сочетание клавиш Alt + F.
  4. В обработчике команды прописываем открытие вспомогательной формы или установку отбора напрямую.

Пример кода для установки поиска по точному совпадению через программный фильтр ДинамическийСписок:


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

&НаКлиенте
Процедура ПослеВводаТекстаПоиска(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    УстановитьПоискПоТочномуСовпадению(Результат);
КонецПроцедуры

&НаСервере
Процедура УстановитьПоискПоТочномуСовпадению(ЗначениеПоиска)
    // Находим или создаем элемент отбора
    ОбщееУсловие = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОбщееУсловие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номер"); // Пример поиска по номеру
    ОбщееУсловие.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОбщееУсловие.ПравоеЗначение = ЗначениеПоиска;
    ОбщееУсловие.Использование = Истина;
    ОбщееУсловие.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
КонецПроцедуры

Решение 2: Настройка «Состава поиска» в динамическом списке

Если ваша цель — не заменить окно, а сделать поиск в строке над списком (SearchControl) более предсказуемым, проанализируем свойства динамического списка в Конфигураторе.

Выясним причину, по которой поиск может работать медленно или неточно. В свойствах элемента формы Список есть раздел «Состав поиска». Здесь можно жестко ограничить поля, по которым платформа будет искать данные.

Решение 3: Создание панели быстрых отборов

Проанализируем ситуацию: пользователю часто удобнее не вызывать диалоговое окно, а видеть поле ввода сразу на форме. Это стандартная практика для современных конфигураций на базе 1С:ERP и 1С:КА.

Разберем шаги по созданию такой панели:

  1. Добавляем на форму списка новое поле ввода (реквизит формы с типом Строка).
  2. Устанавливаем для него событие ПриИзменении.
  3. В коде события программно модифицируем ПараметрыОтбора или ФиксированныеНастройки динамического списка.

Пример реализации быстрого отбора:


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

Решение 4: Влияние полнотекстового поиска (ППД)

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

Проанализируем настройки:

Резюме для разработчика

Подводя итог, можно утверждать: штатной «галочки» в настройках 1С для изменения режима окна Alt+F не существует. Платформа 8.3.24 сохраняет за собой контроль над этим интерфейсом. Для реализации жесткого условия «Только точное совпадение» мы рекомендуем использовать сочетание создания расширения с переопределением горячих клавиш и добавление визуальных полей фильтрации непосредственно в шапку формы списка. Это обеспечит лучший пользовательский опыт и гарантированную точность поиска.

← На главную