Расшифровка представления битой ссылки. Как перевернуть ГУИД. UUID to GUID и обратно...


Немножко о UUID и GUID и их взаимосвязи.
Когда мы встречаемся с битой ссылкой в Предприятии 8, иногда возникает необхоимость создать объект с её идентификатором. Однако строка идентификатора и текст битой ссылки в предприятии различаются, но легко восстановить одно зная другое.

Когда мы встречаемся с битой ссылкой в Предприятии 8, иногда возникает необхоимость создать объект с её идентификатором. Однако строка идентификатора и текст битой ссылки в предприятии различаются, но легко восстановить одно зная другое.

Определимся с обозначениями:

UUID - это подстрока, которую мы видим в режиме предприятия в представлении битой ссылки

                                                            Объект не найден (N:UUID);

где N - номер таблицы таблицы в базе данных, например, _ReferenceN - это таблица справочника в базе данных.

Для документа такая таблица будет иметь имя _DocumentN, разглядеть имена этих таблиц можно, если имеется клиент-серверный вариант информационной базы 1С:Предприятия (см. рис.).

GUID - это строка, которую мы используем для создания объекта "УникальныйИдентификатор":

                                                            Новый УникальныйИдентификатор(GUID).

Вот две простые функции, которые легко составить по предложенному рисунку:

//////////////////////////////////////////////////

Функция 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);

КонецФункции

//////////////////////////////////////////////////

О типе битой ссылки. (см. комментарий от [QUOTE]ediks 23.11.11 10:25[/QUOTE] http://avprog.ru/public/83378/)

Исходя из смысла числа N в строке битой ссылки Объект не найден (N:UUID), это число можно считать идентификатором типа.

Для определения типа можно заполнить заранее, например, соответствие (Число N - ТипОбъекта). А N определять из представления битой ссылки.

Вот функции модуля обработки для определения типа (всего одна экспортная функция для рашифровки битой ссылки):

 // Представление битой ссылки: Объект не найден (TypeID:UUID)
 // TypeID - идентификатор типа
 // UUID - глобальный идентификатор
 
Функция СтруктураПредставленияБитойСсылки(ПредставлениеБитойСсылки)

    
// Ищем позицию скбоки
    
Поз1 = Найти(ПредставлениеБитойСсылки, "(");
    
Поз2 = Найти(ПредставлениеБитойСсылки, ":");

     Если
Поз1 > 0 И Поз2 > 0 И Поз2 > Поз1 Тогда
        
TypeID = Сред(ПредставлениеБитойСсылки, Поз1 + 1, Поз2 - Поз1 - 1);
        
UUID = Сред(ПредставлениеБитойСсылки, Поз2 + 1, 32);
     Иначе
        
TypeID = "";
        
UUID = ПредставлениеБитойСсылки;
     КонецЕсли;

     Возврат Новый
Структура("TypeID, UUID", TypeID, UUID);

 КонецФункции
 
// Возвращает соответствие: Идентификатор типа (строка) - Строка определения типа
 
Функция СоответствиеИдентификаторовТипов()

    
Соответствие = Новый Соответствие;

    
МассивКоллекцийМенеджеровСсылочныхОбъектов = Новый Массив;
    
МассивКоллекцийМенеджеровСсылочныхОбъектов.Добавить(Справочники);
    
МассивКоллекцийМенеджеровСсылочныхОбъектов.Добавить(Документы);
    
МассивКоллекцийМенеджеровСсылочныхОбъектов.Добавить(ПланыВидовХарактеристик);
    
МассивКоллекцийМенеджеровСсылочныхОбъектов.Добавить(ПланыСчетов);
    
МассивКоллекцийМенеджеровСсылочныхОбъектов.Добавить(БизнесПроцессы);
    
МассивКоллекцийМенеджеровСсылочныхОбъектов.Добавить(Задачи);
    
МассивКоллекцийМенеджеровСсылочныхОбъектов.Добавить(ПланыОбмена);

     Для Каждого
КоллекцияМенеджеровСсылочныхОбъектов Из МассивКоллекцийМенеджеровСсылочныхОбъектов Цикл
         Для Каждого
МенеджерСсылоногоОбъекта Из КоллекцияМенеджеровСсылочныхОбъектов Цикл
            
БитаяСсылка = МенеджерСсылоногоОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор);
            
Соответствие.Вставить(СтруктураПредставленияБитойСсылки(Строка(БитаяСсылка)).TypeID, СтрЗаменить(БитаяСсылка.Метаданные().ПолноеИмя(), ".", "Ссылка."));
         КонецЦикла;
     КонецЦикла;

     Возврат
Соответствие;

 КонецФункции
 
// Возвращает структуру: "TypeID, UUID, Тип, GUID"
 
Функция РасшифровкаПредставленияБитойСсылки(ПредставлениеБитойСсылки) Экспорт

     Если
мСоответствиеИдентификаторовТипов = Неопределено Тогда
        
мСоответствиеИдентификаторовТипов = СоответствиеИдентификаторовТипов();
     КонецЕсли;

    
СтруктураПредставления = СтруктураПредставленияБитойСсылки(ПредставлениеБитойСсылки);

    
СтрокаТипа = мСоответствиеИдентификаторовТипов[СтруктураПредставления.TypeID];
     Если
СтрокаТипа = Неопределено Тогда
        
СтрокаТипа = "Неопределено";
     КонецЕсли;

     Возврат Новый
Структура("TypeID, UUID, Тип, GUID", СтруктураПредставления.TypeID, СтруктураПредставления.UUID, СтрокаТипа, UUIDToGUID(СтруктураПредставления.UUID));

 КонецФункции

 

Файлы обработки:

-