Как реализовать поиск партнера по ИНН контрагента в поле формы?

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

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

Понимание проблемы: почему не работает стандартный поиск?

Многие разработчики ошибочно полагают, что достаточно включить полнотекстовый поиск или настроить Ввод по строке в свойствах справочника. Однако в типовых конфигурациях (УТ 11, ERP, КА), построенных на базе Библиотеки Стандартных Подсистем (БСП), поиск по ИНН работает иначе.

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

Разбираем механизм реализации поиска

Чтобы повторить это поведение, нам необходимо перехватить событие ОбработкаПолученияДанныхВыбора в модуле менеджера справочника Партнеры. Это событие позволяет нам полностью контролировать список, который выводится пользователю в выпадающем списке при вводе текста.

Шаги по реализации функционала

  1. Откройте модуль менеджера справочника Партнеры.
  2. Добавьте процедуру обработки события ОбработкаПолученияДанныхВыбора.
  3. Внутри процедуры необходимо реализовать проверку введенной строки на соответствие маске ИНН (обычно это 10 или 12 цифр).
  4. Если введенная строка является ИНН, выполните запрос к справочнику Контрагенты.
  5. Свяжите найденных контрагентов с их партнерами и сформируйте массив или список значений для возврата в параметр ДанныеВыбора.

Пример программной реализации

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


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

Важные рекомендации для разработчиков

При реализации данного механизма помните о следующих нюансах:

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

← На главную