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