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

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

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

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

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

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

Попробую на недельке, как раз будет задача похожая, но там типы объектов известны.
23. SlavaKron 12.01.22 15:58 Сейчас в теме
(21) Так Ссылка.ПолучитьОбъект() и Строка(Ссылка) тоже обращаются к СУБД. В случае с ПолучитьОбъект(), если ссылка не битая еще и все реквизиты и табличные части будут получены из СУБД, а потом сериализованны. Строка(Ссылка) - тоже не подарок, будут тянуться данные, необходимые для формирования представления, а если еще и переопределен обработчик ОбработкаПолученияПолейПредставления, вообще сказка.
10. SlavaKron 12.01.22 15:27 Сейчас в теме
(7) Количество соединений в запросе будет равно: количество УИДов * Количество метаданных. По вашей ссылке не самое оптимальное решение, там в комментариях есть лучше.
9. user1203706 12 12.01.22 15:26 Сейчас в теме
(8) можно, можно просто пытаться получить ссылку. Но, у автора вроде как список..а там, всё в перемежку.
тут хоть на выходе получит список готовых ссылок, если есть такие в базе с этими уидами
13. nomad_irk 71 12.01.22 15:28 Сейчас в теме
(9)в общем случае, ссылка будет всегда, а вот объект по этой ссылке - может и не быть.
11. user1203706 12 12.01.22 15:28 Сейчас в теме
(10) да это просто пинок в направлении, как можно сделать.
19. user1203706 12 12.01.22 15:44 Сейчас в теме
в 21 релизе нам обещан уникальный идентификатор в тексте запроса.
Интересно, фильтр по нему можжно ставить будет ? Или это будет такая же хрень как и Представление ссылки в тексте запроса ?
Кто в курсе ?
22. nomad_irk 71 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 12 12.01.22 16:46 Сейчас в теме
(24) Ага, спасибо.
Ну хоть тут не подвели. Еще лет 20 и сделают cast и convert в тексте запроса. Чтоб не было тем на форумах из строки в число, из строки в дату..
И лет через 30..коррелированный подзапрос в селект листе.
От тогда заживём.
26. user1203706 12 12.01.22 16:46 Сейчас в теме
Если еще и доступ ко всем DLM..мечта
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)