powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / GUID из 1С в MS SQL и обратно, как реализовывается?
25 сообщений из 129, страница 1 из 6
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694718
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 1С ссылки хранятся в БД в бинарном виде, например так 0x898BBCAEC5369A3611E6DC86B0D27F78, а 1С их отдает в виде строки вот так "85cbd3bd-06ec-11e6-a37b-14dae906a3f2", а как реализован этот механизм преобразования туда, а потом обратно?
Так вроде работает: SELECT CONVERT(binary(16), 'b0d27f78-dc86-11e6-898b-bcaec5369a36', 0) AS GUID;, но насколько это точно не знаю.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694745
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

обратно вот такая функция подходит, опубликована была на SQL.ru, кто автор не помню :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE function [dbo].[sp_getid] (@id binary(16)) 
	returns char(36) 
    	as 
	begin 
	declare @unidentifier char(36) 
	declare @charvalue char(36) 
	select @unidentifier = CONVERT(char(36),CAST(@id as uniqueidentifier)) 
		select @charvalue = 
		right(@unidentifier, 8) 
		+ substring(@unidentifier,24,5) 
		+ substring(@unidentifier,19,5) 
		+ '-' 
		+ substring(@unidentifier,7,2) 
		+ substring(@unidentifier,5,2) 
		+ '-' 
		+ substring(@unidentifier,3,2) 
		+ left(@unidentifier,2) 
		+ substring(@unidentifier,12,2) 
		+ substring(@unidentifier,10,2) 
		+ substring(@unidentifier,17,2) 
		+ substring(@unidentifier,15,2) 
	
		return ( @charvalue ) 
		end; 



Такая функция нужна, что бы в 1С не получать ComeSafeAray

Потом в 1С пишите:
UID = ADOНаборДанныхТовары.Fields(0).Value;
Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(UID));

Вполне себе работает, тормозная правда немного на больших объемах.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694747
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, но мне нужна прямая работа с sql server туда и обратно
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694748
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,
ну так это она и есть в направлении обратно.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694750
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

т.е. эта функция вернет вам строку вида: "85cbd3bd-06ec-11e6-a37b-14dae906a3f2"
из вашего же селекта: SELECT CONVERT(binary(16), 'b0d27f78-dc86-11e6-898b-bcaec5369a36', 0) AS GUID
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694752
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvsc2r2bey,

т.е. эта функция вернет вам строку вида: "85cbd3bd-06ec-11e6-a37b-14dae906a3f2"
из вашего же селекта: SELECT CONVERT(binary(16), 'b0d27f78-dc86-11e6-898b-bcaec5369a36', 0) AS GUID
да, я понял, но насколько SELECT CONVERT(binary(16), 'b0d27f78-dc86-11e6-898b-bcaec5369a36', 0) AS GUID; дает точный 85cbd3bd-06ec-11e6-a37b-14dae906a3f2?
ЗЫ 1С знает толк в извращениях )))
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694753
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на инфостате похожее было https://forum.infostart.ru/forum9/topic183950/ но там CONVERT не используется
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694757
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyна инфостате похожее было https://forum.infostart.ru/forum9/topic183950/ но там CONVERT не используется
Эта еще тормознее так как в ней используеться fn_sqlvarbasetostr.

Вы это читали, там я давал ссылку на что есть Guid в 1С, там все по полочкам разложено.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694769
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,
и вообще fn_sqlvarbasetostr не документирована.
Когда-то тоже с помощью нее пытался преобразования делать. Но нафиг, если binary в строку преобразовывается и обратно, а дальше просто местами меняешь значения.
Подобные функции и на 1С кстати есть.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694788
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,
Вот эта функция на 1С:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Функция ПолучитьВнутрСсылку(лСсылка) Экспорт
    Если лСсылка = Неопределено Тогда
        Возврат "";
    КонецЕсли;
    Зн = ЗначениеВСтрокуВнутр(лСсылка); //Тот самый метод, о котором я писал выше.
    Зн = "0x" + Лев(Прав(Зн, 33), 32);
    Возврат Зн;
КонецФункции



взято отсюда .
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694794
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvsc2r2bey,
Вот эта функция на 1С:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Функция ПолучитьВнутрСсылку(лСсылка) Экспорт
    Если лСсылка = Неопределено Тогда
        Возврат "";
    КонецЕсли;
    Зн = ЗначениеВСтрокуВнутр(лСсылка); //Тот самый метод, о котором я писал выше.
    Зн = "0x" + Лев(Прав(Зн, 33), 32);
    Возврат Зн;
КонецФункции



взято отсюда .
Вот еще нашел тут тоже накручено http://dubraver.ru/?page_id=146
я не 1С поэтому приходится работать напрямую со скулем
тут три задачи, вытянуть бинарник, перевести его в строку
перевести строку в бинарник
и сгенерировать ссылку и кинуть ее в таблицу
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694813
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2beyтут три задачи, вытянуть бинарник, перевести его в строку
перевести строку в бинарник
и сгенерировать ссылку и кинуть ее в таблицу

И на фига это все? Т.е. зачем это гонять туда сюда, смысл какой? Получить представление в 1С ном виде, что бы потом 1С ники могли использовать вот это: ПолучитьСсылку(Новый УникальныйИдентификатор(UID))?

SQL та это нафиг не надо, SQL чистый бинарник подсовываешь, без всяких преобразований вот в таком виде: SELECT * FROM _Reference16990 WHERE _IDRref = 0x898BBCAEC5369A3611E6DC86B0D27F78 и все работает.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694828
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что 1С не справляется со своим рестом и бинарник нельзя в json засунуть
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694831
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прилетает вот такая хрень
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
[
  {
    "date": 1509397200,
    "latitude": 44.3641,
    "longitude": 56.3641,
    "vehicle": "85cbd3bd-06ec-11e6-a37b-14dae906a3f2"
  }
]


засунь vehicle в бинарное поле
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694836
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а vehicle это ссылка на элемент другого справочника
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694847
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

Да я понял. Та функция которую я дал она вам в обратку. 100% то, что надо. Которая же из 1с делает представление в sql у меня не было необходимости, поэтому проверьте просто запросом, найдет idrref или нет.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694867
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так вызвал функцию и параметры, насколько правильно я не знаю
Код: sql
1.
SELECT LOWER([dbo].[sp_getid](0x9414BCAEC5369A3611E84A0B3C29AC92)) AS GUID;


Вернул 3c29ac92-4a0b-11e8-9414-bcaec5369a36
а а вот SELECT CONVERT(binary(16), '3c29ac92-4a0b-11e8-9414-bcaec5369a36', 0) AS GUID;
Вернул 0x33433239414339322D344130422D3131
т.е. неправильно или я неправильно передал параметр
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694879
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

У вас гуид получить из полученой функцией sp_getid строки не получиться. Вам же надо выкинутьиз строки минусы, переставить местами литералы и добавить в начало 0x. Вон как я на 1с вам функцию скинул. Там в этой статье есть нужная вам функция на sql которая это делает.
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694916
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

вот она на 1С которую в SQL переписать можно 1 к 1:

Код: sql
1.
скульныйгуид = "0x" + СтрПолучитьСтроку(гуид,4) + СтрПолучитьСтроку(гуид,5) + СтрПолучитьСтроку(гуид,3) + СтрПолучитьСтроку(гуид,2) + СтрПолучитьСтроку(гуид,1); 
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694933
Хитроглазый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

для общего развития
https://ru.wikipedia.org/wiki/GUID
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694938
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,

вот вам преобразование туда обратно:

declare @GUIDasStr char(36),@GUID1С char(36);
SET @GUID1С = '3c29ac92-4a0b-11e8-9414-bcaec5369a36'
SET @GUIDasStr ='0x'+SUBSTRING(@GUID1С,20,4)+SUBSTRING(@GUID1С,25,13)+SUBSTRING(@GUID1С,15,4)+SUBSTRING(@GUID1С,10,4)+SUBSTRING(@GUID1С,1,8)
SELECT dbo.sp_getid(CONVERT(binary(16),@GUIDasStr,1))
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694942
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhv, вы маньяк! )
Про эту ссылку https://infostart.ru/public/236956/ ?
Она ужасна, там нет чистого sql
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694947
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sc2r2bey,
причем без всяких недокументированных fn_sqlvarbasetostr и fn_varbintohexstr
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694949
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я правильно понял:
Код: php
1.
Зн = "0x" + Лев(Прав(Зн, 33), 32);


Зн - это GUID, мы берем 33 символа справа, потом из полученного результата 32 символа слева и конкатенируем с 0x
...
Рейтинг: 0 / 0
GUID из 1С в MS SQL и обратно, как реализовывается?
    #39694951
Фотография sc2r2bey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я про fn_sqlvarbasetostr и fn_varbintohexstr и не слышал, пока не столкнулся с 1С, я использовал https://docs.microsoft.com/ru-ru/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017 лучше не бывает
...
Рейтинг: 0 / 0
25 сообщений из 129, страница 1 из 6
Форумы / [игнор отключен] [закрыт для гостей] / GUID из 1С в MS SQL и обратно, как реализовывается?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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