SQL функция, позволяющая получить из идентификатора, хранимого на уровне таблицы, получить ГУИД 1С, который можно преобразовать в объект конфигурации Спорадически приходится возвращаться к задаче получения ГУИД-а для 1С средствами прямого SQL, например, в связи интеграцией с системами не на платформе 1С. Исторически правила формирования ГУИД несколько раз менялись, поэтому мы решили вынести его получение в отдельную функцию на сервере так, чтоб она могла работать централизовано и универсально. Ниже представлен код:
CRE ATE FUNCTION [dbo].[Get_1C_GUID_From_IDRRef] (@IDRRef binary(16))
--получает ГУИД 1С (вида 9299c542-7d64-11e1-8dde-000c2989577c) из значения SQL binary поля IDRRef (вида 0x8DDE000C2989577C11E17D649299C542)
RETURNS nchar(36)
BEGIN
declare @IDRRef_String nchar(32);
SET @IDRRef_String = substring(sys.fn_sqlvarbasetostr(@IDRRef),3,32);
RETURN(
substring(@IDRRef_String,25,8) + '-' +
substring(@IDRRef_String,21,4) + '-' +
substring(@IDRRef_String,17,4) + '-' +
substring(@IDRRef_String,1,4) + '-' +
substring(@IDRRef_String,5,12)
);
END;
GO
Показать
Для работы необходимо запустить код на сервере, в результате создастся функция в нужной базе. После чего к ней можно будет обращаться, как в примере на скриншоте.
sel ect top 10
convert( uniqueidentifier, t._IDRRef ) as Ref_ID,
fr om dbo.[_Document838] as t
Попробовали, Ваш вариант не возвращает GUID 1С, а возвращает что-то другое, возможно, это то как раньше GUID генерировался, выше писали, что правила его формирования несколько раз менялись. Результат проверки:
Это binary которое хранится в БД SQL --0x877B1008B1715F6811E573E62CC04775
Это то, что возвращает Get_1C_GUID_From_IDRRef --2cc04775-73e6-11e5-877b-1008b1715f68
А это то, что возвращает Ваш вариант convert( uniqueidentifier, t._IDRRef ) --08107B87-71B1-685F-11E5-73E62CC04775
Как видите группы символов переставлены в Вашем случае иначе чем у нас, соответственно у Вас не получится GUID для 1С.