Получение Уникального Идентификатора 1С из Ссылки SQL-запросом (_IDRRef to 1C UUID)
Ссылку 1С хранит в базе MS SQL в формате binary(16). Встроенное в MS SQL преобразование binary(16) в GUID (uniqueidentifier) идет по алгоритму, отличному от алгоритма 1С. Для того, чтобы из binary(16) получить ГУИД 1С, в запросе нужно произвести дополнительное преобразование.
CAST(CAST(REVERSE(SUBSTRING( [_IDRRef], 9, 8)) AS binary(8))+ SUBSTRING([_IDRRef], 1, 8) as uniqueidentifier)
Справочник _Reference47 взят для примера. Предварительно в нем создан элемент с принудительным Уникальным Идентификатором:
ГУИД = Новый УникальныйИдентификатор("a0e55759-35f1-400c-8169-e5edbc2486ba");
ТестЭлемент = Справочники.Тест.СоздатьЭлемент();
Ссылка = Справочники.Тест.ПолучитьСсылку(ГУИД);
ТестЭлемент.УстановитьСсылкуНового(Ссылка);
ТестЭлемент.Наименование = "Принудительный ГУИД";
ТестЭлемент.Записать();
ТестЭлемент = Справочники.Тест.СоздатьЭлемент();
Ссылка = Справочники.Тест.ПолучитьСсылку(ГУИД);
ТестЭлемент.УстановитьСсылкуНового(Ссылка);
ТестЭлемент.Наименование = "Принудительный ГУИД";
ТестЭлемент.Записать();
SQL вернул следующее:
запрос
SELECT [_IDRRef]
,_Description
,CAST([_IDRRef] as uniqueidentifier) GUID_SQL
,CAST(CAST(REVERSE(SUBSTRING( [_IDRRef], 9, 8)) AS binary(8))+ SUBSTRING([_IDRRef], 1, 8) as uniqueidentifier) GUID_1C
FROM [dbo].[_Reference47]
,CAST([_IDRRef] as uniqueidentifier) GUID_SQL
,CAST(CAST(REVERSE(SUBSTRING( [_IDRRef], 9, 8)) AS binary(8))+ SUBSTRING([_IDRRef], 1, 8) as uniqueidentifier) GUID_1C
FROM [dbo].[_Reference47]
результат (транспонирован)
_IDRRef 0x8169E5EDBC2486BA400C35F1A0E55759
_Description Принудительный ГУИД
GUID_SQL EDE56981-24BC-BA86-400C-35F1A0E55759
GUID_1C A0E55759-35F1-400C-8169-E5EDBC2486BA
Комментарии
Отправить комментарий