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