При работе с обменом данными часто возникают ситуации, когда требуется перенести всего один объект из одной базы 1С в другую. Стандартная обработка ВыгрузкаЗагрузкаXML не всегда предоставляет интуитивно понятный интерфейс для отбора конкретных записей, а ручное создание элемента приводит к генерации нового UUID, что нарушает целостность связей, например, при выгрузке товаров на сайт. Рассмотрим, как решить эту задачу профессионально.
Многие пользователи сталкиваются с тем, что в универсальной обработке ВыгрузкаЗагрузкаXML отсутствует явное поле для отбора конкретной ссылки. Это происходит потому, что обработка спроектирована для работы с правилами обмена (КД 2.0). Если вы используете штатные механизмы, но интерфейс не предлагает нужных опций, стоит обратить внимание на механизм правил конвертации объектов (ПКО). В этом случае мы можем наложить программный отбор, который отсеет все лишние данные, оставив только необходимый объект.
Если нам нужно выгрузить строго один элемент, мы можем модифицировать правила обмена. Для этого в обработчике Перед выгрузкой для нужного ПКО пропишем условие, которое запретит выгрузку всех объектов, кроме выбранного вами:
Если Объект.Ссылка <> СсылкаНаНужныйЭлемент Тогда
Отказ = Истина;
КонецЕсли;
Таким образом, обработка пройдется по справочнику, но запишет в файл XML только ту запись, ссылка которой совпадает с заданной.
Когда вы создаете объект вручную в целевой базе, 1С автоматически присваивает ему новый УникальныйИдентификатор. Если ваша задача — синхронизация с сайтом, где идентификатор выступает «ключом» для обновления информации, простой перенос «копированием данных» не поможет. Нам необходимо программно принудительно задать нужный UUID при создании элемента.
Для того чтобы объект в базе-приемнике получил именно тот идентификатор, который нам нужен, мы используем метод УстановитьСсылкуНового(). Это стандартный способ, который позволяет «подменить» идентификатор до момента записи объекта в базу данных. Рассмотрим, как это реализовать на практике:
UUID из исходной базы.Новый УникальныйИдентификатор("ваш-строковый-uuid").УстановитьСсылкуНового().Пример кода для реализации данного подхода:
// Предположим, у нас есть строковый UUID
СтрокаUUID = "3d5f1234-abcd-1234-abcd-1234567890ab";
НовыйИдентификатор = Новый УникальныйИдентификатор(СтрокаUUID);
// Создаем новый объект
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку(НовыйИдентификатор));
// Заполняем реквизиты
НовыйЭлемент.Наименование = "Тестовый товар";
НовыйЭлемент.Записать();
Важное примечание: Никогда не пытайтесь изменять UUID напрямую через инструменты работы с SQL или системные таблицы. Это приведет к нарушению ссылочной целостности базы данных и может вызвать критические ошибки в работе конфигурации.
В контексте обмена данными с сайтами следует помнить, что современные CMS не всегда опираются на внутренний UUID платформы 1С. Зачастую связка объектов происходит по:
XML_ID (внешний код).Если ваш сайт работает по стандарту CommerceML, убедитесь, что поле Ид заполнено корректно. Если же вы работаете через прямое API и жесткая привязка к внутреннему UUID 1С обязательна, используйте метод с УстановитьСсылкуНового(), описанный выше. Если и этот вариант затруднителен, можно подготовить файл XML вручную, скопировав структуру существующего элемента и подставив в него нужные данные и корректный Ref (ссылку).
Следуя этим рекомендациям, вы сможете без ошибок перенести необходимый элемент справочника, сохранив при этом его уникальный идентификатор и обеспечив корректную работу обмена данными с внешними системами.