1С 8.3 Получить объект по GUID - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Получить объект по GUID

Данные > Примеры кода 1С > 1С 8.3 Документы
Перейти в раздел примеры кода 1С 8.3:
В языке программирования 1С:8.3 для получения объекта по его GUID можно использовать метод ПолучитьПоСсылке (или GetByRef в английской версии). Этот метод доступен для различных объектов метаданных, таких как справочники, документы, регистры и т.д.

GUID используется для однозначной идентификации объектов (справочников, документов, регистров и других элементов) в базе данных 1С. Он гарантирует уникальность даже в распределенных системах, где данные могут создаваться на разных компьютерах или серверах. Это уникальный идентификатор, который присваивается каждому объекту в системе. Это 128-битное значение, представленное в виде строки, например: "123e4567-e89b-12d3-a456-478914174000".
Найти объект в базе по УИД в 1С 8.3:
Функция ПолучитьОбъектПоGUID(УИДОбъекта)

   СсылкаНаОбъект = Неопределено;

   // все объекты по которым можно получить ссылку
   ОбъектыМетаданных = Новый Массив;
   ОбъектыМетаданных.Добавить(Справочники);
   ОбъектыМетаданных.Добавить(Документы);
   ОбъектыМетаданных.Добавить(ПланыВидовХарактеристик);
   ОбъектыМетаданных.Добавить(ПланыСчетов);
   ОбъектыМетаданных.Добавить(ПланыОбмена);
   ОбъектыМетаданных.Добавить(БизнесПроцессы);
   ОбъектыМетаданных.Добавить(Задачи);

   Для Каждого ОбъектМ Из ОбъектыМетаданных Цикл
       Для Каждого МенеджерОбъект Из ОбъектМ Цикл
           СсылкаНаОбъект = МенеджерОбъект.ПолучитьСсылку(УИДОбъекта);
           Если СсылкаНаОбъект.ПолучитьОбъект() <> Неопределено Тогда
               Возврат СсылкаНаОбъект //найден
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;

   Возврат СсылкаНаОбъект //не найден

КонецФункции
Доп.проверка (если нужна):
Если Не СсылкаНаОбъект.Пустая() Тогда
   Сообщить("Найден объект: " + СсылкаНаОбъект.Номер);
Иначе
   Сообщить("Объект с GUID " + Идентификатор + " не найден.");
КонецЕсли;
Также для поиска ссылки на объект в информационной базе 1С по его уникальному идентификатору (УИД или GUID) можно использовать запрос на языке запросов 1С.
Пример запроса для поиска объекта по GUID в 1С 8.3:
// Осуществляет поиск ссылки по УИД(GUID) или массиву УИДов(GUID)
//
// Параметры:
//   УИД - Строка - Идентификатор строкой.
//       - Массив - Массив идентификаторов строкой.
//
//Возвращаемое значение:
//    - Неопределено - Если не удалось определить ни одну ссылку по параметру УИД.
//    - ЛюбаяСсылка - Если в параметр "УИД" была передана строка.
//    - ТаблицаЗначений  - Если в параметр "УИД" был передан массив строк.
//        * УИД - Строка - Содержит идентифкатор строкой по которому удалось определить ссылку.
//        * Ссылка - ЛюбаяСсылка - Содержит ссылку на объект.
//
// Пример:
// РезультатПоиска = НайтиСсылкуПоУИД("123e4567-e89b-12d3-a456-478914174000") ...
//
Функция НайтиСсылкуПоУИД(Знач УИД) Экспорт

   ЭтоМассив = ТипЗнч(УИД) = Тип("Массив");

   МассивУидов = Новый Массив;
   Если ЭтоМассив Тогда
       МассивУидов = УИД;
   Иначе
       МассивУидов.Добавить(УИД);
   КонецЕсли;

   Результат = Неопределено;

   МассивМетаданных = Новый Массив;
   МассивМетаданных.Добавить(Справочники);
   МассивМетаданных.Добавить(Документы);
   МассивМетаданных.Добавить(ПланыВидовХарактеристик);
   МассивМетаданных.Добавить(ПланыСчетов);
   МассивМетаданных.Добавить(ПланыВидовРасчета);
   МассивМетаданных.Добавить(ПланыОбмена);
   МассивМетаданных.Добавить(БизнесПроцессы);
   МассивМетаданных.Добавить(Задачи);

   МассивТипов = Новый Массив;

   Для Каждого СтрМетаданное Из МассивМетаданных Цикл
       Для Каждого Стр Из СтрМетаданное.ТипВсеСсылки().Типы() Цикл
           МассивТипов.Добавить(Стр);
       КонецЦикла;
   КонецЦикла;

   ТаблицаСсылок = Новый ТаблицаЗначений;
   ТаблицаСсылок.Колонки.Добавить("УИД"    , Новый ОписаниеТипов("Строка",,,,Новый КвалификаторыСтроки(36)));
   ТаблицаСсылок.Колонки.Добавить("Ссылка" , Новый ОписаниеТипов(МассивТипов));

   Для Каждого СтрМетаданное Из МассивМетаданных Цикл
       Для Каждого Менеджер Из СтрМетаданное Цикл
           Для Каждого СтрУИД Из МассивУидов Цикл
               Попытка
                   НовСтр = ТаблицаСсылок.Добавить();
                   НовСтр.Ссылка = Менеджер.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрУИД));
                   НовСтр.УИД    = СтрУИД;
               Исключение
               КонецПопытки;
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;

   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
    |   ТаблицаСсылок.Ссылка КАК Ссылка,
    |   ТаблицаСсылок.УИД КАК УИД
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |   &ТаблицаСсылок КАК ТаблицаСсылок
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ВТ.Ссылка КАК Ссылка,
    |   ВТ.УИД КАК УИД
    |ИЗ
    |   ВТ КАК ВТ
    |ГДЕ
    |   НЕ ВТ.Ссылка.ПометкаУдаления ЕСТЬ NULL";

   Запрос.УстановитьПараметр("ТаблицаСсылок",ТаблицаСсылок);
   РезультатЗапроса = Запрос.Выполнить();

   Если Не РезультатЗапроса.Пустой() Тогда
       Если ЭтоМассив Тогда
           Результат = РезультатЗапроса.Выгрузить();
       Иначе
           ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
           ВыборкаДетальныеЗаписи.Следующий();

           Результат = ВыборкаДетальныеЗаписи.Ссылка;
       КонецЕсли;
   КонецЕсли;

   Возврат Результат;

КонецФункции // НайтиСсылкуПоУИД
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 18.01.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому