Как поменять guid в 1с?
Здравствуйте! Подскажите пожалуйста, могу ли я как-нибудь через обработку поменять GUID элемента? В Реквизитах я не нашел такого , смог только командой УникальныйИдентификатор() вытянуть.

- Вопрос задан более трёх лет назад
- 7594 просмотра
Простой 7 комментариев
- Вконтакте




Причина: Что такое ссылка справочника? Это тип справочника и этот самый GUID. Другой GUID — это другая ссылка. Если в базе есть справочники, документы или другие сущности, которые ссылаются на ваш элемент справочника, то даже после физического удаления из базы, когда все эти ссылки станут «битыми», из каждой из них можно узнать изначальный GUID.
Выход: А если очень нужно? Если нужно, то можно. Вам нужно с помощью функции НайтиПоСсылкам() или собственного кода найти все ссылки на ваш элемент. Далее создать в базе новый элемент с данными оригинального элемента, которому с помощью УстановитьСсылкуНового() установить ссылку сформированную с помощью ПолучитьСсылку() на базе вашего GUID, а потом записать. И наконец, сделать замену во всей базе по ранее полученному списку старой ссылки на новую, после чего старый элемент можно полностью удалить из базы.
1С. Тематические записки. им xzorkiix
Вводная: в типовых правилах перехода есть правило конвертации объекта (ПКО) ПервичныйДокументИзСтруктуры. Для типового правила не предусмотрен поиск по GUID и следовательно его установка.
По одному из правил переноса остатков требовалось формировать Первичные документы с GUID исходных документов для возможности использования в будущей интеграции с другими системами.
1. Добавить свойство ПКО с признаком «выгружать в параметр» и «использовать при поиске» — допустим имя УникальныйИдентификатор.
2. В обработчике свойства Перед выгрузкой пишем.
3. Так в некоторых правилах обмена GUID может не требоваться, или в будущем будет принято решение отказаться от реализации. То флаг «Поиск по идентификатору» в свойствах ПКО не включаем (напомню источник у нас структура). И установим следующее правило поиска.
В будущем когда нужно будет отменить выгрузку ГУИД нужно будет передавать пустое значение.
Замена идентификаторов в УТП

Перед заменой идентификаторов необходимо, чтобы по номенклатуре, для которой будет выполняться замена, не было активных заказов маркетплейсов в 1С, т.е. чтобы все заказы с данной номенклатурой были отгружены и по ним была отражена реализация.
Если происходит замена номенклатуры для идентификатора, то необходимо, чтобы не было активных заказов для обоих номенклатур: для номенклатуры, которая будет заменяться, и для номенклатуры, к которой будет привязан освобождённый идентификатор.
Замена номенклатуры для одного идентификатора (перепривязка идентификатора к другой номенклатуре)
Если для Идентификатора на данный момент передаются данные по Номенклатуре 1, а надо, чтобы данные передавались по Номенклатуре 2, то порядок шагов следующий:
1. Создать и провести документ УТП с видом операции «Отключение доступности на площадке» для Номенклатуры 1. С помощью данного действия на маркетплейс отправляется нулевой остаток.

2. Создать и провести документ УТП с видом операции «Замена идентификаторов товаров на торговой площадке» для Номенклатуры 1 и заменить идентификатор на любой не существующий. Это необходимо, чтобы освободить имеющийся идентификатор для дальнейшей привязки к Номенклатуре 2.

3. Создать и провести документ УТП с видом операции «Публикация товаров на площадке» для Номенклатуры 2 с верным идентификатором.

Замена идентификаторов для двух номенклатур (если нужно «поменять местами» идентификаторы для двух номенклатур)
По Номенклатуре 1 на данный момент передается остаток на Идентификатор 1 и по Номенклатуре 2 передается остаток на Идентификатор 2. Требуется, чтобы данные передавались по Номенклатуре 1 на Идентификатор 2 и по Номенклатуре 2 на Идентификатор 1.
В таком случае необходимо сделать документ УТП с видом операции «Замена идентификаторов товаров на торговой площадке» для двух номенклатур одновременно и выполнить обоюдную замену.
Для Номенклатуры 1 поменять Идентификатор 1 на Идентификатор 2, а для Номенклатуры 2 поменять Идентификатор 2 на Идентификатор 1

Замена идентификатора для одной номенклатуры (если нужно заменить идентификатор для номенклатуры на новый)
Если по Номенклатуре на данный момент передается остаток на Идентификатор 1, а требуется чтобы данные передавались на Идентификатор 2, то необходимо сделать документ УТП с видом операции «Замена идентификаторов товаров на торговой площадке» для Номенклатуры и поменять Идентификатор 1 на Идентификатор 2

Особенности замены идентификаторов для маркетплейсов Wildberries и Aliexpress
На маркетплейс Wildberries данные по остаткам передаются по Штрихкоду товара.
При создании УТП с видом операции «Замена идентификаторов товаров на торговой площадке» необходимо обязательно заменять «Штрихкод».

Для маркетплейса Aliexpress идентификатор формируется из значений «AliExpress product ID (seller SPU ID)» и «Артикул/Штрихкод (seller SKU ID)».
При замене Идентификатора необходимо обязательно изменять «SKU ID (sku_code)» и «Product ID».
Изменить идентификатор объекта
ДокументСсылка.<Имя документа>.УникальныйИдентификатор (DocumentRef.<Имя документа>.UUID)
ДокументСсылка.<Имя документа> (DocumentRef.<Имя документа>)
УникальныйИдентификатор (UUID)
Синтаксис:
УникальныйИдентификатор()
Возвращаемое значение:
Получает уникальный идентификатор ссылки.
Ссылка может быть получена из уникального идентификатора с помощью метода менеджера ПолучитьСсылку.
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
См. также:
ДокументМенеджер, метод ПолучитьСсылку
(16) у нас пару раз в месяц такое происходит.
Бухи поняли, что гораздо быстрее вводить документ, если скопировать старый и в нем поменять всего несколько полей.
Теперь внимание: если бух случайно вместо кнопки «копировать» нажмет кнопку «открыть», (а это ему как два пальца об асфальт) получается твоя ситуация.
Ответ он всегда на поверхности.
(23) «В результате после очередного сохранения конфигурации был создан еще 1 предопределенный элемент с таким же гуидом» — шалишь? Я еще допускаю одинаковый гуид для разных типов объектов, но в пределах одного типа это невозможно — гуид это ключ!
У меня при обмене баз, когда стоит синхронизация по гуид, такая хрень получается:
Ошибка при загрузке данных: <Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4795)>: Ошибка записи объекта
ТипОбъекта = Виды контактной информации
Объект = Телефон физ.лица служебный
ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Ошибка при попытке вставки записи с неуникальным значением ссылки.
Microsoft OLE DB Provider for SQL Server: Нарушено «PK___Referen__AC8ED0C40F7C1D9B» ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект «dbo._Reference49». Повторяющееся значение ключа: (0xb9493d07ec2909514bd24a29a071e1b7).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2627, line=1
«Гуид предопределенного элемента прописан внутри конфигурации» — если сам не пропишешь, типа:
Процедура ЗаполнитьПредопределенныхПартнеров() Экспорт
// СправочникОбъект = Справочники.Партнеры.НашеПредприятие.ПолучитьОбъект(); // возмем из базы Кайрос. 10.01.2012 МВ.
СправочникСсылка = Справочники.Партнеры.ПолучитьСсылку(Новый УникальныйИдентификатор(«97403c2a-4260-481c-8835-1ea87e51a4aa»));
СправочникОбъект = СправочникСсылка.ПолучитьОбъект();
Если СправочникОбъект = Неопределено Тогда
СправочникОбъект = Справочники.Партнеры.НашеПредприятие.СоздатьЭлемент();
СправочникОбъект.УстановитьСсылкуНового(СправочникСсылка);
КонецЕсли;
СправочникОбъект.ДатаРегистрации = Дата(1980, 1, 1);
Попытка
СправочникОбъект.Записать();
Исключение
Сообщить(«Не удалось записать партнера НашеПредприятие» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
И то, это помогает для вновь создаваемой базы. Если предопределенный объект пришел с обновлением, то задать ему нужный гуид таким методом не получается. Может кто-то как-то исхитрился менять на нужный гуид?