Имя: Пароль:
1C
1С v8
Как получить ссылку на справочник по данным из SQL Binari(16)
0 sereban
 
14.08.12
14:30
Имеется БД MS SQL Server. База не 1с, но в ней хранятся ссылки на элементы справочника 1с аналогично тому, как хранит ссылки 1с в SQL. Т.е. тип Binari(16) в Managerment studio при выполнении запроса выглядит вот так:  0x44A64DA86AA5DA42AF40D61A13CFAEED. Подключаю базу как внешний источник данных и выбираю то же самое запросом уже из 1С в результате получаю данные, которые при преобразовании в строку выглядят так:"60 1E FD 33 7E 89 B1 42 83 56 E2 07 3E 54 33 80". Каким образом обработать результат запроса, чтобы получить ссылку 1с?
1 hhhh
 
14.08.12
14:32
ПолучитьСсылку(Новый УникальныйИдентификатор(ВашаэтаСтрока));
2 sereban
 
14.08.12
14:39
(1) Новый УникальныйИдентификатор(Строка(мРезультатЗапроса.Выгрузить()[0].УИД1С))    {(1)}: Ошибка при вызове конструктора (УникальныйИдентификатор)
3 sereban
 
14.08.12
14:40
(2) Строка(мРезультатЗапроса.Выгрузить()[0].УИД1С)  - это действительно строка вот такого вида "60 1E FD 33 7E 89 B1 42 83 56 E2 07 3E 54 33 80"
4 H A D G E H O G s
 
14.08.12
14:49
cast (cast([_IDRRef] as uniqueidentifier) as nvarchar(36))
5 sereban
 
14.08.12
15:27
(4) Немного не то или я не догоняю. Пример:
В SQL изначально в поле Binari(16) содержится:
0х601EFD337E89B1428356E2073E543380

cast (cast([_IDRRef] as uniqueidentifier) as nvarchar(36)) возвращает
33FD1E60-897E-42B1-8356-E2073E543380

А должно быть:
3e543380-e207-8356-601e-fd337e89b142

тогда и ссылка находится
Но тут можно написать функцию, которая будет символы переставлять местами, тогда должно взлететь.
6 H A D G E H O G s
 
14.08.12
15:29
(5) Да, это так
7 H A D G E H O G s
 
14.08.12
15:29
Поищи, есть готовый код перестановки
8 sereban
 
14.08.12
15:41
(5) Спасибо. Уже сам набросал:
Стр = СтрЗаменить(Строка(СтрокаРезультата.УИД1С)," ","");

Сообщить(Стр);
//601EFD337E89B1428356E2073E543380

Бл1 = Прав(Стр,8);
Бл2 = Сред(Стр,21,4);
Бл3 = Сред(Стр,17,4);
Бл4 = Лев(Стр,4);
Бл5 = Сред(Стр,5,12);

УИД = Бл1 + "-" + Бл2 + "-" + Бл3 + "-" + Бл4 + "-" + Бл5;
Сообщить(УИД);
//3e543380-e207-8356-601e-fd337e89b142

Ссылка = Справочники.Абоненты.ПолучитьСсылку(Новый УникальныйИдентификатор(УИД));



Только это для УИД полученного при помощи внешних источников данных.