Хранимая процедура ...
 
Уведомления
Очистить все

Хранимая процедура для перевода уникального идентификатора (УИД) в виде строки в бинарный вид 16:

1 Записи
1 Пользователи
0 Likes
432 Просмотры
10-150 Okolokompa Форум
 dom
(@dom)
Honorable Member
Присоединился: 5 лет назад
Записи: 200
Создатель темы  

// CREATE FUNCTION [dbo].[UID2Binary]
//(
// @p1 char(36)
//)
//RETURNS binary(16)
//AS
//BEGIN
// DECLARE @Result binary(16)

// SELECT @Result =
// CAST(CAST(( SUBSTRING(@p1,25,2)+
// SUBSTRING(@p1,27,2)+
//
// SUBSTRING(@p1,22,2)+
// SUBSTRING(@p1,20,2)+'-'+
//
// SUBSTRING(@p1,31,2)+
// SUBSTRING(@p1,29,2)+'-'+
//
// SUBSTRING(@p1,33,2)+
// SUBSTRING(@p1,35,2)+'-'+
//
// SUBSTRING(@p1,15,4)+'-'+
// SUBSTRING(@p1,10,4)+
// SUBSTRING(@p1,1,8)) as uniqueidentifier) as binary(16))
//
// RETURN @Result

//END
Функцию придумал не я, а позаимствовал с какого форума. Но ее пришлось доработать, она отказывалась работать, поле того, как разобрался - оказалось, что необходимо поменять местами вырезки из строки. После этого функция заработала.

Пример применения:
Подключаемся к другой базе SQL, находим в ней по УИ SQL объект - документ (преобразовав УИ из базы в УИ SQL вызвав хранимку: dbo.UID2Binary('"+Уи+"')), а в найденном документе получаем значение реквизита (rs.Fields(1).Value.GetValue(0)).

Conn = Новый COMОбъект ("ADODB.Connection");
Conn.CommandTimeOut = 300;
Попытка
Conn.Open("
|Provider=SQLOLEDB;
|Data Source =buh;
|Server= buh;
|Uid=1c;
|Pwd=-------;
|Database=-------;
|");
Исключение
#Если клиент Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
Возврат Истина;
КонецПопытки;

Если Ссылка.Метаданные().Имя = "ПоступлениеТоваровУслуг" Тогда
ИмяТаблицы = "_Document465";
Фл = "_Fld3113";
ИначеЕсли Ссылка.Метаданные().Имя = "ОприходованиеТоваров" Тогда
ИмяТаблицы = "_Document407";
Фл = "_Fld9783";
ИначеЕсли Ссылка.Метаданные().Имя = "СписаниеТоваров" Тогда
ИмяТаблицы = "_Document525";
Фл = "_Fld15400";
ИначеЕсли Ссылка.Метаданные().Имя = "ПеремещениеТоваров" Тогда
ИмяТаблицы = "_Document434";
Фл = "_Fld10962";
иначе
Возврат Истина;
КонецЕсли;

ТекстЗапроса = "
|SELECT dbo.getStringUUID(_IDRRef), "+Фл+"
|FROM "+ ИмяТаблицы +"
|WHERE (_IDRRef = dbo.UID2Binary('"+Уи+"'))";

RS = Новый COMОбъект ("ADODB.RecordSet");
RS.Open(ТекстЗапроса, Conn);

Пока rs.Eof()=0 Цикл
Возврат ?(rs.Fields(1).Value.GetValue(0)=1,Истина,Ложь);
rs.MoveNext();
КонецЦикла;

В итоге получаем зависимость от того, выставлен ли флаг "отражать в бухгалтерском учете" или нет.


   
Цитата
Поделиться: