|
Можно ли как получить идентификатор типа значения? | ☑ | ||
---|---|---|---|---|
0
1Сергей
09.04.13
✎
08:09
|
Получить идентификатор ссылки (в полях таблиц БД типа ...RRef, 16 байт) можно с помощью функции .УникальныйИдентификатор().
А как можно получить идентификатор типа (в полях таблиц БД типа ...TRef, 4 байта)? |
|||
1
Tashiro
09.04.13
✎
08:17
|
СериализаторXDTO может подойдет? тип сериализуется
|
|||
2
1Сергей
09.04.13
✎
08:20
|
(1) никогда с этой штукой не сталкивался. почитаю, спс
|
|||
3
cw014
09.04.13
✎
08:22
|
Можно еще через ПолучитьСтруктуруХраненияБазыДанных
|
|||
4
1Сергей
09.04.13
✎
08:35
|
Кажется, понял.
Например: Document7571. Тут 7571 переводим в HEX, получаем 1D93. Что нам и нужно |
|||
5
МихаилМ
09.04.13
✎
08:45
|
(4)
зачам в HEX ? и десятичной системе можно. declare @ddd binary(4) set @ddd = 123 select @ddd вечная беда одинесников - путать данные и их представление. |
|||
6
1Сергей
09.04.13
✎
09:39
|
(5) прав, но мне удобнее в НЕХ
Сделал так: Перем СтруктураБД; Процедура ПриОткрытии() СтруктураБД = ПолучитьСтруктуруХраненияБазыДанных(); КонецПроцедуры Функция ИзДесятичнойВШестнадцатиричную(ДесятичноеЧисло) ПравыеБиты = Число(ДесятичноеЧисло)%16; ЛевыеБиты = Цел(Число(ДесятичноеЧисло)/16); Если ЛевыеБиты>0 Тогда НачалоЧисла = ИзДесятичнойВШестнадцатиричную(ЛевыеБиты); Иначе НачалоЧисла = ""; КонецЕсли; Если ПравыеБиты<10 Тогда Возврат НачалоЧисла + ПравыеБиты; Иначе Возврат НачалоЧисла + Символ(ПравыеБиты + 55); КонецЕсли; КонецФункции ... ТаблицаБД = СтруктураБД.Найти(Объект.Метаданные().ПолноеИмя(), "ИмяТаблицы"); ИмяТаблицыБД = ТаблицаБД.ИмяТаблицыХранения; ТипХекс = "0x" + Прав("00000000" + ИзДесятичнойВШестнадцатиричную(Прав(ИмяТаблицыБД,4)),8); ... Может, и не очень красиво, но работает |
|||
7
1Сергей
09.04.13
✎
10:06
|
да, не очень правильно. переделал:
Функция ПолучитьНомерТаблицыОбъектаВБД(Объект) Стр = ""; ТаблицаБД = СтруктураБД.Найти(Объект.Метаданные().ПолноеИмя(), "ИмяТаблицы"); ИмяТаблицыБД = ТаблицаБД.ИмяТаблицыХранения; Пока (Прав(ИмяТаблицыБД, 1)>="0") И (Прав(ИмяТаблицыБД, 1)<="9") Цикл Стр = Прав(ИмяТаблицыБД, 1) + Стр; ИмяТаблицыБД = Лев(ИмяТаблицыБД, СтрДлина(ИмяТаблицыБД)-1); КонецЦикла; Возврат "0x" + Прав("00000000" + ИзДесятичнойВШестнадцатиричную(Стр), 8); КонецФункции |
|||
8
1Сергей
09.04.13
✎
11:09
|
кароче, опять переделал. Самый простой способ, как оказалось, это через ЗначениеВСтрокуВнутр()
:) Функция UUIDToGUID(UUID) Экспорт Возврат Прав(UUID, 8) + "-" + Сред(UUID, 21, 4) + "-" + Сред(UUID, 17, 4) + "-" + Лев(UUID, 4) + "-" + Сред(UUID, 5, 12); КонецФункции Функция GUIDToUUID(GUID) Экспорт Возврат Сред(GUID, 20, 4) + Прав(GUID, 12) + Сред(GUID, 15, 4) + Сред(GUID, 10, 4) + Лев(GUID, 8); КонецФункции Функция ИзДесятичнойВШестнадцатиричную(ДесятичноеЧисло) ПравыеБиты = Число(ДесятичноеЧисло)%16; ЛевыеБиты = Цел(Число(ДесятичноеЧисло)/16); Если ЛевыеБиты>0 Тогда НачалоЧисла = ИзДесятичнойВШестнадцатиричную(ЛевыеБиты); Иначе НачалоЧисла = ""; КонецЕсли; Если ПравыеБиты<10 Тогда Возврат НачалоЧисла + ПравыеБиты; Иначе Возврат НачалоЧисла + Символ(ПравыеБиты + 55); КонецЕсли; КонецФункции Процедура ОбъектПриИзменении(Элемент) Если Объект = Неопределено Тогда GUID = ""; UUID = ""; ТипХекс = ""; Иначе ВнутренняяСтрока = ЗначениеВСтрокуВнутр(Объект); Стр = Сред(ВнутренняяСтрока, 2, СтрДлина(ВнутренняяСтрока)-2); Пока Найти(Стр, ",") Цикл Стр = Сред(Стр, Найти(Стр, ",")+1); КонецЦикла; ТИПстр = Лев(Стр, Найти(Стр, ":")-1); УУИДстр = ВРЕГ(Сред(Стр, Найти(Стр, ":")+1)); GUID = UUIDToGUID(УУИДстр); UUID = "0x"+УУИДстр; ТипХекс = "0x" + Прав("00000000" + ИзДесятичнойВШестнадцатиричную(ТИПстр), 8); КонецЕсли; КонецПроцедуры К тому же, предыдущий способ не работал с перечислениями |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |