Получение Уникального Идентификатора 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]

результат (транспонирован)

_IDRRef         0x8169E5EDBC2486BA400C35F1A0E55759
_Description Принудительный ГУИД
GUID_SQL EDE56981-24BC-BA86-400C-35F1A0E55759
GUID_1C         A0E55759-35F1-400C-8169-E5EDBC2486BA



Комментарии

Популярные сообщения из этого блога

Can't parse inline keyboard button (Telegram bot)

ТаблицаФормы с гиперссылками в ячейках

Получение access token и refresh token для работы с API Яндекс.Маркета