Как настроить поля поиска контрагентов (ИНН, КПП, Наименование) в Конвертации Данных 2.1?

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

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

Ошибочный подход: использование перебора по номеру варианта

Часто разработчики пытаются реализовать поиск, опираясь на системную переменную НомерВариантаПоиска. Платформа делает до 10 попыток поиска, и код может выглядеть следующим образом:


Если НомерВариантаПоиска = 1 тогда
    СтрокаИменСвойствПоиска = "ИНН, КПП, Наименование";
ИначеЕсли НомерВариантаПоиска = 2 тогда
    СтрокаИменСвойствПоиска = "ИНН, КПП";
ИначеЕсли НомерВариантаПоиска = 3 тогда
    СтрокаИменСвойствПоиска = "ИНН";
Иначе
    СтрокаИменСвойствПоиска = "Наименование";
КонецЕсли;

Проанализируем этот алгоритм и выясним причину, почему так писать не следует. Если в базе-источнике ИНН у контрагента не заполнен, то на третьей попытке поиска система будет искать элемент с пустым ИНН в базе-приемнике. В результате обработка найдет первого попавшегося контрагента с незаполненным ИНН и перезапишет его данные. Это приведет к критическим ошибкам в учете.

Правильный подход: проверка коллекции СвойстваПоиска

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

Если текущий вариант поиска требует наличия ИНН, но само значение пустое, мы можем безопасно пропустить этот шаг, присвоив переменной СтрокаИменСвойствПоиска пустую строку. Получить значение свойства можно так: СвойстваПоиска["ИНН"].

Пример правильной логики для пропуска шагов поиска:


// Получаем значения из коллекции
ИНН = СвойстваПоиска["ИНН"];
КПП = СвойстваПоиска["КПП"];

// Проверяем заполненность ИНН
Если Не ЗначениеЗаполнено(ИНН) Тогда
    // Если ИНН пуст, ищем только по наименованию
    СтрокаИменСвойствПоиска = "Наименование";
ИначеЕсли ЗначениеЗаполнено(ИНН) И ЗначениеЗаполнено(КПП) Тогда
    СтрокаИменСвойствПоиска = "ИНН, КПП";
Иначе
    СтрокаИменСвойствПоиска = "ИНН";
КонецЕсли;

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

Дополнительные нюансы настройки поиска контрагентов

Разберем подробнее ряд важных особенностей, которые необходимо учитывать при конвертации контрагентов:

  1. Индивидуальные предприниматели (ИП): В отличие от юридических лиц, ИП не имеют КПП. Если вы жестко зададите строку поиска "ИНН, КПП", система не найдет предпринимателя. Обязательно проверяйте вид контрагента или сам факт наличия КПП в коллекции свойств перед формированием строки поиска.
  2. Группы (папки) контрагентов: Если справочник иерархический, помните, что у групп ИНН и КПП всегда пустые. В обработчике нужно проверять условие СвойстваПоиска["ЭтоГруппа"]. Для групп логика поиска должна быть иной — обычно их ищут по реквизитам Наименование и Родитель.
  3. Поиск по произвольному запросу: В сложных случаях (например, если требуется регистронезависимый поиск наименования или сложная фильтрация) прямо в обработчике можно написать собственный запрос к базе-приемнику. Если нужный элемент найден, его ссылку необходимо поместить в параметр СсылкаНаОбъект и обязательно установить ПрекратитьПоиск = Истина, чтобы платформа применила ваш результат и не запускала стандартный механизм.
  4. Чувствительность к пробелам: Стандартный поиск «Конвертации данных» использует строгое равенство. Если в реквизите закрался случайный пробел в начале или конце, объект не будет найден. Рекомендуется использовать функцию СокрЛП() для строковых реквизитов (ИНН, КПП) еще на этапе выгрузки — в правилах конвертации свойств (ПКС) перед передачей их в файл обмена.
  5. Приоритет UUID: Учитывайте, что если в настройках ПКО стоит галочка «Искать объект приемника по внутреннему идентификатору», и объект успешно сопоставляется по UUID, обработчик «Поля поиска» вообще не будет запущен.

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

← На главную