Когда мы встречаемся с битой ссылкой в Предприятии 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] //infostart.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));
КонецФункции