При переносе данных между конфигурациями 1С часто возникает задача, когда необходимо не просто создать новый объект в целевой базе, а найти уже существующий документ и привязать его к переносимым данным. В данной статье мы разберем, как реализовать поиск по GUID (уникальному идентификатору) и как правильно передавать ссылки на документы, чтобы избежать создания дублей.
В «Конвертации данных 2.0» существует встроенный механизм сопоставления объектов. Когда вы устанавливаете в ПКО (Правилах Конвертации Объектов) флаги «Искать по внутреннему идентификатору» и «Не замещать существующие объекты», система автоматически пытается найти в базе-приемнике объект, имеющий тот же GUID, что был у объекта-источника в момент выгрузки. Если объект найден, конвертация подставляет ссылку на него, а не создает новый элемент.
Для решения вашей задачи — связки «Корректировки реализации» с уже существующим «Планируемым поступлением ДС» — выполните следующие действия:
ПКО для документа «Планируемое поступление ДС». В настройках этого правила обязательно установите галочку «Искать по внутреннему идентификатору». Это критически важно для того, чтобы система понимала, что объекты нужно сопоставлять, а не дублировать.ПКС (Правилах Конвертации Свойств) реквизита, отвечающего за основание, укажите созданное ранее ПКО документа «Планируемое поступление ДС».ПКС.Если вам нужно передать конкретный реквизит, ссылающийся на другой документ, используйте следующий подход. В ПКС свойства «ДокументОснование» в обработчике «Перед выгрузкой» пропишите:
Значение = Источник.ДокументОснование;
// Указываем правило для конвертации ссылки
ИмяПКО = "ПланируемоеПоступлениеДС";
В этом случае при загрузке конвертация сама найдет нужный документ в приемнике по его GUID, так как для этого ПКО включен поиск по идентификатору.
Если задача требует переноса не только реквизитов, но и движений документа, целесообразно использовать механизм параметров. Рассмотрим, как это реализовать:
В ПКО источника в обработчике «Перед выгрузкой» данных вы можете передать любые дополнительные значения через параметры. На стороне приемника в обработчике «После загрузки» объекта вы можете программно заполнить табличную часть движений:
// В обработчике ПослеЗагрузки объекта
РегНакопл = Объект.Движения.РегистрНакоплений;
РегНакопл.Записывать = Истина;
Движение = РегНакопл.Добавить();
// Заполняем данные регистра, используя параметры
ЗначениеПараметра = ПараметрыОбъекта.Получить("ИмяПараметра");
Движение.Сумма = ЗначениеПараметра.Сумма;
В редких случаях, когда стандартных настроек недостаточно и требуется принудительно управлять XML-узлом для передачи уникального идентификатора, можно использовать ручное формирование узла в обработчике «При выгрузке»:
УзелСсылкиXML = СоздатьУзел("Ссылка");
УстановитьАтрибут(УзелСсылкиXML, "Нпп", НПП);
УзелГуид = ДобавитьУзел(УзелСсылкиXML, "Свойство");
УстановитьАтрибут(УзелГуид, "Тип", "Строка");
УстановитьАтрибут(УзелГуид, "Имя", "{УникальныйИдентификатор}");
КодЗаписатьЭлемент(УзелГуид, "Значение", ТвойУникальныйИдентификатор);
// Завершаем формирование узла
УзелСсылкиXML.ЗаписатьКонецЭлемента();
Однако помните, что этот метод является низкоуровневым и усложняет поддержку правил. Мы настоятельно рекомендуем использовать штатные настройки ПКО, так как они покрывают подавляющее большинство задач по синхронизации документов в 1С.
Для корректной связки объектов:
ПКО с включенным поиском по внутреннему идентификатору.ПКС, указывая соответствующие ПКО, и конвертация сама выполнит всю работу по поиску и подстановке ссылок в базу-приемник.