Как массово установить флаг «Продолжать поиск объекта, если не найден УИД» в 1С:Конвертация данных 2.1 и избежать дублирования данных?

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

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

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

Способ 1. Групповая обработка справочников для массовой простановки флага

Правила конвертации объектов (ПКО) в конфигурации «Конвертация данных 2.1» хранятся в соответствующем справочнике ПравилаКонвертацииОбъектов. Это значит, что флаг поиска — обычный реквизит справочника, и его можно изменить массово.

Проанализируем алгоритм массового изменения реквизита:

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

После этого флаг будет проставлен во всех выбранных правилах автоматизированно.

Почему автоматическая установка флага не всегда решает проблему дублей?

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

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

Особенности переноса предопределенных элементов

Если в базе-приемнике дублируются предопределенные объекты (справочники или перечисления), стандартного поиска по УИД недостаточно, так как в разных базах их УИД могут различаться, даже если имена элементов совпадают.

Рассмотрим 3 верных способа сопоставления предопределенных элементов:

1. Настройка сопоставления по имени предопределенного элемента
В правилах конвертации свойств (ПКС) добавьте выгрузку свойства ИмяПредопределенныхДанных (или наименования/кода) и установите для него флаг «Поиск». При загрузке 1С найдет существующий предопределенный элемент базы-приемника по его системному имени.

2. Использование «Конвертации значений»
Для справочников с фиксированным списком значений или перечислений сопоставление задается на закладке «Конвертация значений» внутри ПКО. Это позволяет жестко связать элемент источника с конкретным элементом приемника без использования механизмов поиска по УИД.

3. Программный поиск через обработчик «Поля поиска»
В обработчике события Поля поиска правила конвертации объектов можно явно переопределить поиск предопределенного элемента с помощью кода на языке 1С:


Если Источник.Предопределенный Тогда
    ИмяПредопределенного = Источник.ИмяПредопределенныхДанных;
    Если ЗначениеЗаполнено(ИмяПредопределенного) Тогда
        СсылкаНаОбъект = Справочники[ИмяСправочника][ИмяПредопределенного];
        ПрекратитьПоиск = Истина;
    КонецЕсли;
КонецЕсли;

Данный алгоритм проверяет, является ли выгружаемый объект предопределенным, находит соответствие в базе-приемнике по системному имени и прерывает дальнейший стандартный поиск, гарантированно исключая создание дубликатов.

← На главную