В процессе разработки на платформе 1С часто возникает задача однозначно идентифицировать объект, например, для интеграции с другими системами, обмена данными или для логирования. Для этого используется уникальный идентификатор (УИД), также известный как GUID. Рассмотрим, как работать с этими идентификаторами: как получить УИД существующего объекта и как найти объект в базе, зная его УИД.
Проанализируем две основные операции: получение идентификатора из ссылки и восстановление ссылки по идентификатору.
Чтобы получить уникальный идентификатор любого ссылочного объекта в 1С (документа, элемента справочника и т.д.), необходимо использовать метод УникальныйИдентификатор(), который применяется непосредственно к переменной, содержащей ссылку на этот объект.
Важный момент: результатом работы этого метода является не строка, а специальный объект типа УникальныйИдентификатор. Для передачи этого значения в другие системы или для сохранения в текстовом виде его нужно явно преобразовать в строку.
Посмотрим на практический пример. Предположим, у нас есть ссылка на документ "Реализация товаров и услуг", и нам нужно получить его УИД в строковом представлении.
УникальныйИдентификатор().Строка().
// Предположим, у нас есть переменная СсылкаНаДокумент,
// содержащая ссылку на нужный нам документ.
// Например:
// СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000123", ТекущаяДата());
// 1. Получаем УИД объекта
ИдентификаторОбъекта = СсылкаНаДокумент.УникальныйИдентификатор();
// Тип переменной ИдентификаторОбъекта - УникальныйИдентификатор
// 2. Преобразуем УИД в строку
СтрокаGUID = Строка(ИдентификаторОбъекта);
// Теперь в переменной СтрокаGUID находится значение вида "d1e8d2e8-c2b3-11e9-8b2e-00155d0a1b0c"
Сообщить(СтрокаGUID);
Таким образом, для получения строкового представления GUID достаточно одной строки кода: СтрокаGUID = Строка(СсылкаНаОбъект.УникальныйИдентификатор());. Этот метод универсален и работает для всех объектов, имеющих ссылку. Если вам необходимо сформировать реестр идентификаторов или ускорить разработку, можно использовать список GUID объектов справочников и документов, который также позволяет сгенерировать готовый код 1С для поиска.
Теперь решим обратную задачу: у нас есть строковое представление УИД, и нам нужно получить ссылку на соответствующий объект в базе данных.
Для этого используется метод менеджера объекта ПолучитьСсылку(). Этот метод требует на вход параметр типа УникальныйИдентификатор, поэтому сначала нужно преобразовать нашу строку обратно в этот тип с помощью конструктора Новый УникальныйИдентификатор().
Ключевая особенность: метод ПолучитьСсылку() не обращается к базе данных и не проверяет, существует ли объект с таким УИД. Он просто "конструирует" ссылку на основе переданного идентификатора. Чтобы убедиться, что объект реален, нужно дополнительно проверить это, например, попытавшись прочитать объект методом ПолучитьОбъект().
Разберем по шагам:
УникальныйИдентификатор из этой строки.ПолучитьСсылку() у менеджера нужного нам типа объекта (например, Документы.РеализацияТоваровУслуг). Важно точно знать тип искомого объекта.Посмотрим, как это выглядит в коде:
// Исходные данные: строка с GUID и известный тип объекта.
СтрокаGUID = "d1e8d2e8-c2b3-11e9-8b2e-00155d0a1b0c";
// 1. Преобразуем строку в тип УникальныйИдентификатор
ИдентификаторДляПоиска = Новый УникальныйИдентификатор(СтрокаGUID);
// 2. Получаем ссылку с помощью менеджера документов
// Важно: мы должны точно знать, что это документ "РеализацияТоваровУслуг"
НайденнаяСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(ИдентификаторДляПоиска);
// 3. Проверяем, существует ли такой объект в базе данных
Если НайденнаяСсылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект с указанным GUID не найден в базе данных!");
Иначе
Сообщить("Объект успешно найден: " + НайденнаяСсылка);
// Теперь с переменной НайденнаяСсылка можно полноценно работать
КонецЕсли;
В случаях, когда нужно обработать не один идентификатор, а целый список (например, из табличного документа), эффективнее использовать массовый поиск объектов 1С по УИН.
Чтобы закрепить понимание, давайте объединим обе операции в один логический блок. Мы возьмем существующий документ, получим его строковый УИД, а затем по этому УИД найдем исходный документ.
// --- ЭТАП 1: ПОЛУЧЕНИЕ GUID ИЗ ССЫЛКИ ---
// Найдем какой-нибудь документ для примера
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| НЕ РеализацияТоваровУслуг.ПометкаУдаления";
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Сообщить("В базе нет документов реализации для примера.");
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ИсходнаяСсылка = Выборка.Ссылка;
Сообщить("Работаем с документом: " + ИсходнаяСсылка);
// Получаем его GUID в виде строки
СтрокаGUID = Строка(ИсходнаяСсылка.УникальныйИдентификатор());
Сообщить("Его строковый GUID: " + СтрокаGUID);
// --- ЭТАП 2: ПОЛУЧЕНИЕ ССЫЛКИ ИЗ GUID ---
// Преобразуем строку обратно в УникальныйИдентификатор
ИдентификаторИзСтроки = Новый УникальныйИдентификатор(СтрокаGUID);
// Получаем ссылку
ВосстановленнаяСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(ИдентификаторИзСтроки);
Сообщить("Восстановленная ссылка: " + ВосстановленнаяСсылка);
// Проверяем, что ссылки совпадают
Если ИсходнаяСсылка = ВосстановленнаяСсылка Тогда
Сообщить("Успех! Ссылки идентичны.");
Иначе
Сообщить("Ошибка! Что-то пошло не так.");
КонецЕсли;
Этот пример наглядно демонстрирует, как работают оба механизма и как они дополняют друг друга. Эти операции являются фундаментом для построения надежных интеграций и механизмов обмена данными между различными информационными базами 1С и внешними системами. Также, для поддержания целостности данных, полезно уметь выполнять поиск ссылок на справочники и документы, чтобы видеть, где именно используется найденный объект.