Как принудительно передать и установить GUID объекта при синхронизации данных в КД 2.0?

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

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

Разберем механику передачи GUID через обработчик «При выгрузке»

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

Рассмотрим пошагово реализацию этого метода:

  1. Создаем объект ЗаписьXML для формирования структуры.
  2. Инициализируем начало элемента Ссылка.
  3. Внутри него создаем свойство с именем {УникальныйИдентификатор}.
  4. Записываем в это свойство строковое представление нашего GUID.
  5. Передаем сформированный XML-узел в приемник с помощью метода ЗаписатьБезОбработки.

Ниже представлен пример кода, который необходимо разместить в обработчике:


ГУИД = ВходящиеДанные.ГУИД;
УзелСсылкиXML = Новый ЗаписьXML;
УзелСсылкиXML.УстановитьСтроку();
УзелСсылкиXML.ЗаписатьНачалоЭлемента("Ссылка");

СтрокаЗаписи = XMLСтрока(УзелСсылки);
УзелСсылкиXML.ЗаписатьАтрибут("Нпп", СтрокаЗаписи);

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

УзелГуид.ЗаписатьНачалоЭлемента("Значение");
УзелГуид.ЗаписатьТекст(XMLСтрока(ГУИД));
УзелГуид.ЗаписатьКонецЭлемента();
УзелГуид.ЗаписатьКонецЭлемента();

Приемник.ЗаписатьБезОбработки(УзелГуид.Закрыть());
УзелСсылкиXML.ЗаписатьКонецЭлемента();
ИнформацияДляЗаписиВФайл = УзелСсылкиXML.Закрыть();
Приемник.ЗаписатьБезОбработки(ИнформацияДляЗаписиВФайл);

Важные замечания по настройке правил

Чтобы описанный метод сработал корректно, необходимо обратить внимание на следующие настройки в Конвертация данных 2.0:

Альтернативный взгляд: когда GUID передается автоматически

Стоит помнить, что в штатном режиме Конвертация данных передает ссылки автоматически. Если ваша цель — чтобы документ в базе-приемнике получил ту же ссылку, что и в базе-источнике, часто достаточно того, чтобы объект-источник был полноценным объектом системы, а не просто набором данных из табличной части. Если же вы работаете именно с данными из ТЧ, то создание объекта через ПриВыгрузке с ручным внедрением GUID является наиболее надежным способом обеспечить уникальность.

Будьте осторожны: принудительная установка GUID — это мощный инструмент, который требует аккуратности. Если в базе-приемнике уже существует объект с таким идентификатором, но с другими данными, это может привести к непредсказуемым результатам при обмене. Всегда тестируйте обмен на копиях баз данных перед запуском в рабочую среду.

Анализируя ситуацию, мы видим, что использование XMLСтрока для преобразования УникальныйИдентификатор в текстовый формат является критически важным шагом, так как обмен данными ожидает именно строковое представление GUID для записи в XML.

← На главную