Как рассчитать идентификатор объекта и вывести его в отдельном поле выгрузки?
Конвертация функциями 1С
Здесь может потребоваться много разных функций, каждая из которых отвечает за свой тип идентификатора:
UUID (он же _IDRRef в SQL)
На этапе дополнительной обработки источника есть возможность использовать предопределенную функцию “Уникальный идентификатор”, которая возвращает нам GUID по ссылке. Но иногда нужна именно ссылка, как она есть в базе данных, т.е. UUID. В MS SQL Он называется _IDRRef. Отличаются они не сильно, просто переставляются сегменты идентификатора местами. Вот так :
Также UUID можно просто рассчитать следующей формулой на языке 1С :
UUID=Прав(ПолучитьНавигационнуюСсылку(Запись.Ссылка),СтрДлина(ПолучитьНавигационнуюСсылку (Запись.Ссылка))-СтрНайти(ПолучитьНавигационнуюСсылку (Запись.Ссылка),"="));
Просто поместите правую часть формулы в поле “Обработчик”. Вот так:
Также начиная с версии 3.1.1.5 для расчета uuid вы можете просто воспользоваться предопределенной функцией Ссылка SQL (_IDRRef)
Uniqueidentifier в SQL
начиная с версии 3.1.1.5 доступна функция для расчета аналога поля типа Uniqueidentifier в SQL. Как если бы вы написали
Вы можете просто воспользоваться предопределенной функцией Уникальный идентификатор SQL (ВЕРХНИЙ регистр) или Уникальный идентификатор SQL (нижний регистр)
Навигационная ссылка 1С
Функция Навигационная ссылка доступна начиная с версии 3.1.1.5. Вернет вам навигационную ссылку объекта 1С. (например:e1cib/data/Справочник.Номенклатура?ref=b7b5bcaec56cc14411e6e9113ae74b22)
Способ конвертировать UUD из Базы SQL 1С в GUID (как его отдает 1С-функция - Уникальный идентификатор())
Открываете SQL Managment Studio
Подключаетесь к вашей базе 1С
И выполняете следующий код:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE function [dbo].[getStringUUID] (@binaryUUID uniqueidentifier) returns varchar(36) as begin declare @buffer varchar(36) select @buffer = replace(convert(varchar(36),@binaryUUID), '-', '') return right(@buffer, 8) + '-' + substring(@buffer, 21, 4) + '-' + substring(@buffer, 17, 4) + '-' + substring(@buffer, 7, 2) + substring(@buffer, 5, 2) + '-' + substring(@buffer, 3, 2) + substring(@buffer, 1, 2) + substring(@buffer, 11, 2) + substring(@buffer, 9, 2) + substring(@buffer, 15, 2) + substring(@buffer, 13, 2) end GO
Данный код, создаст функцию SQL: [dbo].[getStringUUID](), которую можно использовать так:
SELECT dbo.getStringUUID(_RecorderRRef) as _RecorderRRef_GUID_1C FROM [_1C_ERP].dbo.[_AccumRg98983] with(nolock)
В результате получим такой результат: