Как правильно перенести иерархический справочник «Контрагенты» и избежать задвоения данных в Конвертации данных 2.0?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Анализ проблемы «фантомных» объектов и пустых ссылок

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

Настройка иерархии и полей поиска: разделяем группы и элементы

Главная ошибка при работе с иерархией в справочнике Контрагенты заключается в попытке использовать одни и те же поля поиска для папок (групп) и конечных элементов. У групп справочника 1С, как правило, отсутствует ИНН и КПП. Если вы установите в ПКО поиск по ИНН, то при поиске группы система всегда будет получать «Ложь» и создавать новую папку, что приведет к бесконечному задвоению иерархии.

Для решения этой задачи воспользуемся обработчиком «Поля поиска» в ПКО Контрагенты. Разберем код, который позволит системе гибко переключать логику поиска в зависимости от типа объекта:


Если СвойстваПоиска["ЭтоГруппа"] = Истина Тогда
    // Для папок ищем по наименованию внутри родителя
    СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа, Родитель";
Иначе
    // Для элементов используем уникальные налоговые идентификаторы
    СтрокаИменСвойствПоиска = "ИНН, КПП, ЭтоГруппа";
КонецЕсли;

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

Почему нельзя включать «Родителя» в стандартный поиск элементов?

Проанализируем ситуацию, когда в настройках ПКО на вкладке «Поля поиска» галочка Родитель установлена для всех объектов. Это создает рекурсивную зависимость: чтобы найти элемент, системе нужно сначала найти его родителя. Если в базе-приемнике иерархия была создана вручную или отличается от источника, поиск элемента по связке ИНН + Родитель не сработает, так как Родитель (ссылка) будет другим. В результате система создаст дубль контрагента в «правильной» с ее точки зрения папке, хотя такой контрагент уже есть в корне или в другой папке.

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

Особенности выгрузки из документов через «ВыгрузитьОбъект»

Выясним причину проблем при использовании программной выгрузки. Если вы используете в ПВД (Правила выгрузки данных) или в ПКС (Правила конвертации свойств) код ВыгрузитьОбъект = Истина, вы заставляете систему выгружать объект целиком в момент обращения к нему. Однако, если контрагент выгружается «внутри» документа, поля поиска могут отработать некорректно, если не настроено соответствующее ПКО.

Рассмотрим альтернативный вариант — использование функции ВыгрузитьПоПравилу. Это позволяет более гибко управлять процессом, особенно когда требуется передать специфические параметры или принудительно использовать определенное правило для групп.

Проблема со специфическими видами контрагентов (Государственные органы)

Иногда при переносе возникают ошибки с реквизитами, которые в базе-источнике выглядят как стандартные, а в приемнике имеют иную логику хранения. Проанализируем ситуацию с видом контрагента Государственный орган. В некоторых конфигурациях это значение перечисления ЮридическоеЛицо, но с установленным дополнительным флагом. При переносе важно проверить ПКО перечисления ВидыКонтрагентов.

Если в базе-приемнике отсутствует прямое соответствие виду «Государственный орган», необходимо в обработчике «ПередЗагрузкой» или «ПриЗагрузке» прописать алгоритм определения этого статуса. Например:


Если Объект.ВидКонтрагента = Перечисления.ВидыКонтрагентов.ЮридическоеЛицо Тогда
    // Дополнительная логика проверки ИНН или кода гос. органа
    Если Лев(Объект.ИНН, 4) = "7700" Тогда 
        // Пример логики для специфических организаций
    КонецЕсли;
КонецЕсли;

Чек-лист для успешного переноса иерархии без дублей

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

Соблюдение этих правил и использование программных обработчиков для разделения логики поиска групп и элементов позволит вам перенести справочник Контрагенты с полным сохранением иерархии и без возникновения дублей.

← На главную