Трошки про 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 Зараз в темі
Саме так: за змістом поля з битою посиланням, а не по типу поля.