Как настроить поиск по ИНН при подборе клиентов в 1С:Комплексная автоматизация и 1С:ERP?

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

При работе в современных конфигурациях на платформе 1С:Предприятие 8.3, таких как 1С:Комплексная автоматизация 2, 1С:ERP Управление предприятием 2 или 1С:Управление торговлей 11, пользователи часто сталкиваются с неочевидным поведением системы при поиске клиентов. Типичная ситуация: в настройках программы отключено независимое ведение партнеров и контрагентов (снят соответствующий флажок), однако при попытке подобрать клиента в документ «Заказ клиента» или «Реализация товаров и услуг» система упорно открывает справочник «Партнеры», в котором полностью отсутствует поле ИНН. Из-за этого менеджеры не могут быстро найти клиента по его налоговому идентификатору через стандартное диалоговое окно поиска.

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


Выясняем причину: почему ИНН «исчезает» из формы поиска?

Для того чтобы понять корень проблемы, проанализируем структуру хранения данных в ERP-системах 1С. Архитекторы конфигураций разделили информацию о клиентах на два независимых контура:

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

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

Однако в документах оптовых продаж (таких как «Заказ клиента») ключевым аналитическим разрезом в поле «Клиент» всегда выступает элемент справочника Справочники.Партнеры. Когда менеджер нажимает кнопку «Показать все» или кнопку выбора в поле ввода, система открывает стандартную форму выбора справочника «Партнеры». Поскольку у самого партнера реквизита ИНН нет, добавить эту колонку на форму через меню «Еще — Изменить форму» стандартными средствами невозможно.


Способ 1. Использование штатного механизма ввода по строке (без открытия формы списка)

Рассмотрим малоизвестную особенность типового функционала. Разработчики 1С предусмотрели возможность поиска партнеров по ИНН, но этот механизм работает строго при вводе текста непосредственно в поле «Клиент» в самом документе.

Давайте разберем по шагам, как это работает на практике:

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

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


Способ 2. Обходной путь через справочник «Контрагенты» и «Избранное»

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

Выполним следующие действия:

  1. Через главное меню или «Функции для технического специалиста» (ранее «Все функции») найдите и откройте справочник Справочник.Контрагенты.
  2. В открывшемся окне списка в заголовке формы нажмите на иконку «Звездочка» (Добавить в избранное).
  3. Теперь у каждого менеджера на панели инструментов (или в левом верхнем углу экрана) в меню «Избранное» будет быстрый доступ к полному списку контрагентов.
  4. В этом списке колонка ИНН присутствует по умолчанию. Менеджер может ввести ИНН в строку поиска, быстро найти нужного контрагента, открыть его карточку, посмотреть связанного партнера или использовать эту информацию для быстрого заполнения документа.

Способ 3. Программная доработка системы через Расширение конфигурации

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

Проанализируем два варианта технической реализации такого расширения.

Вариант А. Изменение текста запроса динамического списка формы выбора

Этот вариант является наиболее изящным. Мы добавим левое соединение со справочником «Контрагенты» прямо в схему компоновки данных (или запрос) динамического списка формы выбора справочника «Партнеры».

Важная оговорка: этот метод корректно работает только в том случае, если в вашей базе действительно отключено разделение партнеров и контрагентов (связь строго 1:1). Если у одного партнера может быть несколько контрагентов с разными ИНН, левое соединение может привести к дублированию строк в динамическом списке партнеров.

Выполните следующие шаги в конфигураторе:

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

ВЫБРАТЬ
    СправочникПартнеры.Ссылка КАК Ссылка,
    СправочникПартнеры.Наименование КАК Наименование,
    СправочникПартнеры.ПометкаУдаления КАК ПометкаУдаления,
    СправочникПартнеры.Предопределенный КАК Предопределенный,
    ЕСТЬNULL(ТаблицаКонтрагенты.ИНН, "") КАК ИНН,
    ЕСТЬNULL(ТаблицаКонтрагенты.КПП, "") КАК КПП
ИЗ
    Справочник.Партнеры КАК СправочникПартнеры
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК ТаблицаКонтрагенты
        ПО ТаблицаКонтрагенты.Партнер = СправочникПартнеры.Ссылка
        И НЕ ТаблицаКонтрагенты.ПометкаУдаления

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

Вариант Б. Реализация быстрого поиска по ИНН через программный отбор

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

Рассмотрим этот алгоритм подробнее:

  1. В расширении откройте форму выбора справочника «Партнеры».
  2. Добавьте на форму новое строковое поле ввода с именем ПоискПоИНН.
  3. Для созданного поля добавьте событие ПриИзменении.
  4. В модуле формы напишите обработчик, который будет искать подходящих контрагентов на сервере и накладывать отбор на динамический список партнеров по найденным ссылкам.

Пример программного кода для реализации этого механизма:


&НаКлиенте
Процедура ПоискПоИННПриИзменении(Элемент)
    // Запускаем серверный поиск партнеров по введенному ИНН
    ВыполнитьФильтрациюПоИНН(ПоискПоИНН);
КонецПроцедуры

&НаСервере
Процедура ВыполнитьФильтрациюПоИНН(Знач ТекстИНН)
    // Очищаем предыдущие отборы по полю "Ссылка"
    ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор.Элементы, "Ссылка");
    
    Если ПустаяСтрока(ТекстИНН) Тогда
        Возврат; // Если поле поиска пустое, просто сбрасываем фильтр
    КонецЕсли;
    
    // Получаем массив партнеров, чьи контрагенты имеют подходящий ИНН
    МассивПартнеров = ПолучитьПартнеровПоИНН(ТекстИНН);
    
    // Накладываем новый отбор типа "Ссылка В Списке"
    Если МассивПартнеров.Количество() > 0 Тогда
        ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
            Список,
            "Ссылка",
            МассивПартнеров,
            ВидСравненияКомпоновкиДанных.ВСписке,
            "Поиск по ИНН контрагента",
            Истина
        );
    Иначе
        // Если ничего не нашли, передаем пустую ссылку, чтобы список очистился
        ПустойМассив = Новый Массив;
        ПустойМассив.Добавить(Справочники.Партнеры.ПустаяСсылка());
        ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
            Список,
            "Ссылка",
            ПустойМассив,
            ВидСравненияКомпоновкиДанных.ВСписке,
            "Поиск по ИНН контрагента",
            Истина
        );
    КонецЕсли;
КонецПроцедуры

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

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


Резюме

Мы проанализировали проблему поиска по ИНН в решениях ERP-класса от 1С. Архитектурное разделение партнеров и контрагентов часто ставит в тупик начинающих пользователей и консультантов. Тем не менее, как мы убедились, данная задача успешно решается:

← На главную