powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CLR функция для 1С
15 сообщений из 40, страница 2 из 2
CLR функция для 1С
    #40108396
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если писать на C#, то функция очень простая, объявить массив 16 байт и составить строку из его элементов в нужной последовательности.
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108511
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select master.dbo.fn_varbintohexstr(MyBinary16Field) as ...
from ...

ЯННП, разве не это нужно ТСу ? Чем не подходит ?
Разве что поднять регистр, если надо.

Не знаю, с какой версии это работает. Вроде как с 2008 работает.
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108574
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
select master.dbo. fn_varbintohexstr (MyBinary16Field) as ...
from ...

ЯННП, разве не это нужно ТСу ? Чем не подходит ?
Разве что поднять регистр, если надо.

Не знаю, с какой версии это работает . Вроде как с 2008 работает.


ЯННПХЕЗБ

fn_varbintohexstr - undocummented unsupported function
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108676
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

Я немного упростил функцию

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
public static class BIN2GUID
{
    [SqlFunction(FillRowMethodName = "getUid_getRow")]
    public static IEnumerable getUid(byte[] c_guid)
    {
        return new UidsRecord[] { new UidsRecord(c_guid) };
    }


    public static void getUid_getRow(object obj, out SqlGuid c_guid)
    {
        UidsRecord o = (UidsRecord)obj;
        c_guid = new SqlGuid(o.c_guid);
    }


    public class UidsRecord
    {
        public byte[] c_guid;

        public UidsRecord(byte[] a_guid)
        {
            formatBytes(a_guid, out c_guid);
        }

        private void formatBytes(byte[] buffer1, out byte[] buffer2)
        {
            buffer2 = new byte[] {
                                   buffer1[15],
                                   buffer1[14],
                                   buffer1[13],
                                   buffer1[12],
                                   buffer1[11],
                                   buffer1[10],
                                   buffer1[9],
                                   buffer1[8],
                                   buffer1[0],
                                   buffer1[1],
                                   buffer1[2],
                                   buffer1[3],
                                   buffer1[4],
                                   buffer1[5],
                                   buffer1[6],
                                   buffer1[7]
            };
        }
    }

}



И

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[src]select top 1000
				x1.c_guid as fk_agr,
				x2.c_guid as fk_obj,
				x3.c_guid as fk_pgm,
				x4.c_guid as fk_rsk,
				ods.dbo.fn_bin2guid(_Fld7885RRef) as fk_ins,
				ods.dbo.fn_bin2guid(_RecorderRRef) as fk_reg,
				ods.dbo.fn_bin2guid(_Fld7885RRef) as fk_cnt
--				into #tmp1
	from STG.._InfoRg7879 t 
	cross apply ARC..fn_BIN2GUID(_Fld7880RRef) x1
	cross apply ARC..fn_BIN2GUID(_Fld7881RRef) x2
	cross apply ARC..fn_BIN2GUID(_Fld7882RRef) x3
	cross apply ARC..fn_BIN2GUID(_Fld7883RRef) x4

[/SRC]


Чтобы на каждое поле была своя функция.

Может я конечно зря это делаю, но мне думается, так удобней читать.

Однако я не силен Вашу функцию переписать в скалярную... Как это сделать?

Спасибо
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108693
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
select master.dbo.fn_varbintohexstr(MyBinary16Field) as ...
from ...

ЯННП, разве не это нужно ТСу ? Чем не подходит ?
Разве что поднять регистр, если надо.
Она же выдаёт совсем другие данные, в другом формате.
Код: sql
1.
2.
3.
4.
select master.dbo.fn_varbintohexstr(0x81791CC1DEEA434311EBC3D76298209B)
0x81791cc1deea434311ebc3d76298209b
--а нужно 
6298209B-C3D7-11EB-8179-1CC1DEEA4343
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108694
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
felix_ff,

Я немного упростил функцию

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
public static class BIN2GUID
{
    [SqlFunction(FillRowMethodName = "getUid_getRow")]
    public static IEnumerable getUid(byte[] c_guid)
    {
        return new UidsRecord[] { new UidsRecord(c_guid) };
    }


    public static void getUid_getRow(object obj, out SqlGuid c_guid)
    {
        UidsRecord o = (UidsRecord)obj;
        c_guid = new SqlGuid(o.c_guid);
    }


    public class UidsRecord
    {
        public byte[] c_guid;

        public UidsRecord(byte[] a_guid)
        {
            formatBytes(a_guid, out c_guid);
        }

        private void formatBytes(byte[] buffer1, out byte[] buffer2)
        {
            buffer2 = new byte[] {
                                   buffer1[15],
                                   buffer1[14],
                                   buffer1[13],
                                   buffer1[12],
                                   buffer1[11],
                                   buffer1[10],
                                   buffer1[9],
                                   buffer1[8],
                                   buffer1[0],
                                   buffer1[1],
                                   buffer1[2],
                                   buffer1[3],
                                   buffer1[4],
                                   buffer1[5],
                                   buffer1[6],
                                   buffer1[7]
            };
        }
    }

}



И

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
[src]select top 1000
				x1.c_guid as fk_agr,
				x2.c_guid as fk_obj,
				x3.c_guid as fk_pgm,
				x4.c_guid as fk_rsk,
				ods.dbo.fn_bin2guid(_Fld7885RRef) as fk_ins,
				ods.dbo.fn_bin2guid(_RecorderRRef) as fk_reg,
				ods.dbo.fn_bin2guid(_Fld7885RRef) as fk_cnt
--				into #tmp1
	from STG.._InfoRg7879 t 
	cross apply ARC..fn_BIN2GUID(_Fld7880RRef) x1
	cross apply ARC..fn_BIN2GUID(_Fld7881RRef) x2
	cross apply ARC..fn_BIN2GUID(_Fld7882RRef) x3
	cross apply ARC..fn_BIN2GUID(_Fld7883RRef) x4

[/SRC]


Чтобы на каждое поле была своя функция.

Может я конечно зря это делаю, но мне думается, так удобней читать.

Однако я не силен Вашу функцию переписать в скалярную... Как это сделать?

Спасибо


Умеют же люди на ровном месте громоздить горы говнокода.
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108705
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Алексей, помогите пожалуйста сделать скалярную функцию...
Ну вот не лежит у меня к табличной. Может я и зря, но очень хочется попробовать.
Спасибо огромное
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108713
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
Алексей, помогите пожалуйста сделать скалярную функцию...
Ну вот не лежит у меня к табличной.
А у меня к CLR не лежит душа :-)
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40108797
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
alexeyvg,

Алексей, помогите пожалуйста сделать скалярную функцию...
Ну вот не лежит у меня к табличной. Может я и зря, но очень хочется попробовать.
Спасибо огромное


Вот когда не будет стоять настроение, тогда уже будет предел
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40109672
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
L_argo
select master.dbo.fn_varbintohexstr(MyBinary16Field) as ...
from ...

ЯННП, разве не это нужно ТСу ? Чем не подходит ?
Разве что поднять регистр, если надо.
Она же выдаёт совсем другие данные, в другом формате.
Код: sql
1.
2.
3.
4.
select master.dbo.fn_varbintohexstr(0x81791CC1DEEA434311EBC3D76298209B)
0x81791cc1deea434311ebc3d76298209b
--а нужно 
6298209B-C3D7-11EB-8179-1CC1DEEA4343

Ну хз, что у Вас за формат. Мне нужна была ф-ция для получения SQL аналога.
И эта ф-ция оказалась идентична SQL-написанию. Часто ее применяю при работе с БД из 1С.

Нигде не встречал переставленных дампов, как в примере выше.
Где это применяется ?
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40109674
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Ну хз, что у Вас за формат. Мне нужна была ф-ция для получения SQL аналога.
И эта ф-ция оказалась идентична SQL-написанию. Часто ее применяю при работе с БД из 1С.

Нигде не встречал переставленных дампов, как в примере выше.
Где это применяется ?
Не у меня, а у топикстартера.

Не знаю, где он в 1С нашёл такой формат, я с 1С не работал, но вообще такой формат обсуждается на разных форумах, и тут на SQL.RU тоже был большой топик с обсуждением, возможно даже, что ТС скопировал код, который в первом топике, с нашего форума.
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40109675
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
и тут на SQL.RU тоже был большой топик с обсуждением, возможно даже, что ТС скопировал код, который в первом топике, с нашего форума.
Вот топик , а там код появился тоже из найденного на SQL.RU :-)
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40114105
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
L_argo
select master.dbo.fn_varbintohexstr(MyBinary16Field) as ...
from ...

ЯННП, разве не это нужно ТСу ? Чем не подходит ?
Разве что поднять регистр, если надо.
Она же выдаёт совсем другие данные, в другом формате.
Код: sql
1.
2.
3.
4.
select master.dbo.fn_varbintohexstr(0x81791CC1DEEA434311EBC3D76298209B)
0x81791cc1deea434311ebc3d76298209b
--а нужно 
6298209B-C3D7-11EB-8179-1CC1DEEA4343

ну тогда так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE FUNCTION GetBin16To1C
(
 @bin16 binary(16)
)
returns char(36)
BEGIN
declare @res char(36)

select @res = master.dbo.fn_varbintohexstr(@bin16)
select @res = substring(@res,27,8)+'-'+
              substring(@res,23,4)+'-'+ 
              substring(@res,19,4)+'-'+
              substring(@res,3,4) +'-'+
              substring(@res,7,12)
     
return @res
END

Это написание встречается в 1С-ных XML выгрузки конфигурации.
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40114192
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
alexeyvg
пропущено...
Она же выдаёт совсем другие данные, в другом формате.
Код: sql
1.
2.
3.
4.
select master.dbo.fn_varbintohexstr(0x81791CC1DEEA434311EBC3D76298209B)
0x81791cc1deea434311ebc3d76298209b
--а нужно 
6298209B-C3D7-11EB-8179-1CC1DEEA4343

ну тогда так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE FUNCTION GetBin16To1C
(
 @bin16 binary(16)
)
returns char(36)
BEGIN
declare @res char(36)

select @res = master.dbo.fn_varbintohexstr(@bin16)
select @res = substring(@res,27,8)+'-'+
              substring(@res,23,4)+'-'+ 
              substring(@res,19,4)+'-'+
              substring(@res,3,4) +'-'+
              substring(@res,7,12)
     
return @res
END

Это написание встречается в 1С-ных XML выгрузки конфигурации.


Так
Код: sql
1.
2.
3.
4.
CREATE function [dbo].[getId](@id binary(16)) 
RETURNS TABLE 
AS
RETURN ( select id = convert(char(36), cast( cast( reverse(cast(substring(@id, 9, 8) as char(8)) ) as binary(8) ) + substring(@id, 1, 8) as uniqueidentifier) , 2) )


бодрее в разы.
...
Рейтинг: 0 / 0
CLR функция для 1С
    #40114815
selis76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут очень подробное описание про устройство Guid UUID и представление Ссылки в 1С и варианты конвертации
https://infostart.ru/1c/articles/635159/
В топике не описали задачу ради которой хотите конвертировать ссылку в guid причем быстро. Как правило guid нужны в чистом виде только для планов обмена 1С но там они управляются средствами 1С, а все трюки с предоставлением данных через View SQL Server архитектурно ограничены
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CLR функция для 1С
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]