Как настроить поиск контрагента по нескольким полям в 1С:Управление торговлей 11.4?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Понимание механизма поиска в управляемых формах

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

Реализация через событие АвтоПодбор

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

  1. Откроем форму документа Реализация товаров и услуг в Конфигураторе.
  2. Найдем элемент формы, связанный с полем Контрагент.
  3. В свойствах этого элемента найдем событие АвтоПодбор и создадим его обработчик в модуле формы.

Теперь проанализируем логику, которую мы должны вложить в этот обработчик. Нам нужно отменить стандартный поиск системы, сформировать запрос к базе данных с учетом условий ИЛИ для двух полей, и передать результат в список выбора.


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

Создание серверной функции для поиска

Для корректной работы нам потребуется функция, выполняющая запрос к таблице справочника Контрагенты. Важно использовать конструкцию ПОДОБНО или ССЫЛКА для эффективного поиска по части строки.


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

Рекомендации по использованию расширений

Мы настоятельно рекомендуем реализовывать описанные выше изменения через Расширения конфигурации. Это позволит вам:

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

Альтернативные подходы

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

Таким образом, мы вместе разобрали, что для решения задачи поиска по нескольким полям не обязательно переписывать всю архитектуру поиска в 1С. Достаточно точечно обработать событие АвтоПодбор, направив запрос в нужную сторону. Это надежное и профессиональное решение, которое сделает работу пользователей в УТ 11.4 значительно комфортнее.

← На главную