Как организовать поиск по ИНН в списке партнеров в 1С:Управление торговлей 11 при раздельном учете партнеров и контрагентов?

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

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

Причины поведения системы и архитектурные ограничения

Проанализируем структуру хранения данных в типовых конфигурациях (1С:Управление торговлей 11, 1С:ERP, 1С:Комплексная автоматизация):

  1. Модель данных «один ко многим»: Справочник Партнеры предназначен для ведения управленческого учета (сети, холдинги, торговые марки), а справочник Контрагенты хранит регламентированные данные (ИНН, КПП, ОГРН, банковские счета). Одному партнеру может соответствовать несколько контрагентов. По этой причине реквизит ИНН хранится исключительно в справочнике Контрагенты.
  2. Ограничения динамических списков: Если попытаться соединить партнеров с контрагентами в основном тексте запроса динамического списка, строки партнеров начнут двоиться при наличии нескольких юридических лиц у одного партнера. Группировка же записей (СГРУППИРОВАТЬ ПО) или соединение с агрегированными подзапросами в динамических списках отключает порционную динамическую подгрузку данных и существенно замедляет открытие формы.
  3. Специфика иерархии: Справочник Партнеры является иерархическим. При установке отбора на динамический список по списку ссылок узлы-родители могут скрываться, если они не попали в выборку, что нарушает дерево отображения. Для корректной работы со структурой подчиненности используется регистр сведений ИерархияПартнеров.

Способ 1. Добавление поля поиска и отбора через расширение

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

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

Посмотрим на пример серверной процедуры установки отбора:


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

Если на предприятии используется сложная иерархия партнеров (головные компании, обособленные подразделения), запрос можно дополнить соединением с регистром сведений ИерархияПартнеров, чтобы в результат отбора попадали вышестоящие родительские узлы.

Способ 2. Автоподбор партнера по ИНН в документах

Для ускорения ввода первичных документов удобно научить поле выбора партнера распознавать ввод ИНН. Для этого переопределим обработчик ОбработкаПолученияДанныхВыбора в модуле менеджера справочника Партнеры:

  1. Анализируем входящую строку поиска: если она состоит только из цифр и ее длина соответствует ИНН (от 9 до 12 символов), выполняем поиск по контрагентам.
  2. Формируем список значений партнеров, привязанных к найденным контрагентам, и передаем его в параметр ДанныеВыбора.
  3. Устанавливаем СтандартнаяОбработка = Ложь, чтобы система не выполняла повторный поиск по наименованию партнера.

Альтернативные варианты без доработки кода

Если внесение изменений в конфигурацию не планируется, рассмотрим организационные и штатные возможности:

  1. Использование полнотекстового поиска: При регулярном обновлении индекса полнотекстового поиска глобальный поиск программы или поиск по форме может находить связанные объекты. Однако этот метод требует стабильного выполнения фонового регламентного задания индексации.
  2. Ввод документов от контрагента: При заполнении реквизитов документа менеджер может сначала выбрать поле Контрагент (где штатно доступен поиск по ИНН), после чего связанный Партнер подставится в документ автоматически.
  3. Отключение функциональной опции: Если учет холдингов и сетевых структур компании не требуется, а связь между партнером и контрагентом всегда строго «один к одному», функциональную опцию разделения партнеров и контрагентов в настройках системы можно отключить. В этом случае синхронизация сущностей восстанавливается, а колонка ИНН становится доступной непосредственно в общем списке.
← На главную