Как правильно связать документы в «Конвертации данных 2.0» по уникальному идентификатору (GUID)?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Понимание механизма поиска по GUID

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

Алгоритм настройки связи документов

Для решения вашей задачи — связки «Корректировки реализации» с уже существующим «Планируемым поступлением ДС» — выполните следующие действия:

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

Пример программной передачи ссылки

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


Значение = Источник.ДокументОснование;
// Указываем правило для конвертации ссылки
ИмяПКО = "ПланируемоеПоступлениеДС"; 

В этом случае при загрузке конвертация сама найдет нужный документ в приемнике по его GUID, так как для этого ПКО включен поиск по идентификатору.

Перенос движений документа

Если задача требует переноса не только реквизитов, но и движений документа, целесообразно использовать механизм параметров. Рассмотрим, как это реализовать:

В ПКО источника в обработчике «Перед выгрузкой» данных вы можете передать любые дополнительные значения через параметры. На стороне приемника в обработчике «После загрузки» объекта вы можете программно заполнить табличную часть движений:


// В обработчике ПослеЗагрузки объекта
РегНакопл = Объект.Движения.РегистрНакоплений;
РегНакопл.Записывать = Истина;
Движение = РегНакопл.Добавить();
// Заполняем данные регистра, используя параметры
ЗначениеПараметра = ПараметрыОбъекта.Получить("ИмяПараметра");
Движение.Сумма = ЗначениеПараметра.Сумма;

Что делать, если стандартный механизм не подходит?

В редких случаях, когда стандартных настроек недостаточно и требуется принудительно управлять XML-узлом для передачи уникального идентификатора, можно использовать ручное формирование узла в обработчике «При выгрузке»:


УзелСсылкиXML = СоздатьУзел("Ссылка");
УстановитьАтрибут(УзелСсылкиXML, "Нпп", НПП);
УзелГуид = ДобавитьУзел(УзелСсылкиXML, "Свойство");
УстановитьАтрибут(УзелГуид, "Тип", "Строка");
УстановитьАтрибут(УзелГуид, "Имя", "{УникальныйИдентификатор}");
КодЗаписатьЭлемент(УзелГуид, "Значение", ТвойУникальныйИдентификатор);
// Завершаем формирование узла
УзелСсылкиXML.ЗаписатьКонецЭлемента();

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

Краткий итог

Для корректной связки объектов:

← На главную