Как реализовать быстрый поиск документа по части номера в 1С:Предприятие 8?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Стандартный механизм: поиск по любой части строки

Начиная с версии платформы 8.3.10, разработчики получили мощный инструмент управления автоподбором. Рассмотрим самый простой способ решения задачи, который не требует написания сложного программного кода. Основным параметром здесь выступает СпособПоискаСтрокиПриВводеПоСтроке.

Для реализации этой возможности проанализируем настройки поля ввода на форме. Если у нас есть поле, связанное с документом Заказ клиента, мы можем управлять поведением поиска через обработчик события АвтоПодбор. Однако платформа позволяет сделать это еще проще — на уровне метаданных или свойств конкретного элемента управления.

Разберем, как установить режим «Любая часть». Когда пользователь вводит текст в поле, система ищет вхождения этой строки в номере. Например, при вводе «123» система предложит и «0000123», и «УТ-123/5», и «ЦБ-00000123». Это значительно повышает удобство работы пользователя, избавляя его от необходимости помнить структуру префиксов организации.

Настройка поиска на уровне метаданных

Вместо того чтобы прописывать логику в каждой форме, где используется выбор заказа, мы можем задать глобальное поведение для объекта метаданных. Выполним следующие шаги:

  1. Откроем конфигуратор и найдем документ ЗаказКлиента.
  2. Перейдем на закладку «Данные».
  3. Нажмем кнопку «Ввод по строке».
  4. В открывшемся окне найдем параметр «Способ поиска при вводе по строке».
  5. Установим значение «Любая часть».

Важно: После этой настройки во всей системе поиск заказов клиента по номеру будет работать по принципу подстроки. Это наиболее эффективный путь, если такое поведение требуется повсеместно.

Программное управление в обработчике АвтоПодбор

Иногда нам нужно изменить способ поиска только в одной конкретной обработке или форме, не меняя глобальные настройки документа. В этом случае воспользуемся программным кодом. Рассмотрим пример настройки в обработчике события АвтоПодбор для поля ввода:


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

В данном фрагменте кода мы обращаемся к структуре ПараметрыПолученияДанных. Изменяя свойство СпособПоискаСтрокиПриВводеПоСтроке, мы даем платформе указание использовать алгоритм, аналогичный оператору LIKE '%Текст%' в SQL-запросах.

Проблема производительности: индексы и нагрузка

Проанализируем ситуацию с точки зрения нагрузки на сервер базы данных. Поиск «по началу строки» (например, LIKE '123%') эффективно использует индексы, так как СУБД быстро находит диапазон значений. Поиск по «любой части» (LIKE '%123%') заставляет систему выполнять полное сканирование индекса или даже всей таблицы, что при миллионах записей может привести к серьезным задержкам.

Чтобы минимизировать негативное влияние на производительность, рекомендуем выполнить следующие действия:

Расширенная кастомизация через ОбработкаПолученияДанныхВыбора

Бывают случаи, когда стандартного поиска «по части» недостаточно. Например, если нужно искать номер, игнорируя спецсимволы, или приоритетно показывать документы за текущий год. В таких ситуациях мы переходим к программированию в модуле менеджера документа.

Рассмотрим использование обработчика ОбработкаПолученияДанныхВыбора. Этот метод позволяет полностью перехватить процесс формирования списка выбора:


// В модуле менеджера документа ЗаказКлиента
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    // Если поиск идет по строке (номеру)
    Если Параметры.Свойство("СтрокаПоиска") И Не ПустаяСтрока(Параметры.СтрокаПоиска) Тогда
        
        СтандартнаяОбработка = Ложь; // Отключаем стандартный поиск
        
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 50
            |   ЗаказКлиента.Ссылка КАК Ссылка,
            |   ЗаказКлиента.Номер КАК Номер,
            |   ЗаказКлиента.Дата КАК Дата
            |ИЗ
            |   Документ.ЗаказКлиента КАК ЗаказКлиента
            |ГДЕ
            |   ЗаказКлиента.Номер ПОДОБНО &СтрокаПоиска";
            
        Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
        
        ТаблицаРезультатов = Запрос.Выполнить().Выгрузить();
        
        СписокВыбора = Новый СписокЗначений;
        Для Каждого Строка Из ТаблицаРезультатов Цикл
            СписокВыбора.Добавить(Строка.Ссылка, Строка.Номер + " от " + Формат(Строка.Дата, "ДФ=dd.MM.yyyy"));
        КонецЦикла;
        
        ДанныеВыбора = СписокВыбора;
        
    КонецЕсли;
    
КонецПроцедуры

Использование этого обработчика дает нам полный контроль. Мы можем добавить дополнительные фильтры (например, только по определенной организации или только по проведенным документам), что делает поиск не только быстрым, но и умным.

Интеллектуальный поиск в последних версиях платформы

Выясним причину, по которой поиск в современных версиях «1С:Предприятие 8.3» стал удобнее. Теперь платформа поддерживает поиск по нескольким словам. Если пользователь введет в поле 123 Иванов, система может автоматически попытаться найти документы, в номере которых есть «123», а в контрагенте — «Иванов». Это поведение базируется на механизме поиска по нескольким подстрокам и значительно сокращает время на навигацию в базе.

Подводя итог, можно сказать: для большинства задач достаточно установить свойство «Способ поиска при вводе по строке» в значение «Любая часть» в свойствах метаданных документа. Это «малокодовое» решение, которое закрывает 90% потребностей бизнеса в быстром поиске по номеру.

← На главную