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

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

1С 8.3 Получить УИД в запросе

Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:
В версии платформы 1С 8.3.22 в язык запросов (и в язык выражений СКД) добавлена функция УникальныйИдентификатор(Ссылка). Функция возвращает уникальный идентификатор переданной ссылки (или NULL, если передано значение NULL). Параметр Ссылка это выражение, результатом которого является ссылка (за исключением ссылок на таблицы внешних источников данных).
Получение Уникального ИДентификатора от ссылки в запросе в 1С 8.3:
&НаСервере
Процедура УИДвЗапросе(ТЗ_МатериалыНаСкладе) // Таблица значений

   // Создание выборки
   Запрос = Новый Запрос("ВЫБРАТЬ
   | ТЗ_МатериалыНаСкладе.Наименование КАК НаименованиеEn,
   | ТЗ_МатериалыНаСкладе.УникальныйИдентификатор КАК УникальныйИдентификатор
   |ПОМЕСТИТЬ ВТ_МатериалыНаСкладе
   |ИЗ
   | &ТЗ_МатериалыНаСкладе КАК ТЗ_МатериалыНаСкладе
   |;
   |
   |ВЫБРАТЬ
   | Материалы.Код КАК Код,
   | Материалы.Наименование КАК Наименование,
   | ВТ_МатериалыНаСкладе.НаименованиеEn КАК НаименованиеEn
   |ИЗ
   | Справочник.Материалы КАК Материалы
   | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_МатериалыНаСкладе КАК ВТ_МатериалыНаСкладе
   | ПО УникальныйИдентификатор(Материалы.Ссылка) = ВТ_МатериалыНаСкладе.УникальныйИдентификатор");

   Запрос.УстановитьПараметр("ТЗ_МатериалыНаСкладе ", ТЗ_МатериалыНаСкладе);
   РезультатЗапроса = Запрос.Выполнить();
   Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
       Записи = РезультатЗапроса.Выбрать();
       Пока Записи.Следующий() Цикл
           // Обход результата запроса по каждой записи в полученной выборке
       КонецЦикла;
   Иначе // Сообщить("Данные отсутствуют!");
   КонецЕсли;

КонецПроцедуры

Получение Уникального ИДентификатора от битой ссылки в 1С 8.3:
&НаСервереБезКонтекста
Функция ПолучитьГУИДБитойССылкиНаСервере(СсылкаНаОбъект) // Вариант 1

   Возврат XMLСтрока(СсылкаНаОбъект);

КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьГУИДБитойССылкиЗапросомНаСервере(СсылкаНаОбъект) // Вариант 2 (запросом)

   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
    |    УНИКАЛЬНЫЙИДЕНТИФИКАТОР(&СсылкаНаОбъект) КАК ГУИД";

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

   Если Записи.Следующий() Тогда
       УИ = Записи.ГУИД;
   Иначе
       УИ = XMLСтрока(Справочники.Материалы.ПустаяСсылка());
   КонецЕсли;

   Возврат XMLСтрока(СсылкаНаОбъект);

КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьГУИДБитойССылки(ГУИДОбъекта) // Вариант 3 (самопис)

   ГУИДСтр = СтрЗаменить(ГУИДОбъекта," (","");
   ГУИДСтр = СтрЗаменить(ГУИДСтр,")","");
   ГУИДСтр = СтрЗаменить(ГУИДСтр,"0x","");
   ГУИДСтр = Сред(ГУИДСтр, Найти(ГУИДСтр,":")+1, СтрДлина(ГУИДСтр));

   // Преобразуем GUID
   ГУИД = Сред(ГУИДСтр,25,8)+"-"+Сред(ГУИДСтр,21,4)+"-"+Сред(ГУИДСтр,17,4)+"-"+Сред(ГУИДСтр,1,4)+"-"+Сред(ГУИДСтр,5,12);

   Возврат ГУИД;

КонецФункции
Примечание:
// Вместо Строка(УникальныйИденификатор) лучше использовать XMLСтрока(УникальныйИдентификатор). Второй работает немного быстрее, в том числе в подобных конструкциях: Строка(СпрСсылка.УникальныйИдентификатор()) и XMLСтрока(СпрСсыка)
1
комментарий
Никита
12 фев 2024
Замерил на большом объеме:

Итоговое время строкой 5 491
Итоговое время XML строкой 6 236

Методы работают примерно в таком соотношении. Строкой() быстрее преобразовывать уникальные идентификаторы чем XMLСтрокой().
____________________
Copyright©, «Программист 1С в г.Минске», 19.11.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому