Розшифровка уявлення битою посилання

Трошки про UUID і GUID і їх взаємозв'язку.
Коли ми зустрічаємося з битою посиланням в Підприємстві 8, іноді виникає необхоімо створити об'єкт з її ідентифікатором. Однак рядок ідентифікатора і текст битою посилання в підприємстві розрізняються, але легко відновити одне знаючи інше.

Коли ми зустрічаємося з битою посиланням в Підприємстві 8, іноді виникає необхоімо створити об'єкт з її ідентифікатором. Однак рядок ідентифікатора і текст битою посилання в підприємстві розрізняються, але легко відновити одне знаючи інше.

Визначимося з позначеннями:

UUID - це підрядок, яку ми бачимо в режимі підприємства в поданні битою посилання

Об'єкт не знайдено (N: UUID);

де N - номер таблиці таблиці в базі даних, наприклад, _ReferenceN - це таблиця довідника в базі даних.

Для документа така таблиця буде мати ім'я _Document N. розгледіти імена цих таблиць можна, якщо є клієнт-серверний варіант інформаційної бази 1С: Підприємства (див. рис.).

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);

Виходячи зі змісту числа 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, UUID, Тип, GUID"
Функція РасшіфровкаПредставленіяБітойСсилкі (ПредставленіеБітойСсилкі) Експорт

Якщо мСоответствіеІдентіфікаторовТіпов = Не визначено Тоді
мСоответствіеІдентіфікаторовТіпов = СоответствіеІдентіфікаторовТіпов ();
КонецЕсли;

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

СтрокаТіпа = мСоответствіеІдентіфікаторовТіпов [СтруктураПредставленія. TypeID];
Якщо СтрокаТіпа = Не визначено Тоді
СтрокаТіпа = "Не визначено";
КонецЕсли;

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

13. nalivai (nalivai-chai) 27.11.11 22:20 Зараз в темі

Може бути ви плутаєте биту посилання з "унікальний ідентифікатор", який дійсно абсолютно нічого не говорить про тип, це складова об'єкта, яка робить його унікальним на теренах бази даних.

З відновленням битих посилань, звичайно, потрібно бути гранично обережним, як і з будь-якими нетрадиційними операціями з базою даних, що не закладеними в логіку програми (конфігурації). Не кажучи про те, що биті посилання, які потрібно відновити, швидше за все вже з'явилися як результат необережного поводження з базою даних, або недоробок обміну даними.

Хороший варіант - відновлення битих посилань з резервної бази даних.

Я не пропонував використовувати генератор випадкових чисел для заповнення реквізитів при відновленні об'єкта.

15. Андрій Андрійович (nalivai-chai) 595 29.11.11 9:38 Зараз в темі

Саме так: за змістом поля з битою посиланням, а не по типу поля.