Как выгрузить один элемент справочника из 1С и сохранить его уникальный идентификатор (UUID)?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с обменом данными часто возникают ситуации, когда требуется перенести всего один объект из одной базы 1С в другую. Стандартная обработка ВыгрузкаЗагрузкаXML не всегда предоставляет интуитивно понятный интерфейс для отбора конкретных записей, а ручное создание элемента приводит к генерации нового UUID, что нарушает целостность связей, например, при выгрузке товаров на сайт. Рассмотрим, как решить эту задачу профессионально.

Почему не получается выбрать один элемент для выгрузки

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

Решение задачи через программный отбор

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


Если Объект.Ссылка <> СсылкаНаНужныйЭлемент Тогда
    Отказ = Истина;
КонецЕсли;

Таким образом, обработка пройдется по справочнику, но запишет в файл XML только ту запись, ссылка которой совпадает с заданной.

Проблема сохранения UUID при ручном переносе

Когда вы создаете объект вручную в целевой базе, 1С автоматически присваивает ему новый УникальныйИдентификатор. Если ваша задача — синхронизация с сайтом, где идентификатор выступает «ключом» для обновления информации, простой перенос «копированием данных» не поможет. Нам необходимо программно принудительно задать нужный UUID при создании элемента.

Программное создание элемента с заданным UUID

Для того чтобы объект в базе-приемнике получил именно тот идентификатор, который нам нужен, мы используем метод УстановитьСсылкуНового(). Это стандартный способ, который позволяет «подменить» идентификатор до момента записи объекта в базу данных. Рассмотрим, как это реализовать на практике:

  1. Сформируйте строковое представление UUID из исходной базы.
  2. В консоли кода или специальной обработке создайте новый объект справочника.
  3. Используйте конструктор Новый УникальныйИдентификатор("ваш-строковый-uuid").
  4. Передайте полученный идентификатор в метод УстановитьСсылкуНового().

Пример кода для реализации данного подхода:


// Предположим, у нас есть строковый UUID
СтрокаUUID = "3d5f1234-abcd-1234-abcd-1234567890ab";
НовыйИдентификатор = Новый УникальныйИдентификатор(СтрокаUUID);

// Создаем новый объект
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку(НовыйИдентификатор));

// Заполняем реквизиты
НовыйЭлемент.Наименование = "Тестовый товар";
НовыйЭлемент.Записать();

Важное примечание: Никогда не пытайтесь изменять UUID напрямую через инструменты работы с SQL или системные таблицы. Это приведет к нарушению ссылочной целостности базы данных и может вызвать критические ошибки в работе конфигурации.

Специфика обмена с сайтами и интернет-магазинами

В контексте обмена данными с сайтами следует помнить, что современные CMS не всегда опираются на внутренний UUID платформы 1С. Зачастую связка объектов происходит по:

Если ваш сайт работает по стандарту CommerceML, убедитесь, что поле Ид заполнено корректно. Если же вы работаете через прямое API и жесткая привязка к внутреннему UUID 1С обязательна, используйте метод с УстановитьСсылкуНового(), описанный выше. Если и этот вариант затруднителен, можно подготовить файл XML вручную, скопировав структуру существующего элемента и подставив в него нужные данные и корректный Ref (ссылку).

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

← На главную