1С 8.3 Получить объект по GUID
Данные > Примеры кода 1С > 1С 8.3 Документы
Перейти в раздел примеры кода 1С 8.3:
- 1С 8.3 Документы
- 1С 8.3 ПланыВидовХарактеристик

В языке программирования 1С:8.3 для получения объекта по его GUID можно использовать метод ПолучитьПоСсылке (или GetByRef в английской версии). Этот метод доступен для различных объектов метаданных, таких как справочники, документы, регистры и т.д.
GUID используется для однозначной идентификации объектов (справочников, документов, регистров и других элементов) в базе данных 1С. Он гарантирует уникальность даже в распределенных системах, где данные могут создаваться на разных компьютерах или серверах. Это уникальный идентификатор, который присваивается каждому объекту в системе. Это 128-битное значение, представленное в виде строки, например: "123e4567-e89b-12d3-a456-478914174000".
Найти объект в базе по УИД в 1С 8.3:
Функция ПолучитьОбъектПоGUID(УИДОбъекта)
СсылкаНаОбъект = Неопределено;
// все объекты по которым можно получить ссылку
ОбъектыМетаданных = Новый Массив;
ОбъектыМетаданных.Добавить(Справочники);
ОбъектыМетаданных.Добавить(Документы);
ОбъектыМетаданных.Добавить(ПланыВидовХарактеристик);
ОбъектыМетаданных.Добавить(ПланыСчетов);
ОбъектыМетаданных.Добавить(ПланыОбмена);
ОбъектыМетаданных.Добавить(БизнесПроцессы);
ОбъектыМетаданных.Добавить(Задачи);
Для Каждого ОбъектМ Из ОбъектыМетаданных Цикл
Для Каждого МенеджерОбъект Из ОбъектМ Цикл
СсылкаНаОбъект = МенеджерОбъект.ПолучитьСсылку(УИДОбъекта);
Если СсылкаНаОбъект.ПолучитьОбъект() <> Неопределено Тогда
Возврат СсылкаНаОбъект //найден
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат СсылкаНаОбъект //не найден
КонецФункции
СсылкаНаОбъект = Неопределено;
// все объекты по которым можно получить ссылку
ОбъектыМетаданных = Новый Массив;
ОбъектыМетаданных.Добавить(Справочники);
ОбъектыМетаданных.Добавить(Документы);
ОбъектыМетаданных.Добавить(ПланыВидовХарактеристик);
ОбъектыМетаданных.Добавить(ПланыСчетов);
ОбъектыМетаданных.Добавить(ПланыОбмена);
ОбъектыМетаданных.Добавить(БизнесПроцессы);
ОбъектыМетаданных.Добавить(Задачи);
Для Каждого ОбъектМ Из ОбъектыМетаданных Цикл
Для Каждого МенеджерОбъект Из ОбъектМ Цикл
СсылкаНаОбъект = МенеджерОбъект.ПолучитьСсылку(УИДОбъекта);
Если СсылкаНаОбъект.ПолучитьОбъект() <> Неопределено Тогда
Возврат СсылкаНаОбъект //найден
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат СсылкаНаОбъект //не найден
КонецФункции
Доп.проверка (если нужна):
Если Не СсылкаНаОбъект.Пустая() Тогда
Сообщить("Найден объект: " + СсылкаНаОбъект.Номер);
Иначе
Сообщить("Объект с GUID " + Идентификатор + " не найден.");
КонецЕсли;
Сообщить("Найден объект: " + СсылкаНаОбъект.Номер);
Иначе
Сообщить("Объект с GUID " + Идентификатор + " не найден.");
КонецЕсли;
Также для поиска ссылки на объект в информационной базе 1С по его уникальному идентификатору (УИД или GUID) можно использовать запрос на языке запросов 1С.
Пример запроса для поиска объекта по GUID в 1С 8.3:
// Осуществляет поиск ссылки по УИД(GUID) или массиву УИДов(GUID)
//
// Параметры:
// УИД - Строка - Идентификатор строкой.
// - Массив - Массив идентификаторов строкой.
//
//Возвращаемое значение:
// - Неопределено - Если не удалось определить ни одну ссылку по параметру УИД.
// - ЛюбаяСсылка - Если в параметр "УИД" была передана строка.
// - ТаблицаЗначений - Если в параметр "УИД" был передан массив строк.
// * УИД - Строка - Содержит идентифкатор строкой по которому удалось определить ссылку.
// * Ссылка - ЛюбаяСсылка - Содержит ссылку на объект.
//
// Пример:
// РезультатПоиска = НайтиСсылкуПоУИД("123e4567-e89b-12d3-a456-478914174000") ...
//
Функция НайтиСсылкуПоУИД(Знач УИД) Экспорт
ЭтоМассив = ТипЗнч(УИД) = Тип("Массив");
МассивУидов = Новый Массив;
Если ЭтоМассив Тогда
МассивУидов = УИД;
Иначе
МассивУидов.Добавить(УИД);
КонецЕсли;
Результат = Неопределено;
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Справочники);
МассивМетаданных.Добавить(Документы);
МассивМетаданных.Добавить(ПланыВидовХарактеристик);
МассивМетаданных.Добавить(ПланыСчетов);
МассивМетаданных.Добавить(ПланыВидовРасчета);
МассивМетаданных.Добавить(ПланыОбмена);
МассивМетаданных.Добавить(БизнесПроцессы);
МассивМетаданных.Добавить(Задачи);
МассивТипов = Новый Массив;
Для Каждого СтрМетаданное Из МассивМетаданных Цикл
Для Каждого Стр Из СтрМетаданное.ТипВсеСсылки().Типы() Цикл
МассивТипов.Добавить(Стр);
КонецЦикла;
КонецЦикла;
ТаблицаСсылок = Новый ТаблицаЗначений;
ТаблицаСсылок.Колонки.Добавить("УИД" , Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(36)));
ТаблицаСсылок.Колонки.Добавить("Ссылка" , Новый ОписаниеТипов(МассивТипов));
Для Каждого СтрМетаданное Из МассивМетаданных Цикл
Для Каждого Менеджер Из СтрМетаданное Цикл
Для Каждого СтрУИД Из МассивУидов Цикл
Попытка
НовСтр = ТаблицаСсылок.Добавить();
НовСтр.Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрУИД));
НовСтр.УИД = СтрУИД;
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСсылок.Ссылка КАК Ссылка,
| ТаблицаСсылок.УИД КАК УИД
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ТаблицаСсылок КАК ТаблицаСсылок
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.Ссылка КАК Ссылка,
| ВТ.УИД КАК УИД
|ИЗ
| ВТ КАК ВТ
|ГДЕ
| НЕ ВТ.Ссылка.ПометкаУдаления ЕСТЬ NULL";
Запрос.УстановитьПараметр("ТаблицаСсылок",ТаблицаСсылок);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Если ЭтоМассив Тогда
Результат = РезультатЗапроса.Выгрузить();
Иначе
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
Результат = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции // НайтиСсылкуПоУИД
//
// Параметры:
// УИД - Строка - Идентификатор строкой.
// - Массив - Массив идентификаторов строкой.
//
//Возвращаемое значение:
// - Неопределено - Если не удалось определить ни одну ссылку по параметру УИД.
// - ЛюбаяСсылка - Если в параметр "УИД" была передана строка.
// - ТаблицаЗначений - Если в параметр "УИД" был передан массив строк.
// * УИД - Строка - Содержит идентифкатор строкой по которому удалось определить ссылку.
// * Ссылка - ЛюбаяСсылка - Содержит ссылку на объект.
//
// Пример:
// РезультатПоиска = НайтиСсылкуПоУИД("123e4567-e89b-12d3-a456-478914174000") ...
//
Функция НайтиСсылкуПоУИД(Знач УИД) Экспорт
ЭтоМассив = ТипЗнч(УИД) = Тип("Массив");
МассивУидов = Новый Массив;
Если ЭтоМассив Тогда
МассивУидов = УИД;
Иначе
МассивУидов.Добавить(УИД);
КонецЕсли;
Результат = Неопределено;
МассивМетаданных = Новый Массив;
МассивМетаданных.Добавить(Справочники);
МассивМетаданных.Добавить(Документы);
МассивМетаданных.Добавить(ПланыВидовХарактеристик);
МассивМетаданных.Добавить(ПланыСчетов);
МассивМетаданных.Добавить(ПланыВидовРасчета);
МассивМетаданных.Добавить(ПланыОбмена);
МассивМетаданных.Добавить(БизнесПроцессы);
МассивМетаданных.Добавить(Задачи);
МассивТипов = Новый Массив;
Для Каждого СтрМетаданное Из МассивМетаданных Цикл
Для Каждого Стр Из СтрМетаданное.ТипВсеСсылки().Типы() Цикл
МассивТипов.Добавить(Стр);
КонецЦикла;
КонецЦикла;
ТаблицаСсылок = Новый ТаблицаЗначений;
ТаблицаСсылок.Колонки.Добавить("УИД" , Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(36)));
ТаблицаСсылок.Колонки.Добавить("Ссылка" , Новый ОписаниеТипов(МассивТипов));
Для Каждого СтрМетаданное Из МассивМетаданных Цикл
Для Каждого Менеджер Из СтрМетаданное Цикл
Для Каждого СтрУИД Из МассивУидов Цикл
Попытка
НовСтр = ТаблицаСсылок.Добавить();
НовСтр.Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрУИД));
НовСтр.УИД = СтрУИД;
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаСсылок.Ссылка КАК Ссылка,
| ТаблицаСсылок.УИД КАК УИД
|ПОМЕСТИТЬ ВТ
|ИЗ
| &ТаблицаСсылок КАК ТаблицаСсылок
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.Ссылка КАК Ссылка,
| ВТ.УИД КАК УИД
|ИЗ
| ВТ КАК ВТ
|ГДЕ
| НЕ ВТ.Ссылка.ПометкаУдаления ЕСТЬ NULL";
Запрос.УстановитьПараметр("ТаблицаСсылок",ТаблицаСсылок);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Если ЭтоМассив Тогда
Результат = РезультатЗапроса.Выгрузить();
Иначе
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
Результат = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции // НайтиСсылкуПоУИД
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник