Уникальный индификатор

1. yispepotri 12.01.22 15:07 Сейчас в теме
Есть ли какая то возможность из уникального индификатора достать тип документа? Например, есть индификатор и нужно понять что он допустим Справочник-Номенклатура
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 12.01.22 15:08 Сейчас в теме
(1)никак. полный GUID состоит из типа объекта + УИД
3. yispepotri 12.01.22 15:10 Сейчас в теме
(2)просто у меня есть список с УИД и нужно понять к каким данным относятся (справочник/документ и какие именно)
5. nomad_irk 72 12.01.22 15:13 Сейчас в теме
(3)Не определите, нужно знать тип объекта, либо при поиске проверять все типы.
в общем случае, у разных типов объектов УИД может быть одинаковым.
27. marv-ua 12.01.22 22:11 Сейчас в теме
6. nomad_irk 72 12.01.22 15:13 Сейчас в теме
(4)ну да, ну да, проверить все типы на существование объекта - очень быстро......
7. user1203706 13 12.01.22 15:16 Сейчас в теме
(6) не так и долго, на самом деле. Обход метаданных, даже скорее всего будет медленнее, чем сам запрос потом к данным.
8. nomad_irk 72 12.01.22 15:18 Сейчас в теме
(7)да сам запрос к данным можно и не делать как бы.....
12. SlavaKron 12.01.22 15:28 Сейчас в теме
(8) А как без запроса к данным?
14. nomad_irk 72 12.01.22 15:29 Сейчас в теме
(12)ссылка.ПолучитьОбъект() - понятно, что медленнее, чем запрос, но не нужно опрашивать все таблицы запросом.
Можно делать только для представления ссылки "<Объект не найден ....".
15. SlavaKron 12.01.22 15:31 Сейчас в теме
(14) Я бы сделал через
ВЫБРАТЬ Ссылка ИЗ ИмяТаблицы1 ГДЕ Ссылка В (&МассивСсылок1)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Ссылка ИЗ ИмяТаблицы2 ГДЕ Ссылка В (&МассивСсылок2)
и т.д. без соединений
16. nomad_irk 72 12.01.22 15:35 Сейчас в теме
(15)если учесть, что необходимо сначала получить ссылку, а ссылка получается только из менеджера объекта, то МассивСсылок будет содержать количество элементов = количество УИДов * Количество метаданных + еще время на передачу всех этих массивов в СУБД + выполнение запроса + возврат результата серверу 1С

По-мне, так проще сразу понимать, битая ссылка или нет и отсеивать ее в цикле сразу же.
17. SlavaKron 12.01.22 15:39 Сейчас в теме
(16) Для каждого типа метаданных будет свой массив ссылок, но общее количество элементов всех массивов да, будет таким. Думаю, одним запросом будет быстрее, чем каждую ссылку проверять запросом в цикле "ВЫБРАТЬ NULL ИЗ ИмяТаблицы ГДЕ Ссылка = &Ссылка".
18. nomad_irk 72 12.01.22 15:43 Сейчас в теме
(17)не надо проверять запросом.

УИ = Новый УникальныйИдентификатор(УИСтрока);
Ссылка = МенеджерОбъекта.ПолучитьСсылку(УИ)

Даст сразу результат и если мы сомневаемся в том, что ссылка не битая, можно сделать Ссылка.ПолучитьОбъект().

Строка(Ссылка) - даст представление ссылки, если оно не "<Объект не найден:......>" то ничего дальше делать не нужно.
20. SlavaKron 12.01.22 15:50 Сейчас в теме
(18)
Ссылка.ПолучитьОбъект() ... Строка(Ссылка)
Явно хуже запроса. Уровень запроса намного ниже предложенных вариантов и позволяет избежать лишних операции обработки данных. По сути это тоже запросы, только с избыточной обработкой.
21. nomad_irk 72 12.01.22 15:54 Сейчас в теме
(20)но нам придется набрать массивы ссылок, чтобы потом их проверить запросом.
Т.е. у нас будет минимальным/не будет выйгрыша, т.к. эти массивы необходимо в СУБД передать, выполнить запрос. вернуть результат.

Попробую на недельке, как раз будет задача похожая, но там типы объектов известны.
23. SlavaKron 12.01.22 15:58 Сейчас в теме
(21) Так Ссылка.ПолучитьОбъект() и Строка(Ссылка) тоже обращаются к СУБД. В случае с ПолучитьОбъект(), если ссылка не битая еще и все реквизиты и табличные части будут получены из СУБД, а потом сериализованны. Строка(Ссылка) - тоже не подарок, будут тянуться данные, необходимые для формирования представления, а если еще и переопределен обработчик ОбработкаПолученияПолейПредставления, вообще сказка.
10. SlavaKron 12.01.22 15:27 Сейчас в теме
(7) Количество соединений в запросе будет равно: количество УИДов * Количество метаданных. По вашей ссылке не самое оптимальное решение, там в комментариях есть лучше.
9. user1203706 13 12.01.22 15:26 Сейчас в теме
(8) можно, можно просто пытаться получить ссылку. Но, у автора вроде как список..а там, всё в перемежку.
тут хоть на выходе получит список готовых ссылок, если есть такие в базе с этими уидами
13. nomad_irk 72 12.01.22 15:28 Сейчас в теме
(9)в общем случае, ссылка будет всегда, а вот объект по этой ссылке - может и не быть.
11. user1203706 13 12.01.22 15:28 Сейчас в теме
(10) да это просто пинок в направлении, как можно сделать.
19. user1203706 13 12.01.22 15:44 Сейчас в теме
в 21 релизе нам обещан уникальный идентификатор в тексте запроса.
Интересно, фильтр по нему можжно ставить будет ? Или это будет такая же хрень как и Представление ссылки в тексте запроса ?
Кто в курсе ?
22. nomad_irk 72 12.01.22 15:57 Сейчас в теме
(19)Скорее, последний вариант.
24. spacecraft 12.01.22 16:17 Сейчас в теме
(19) в 22 релизе:
https://wonderland.v8.1c.ru/blog/poluchenie-unikalnogo-identifikatora-obekta-iz-ssylki-v-zaprose/
Запрос.Текст = 
   "ВЫБРАТЬ
   | ТЗ_ТоварыВнешняя.Наименование КАК НаименованиеEn, 
   | ТЗ_ТоварыВнешняя.УникальныйИдентификатор КАК УникальныйИдентификатор 
   |ПОМЕСТИТЬ ВТ_ТоварыВнешняя 
   |ИЗ 
   | &ТЗ_ТоварыВнешняя КАК ТЗ_ТоварыВнешняя 
   |; 
   | 
   |ВЫБРАТЬ 
   | Товары.Код КАК Код, 
   | Товары.Наименование КАК Наименование, 
   | ВТ_ТоварыВнешняя.НаименованиеEn КАК НаименованиеEn 
   |ИЗ 
   | Справочник.Товары КАК Товары 
   | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТоварыВнешняя КАК ВТ_ТоварыВнешняя 
   | ПО УникальныйИдентификатор(Товары.Ссылка) = ВТ_ТоварыВнешняя.УникальныйИдентификатор 
   |"; 

   Запрос.УстановитьПараметр("ТЗ_ТоварыВнешняя ", ТЗ_ТоварыВнешняя); 
   Данные = Запрос.Выполнить().Выбрать();
Показать
25. user1203706 13 12.01.22 16:46 Сейчас в теме
(24) Ага, спасибо.
Ну хоть тут не подвели. Еще лет 20 и сделают cast и convert в тексте запроса. Чтоб не было тем на форумах из строки в число, из строки в дату..
И лет через 30..коррелированный подзапрос в селект листе.
От тогда заживём.
26. user1203706 13 12.01.22 16:46 Сейчас в теме
Если еще и доступ ко всем DLM..мечта
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот