Можно ли получить идентификатор объекта в запросе?

1. pilotfitz 12.07.12 15:38 Сейчас в теме
Можно ли получить идентификатор объекта в запросе?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
45. mrGREYka 6 04.08.21 15:35 Сейчас в теме
(1)Можно в запросе, в sql запросе.
50. user1773463 22.03.23 09:39 Сейчас в теме
(1) Я сделал так:

 Запрос = Новый Запрос; 
 Запрос.Текст = "ВЫБРАТЬ
 | Номенклатура.НаименованиеПолное,
 | Номенклатура.Ссылка
 | ИЗ
 | Справочник.Номенклатура КАК Номенклатура"; 
 РезультатЗапроса = Запрос.Выполнить();
 СпрОбъект = РезультатЗапроса.Выбрать(); 
 Пока СпрОбъект.Следующий() Цикл
 СтрокаУИ = XMLСтрока(СпрОбъект.Ссылка); 
 КонецЦикла;
Показать


СтрокаУИ имеет тип строка
51. пользователь 22.03.23 17:55
Сообщение было скрыто модератором.
...
52. user1863362 22.03.23 19:48 Сейчас в теме
(51) Чувак год соображал, что ты так него сразу-то...

Ну тормоз он, что ж теперь?
53. RustamZz 22.03.23 20:18 Сейчас в теме
(50) Не благодари
ВЫБРАТЬ
	УНИКАЛЬНЫЙИДЕНТИФИКАТОР(Номенклатура.Ссылка) КАК УИД
ИЗ
	Справочник.Номенклатура КАК Номенклатура
NicolasCage; +1 Ответить
54. user1773463 23.03.23 09:37 Сейчас в теме
(53) так можно только с 22ой платформе
55. RustamZz 23.03.23 09:40 Сейчас в теме
(54) У меня уже 23 стоит, а 22.1750 у 90% клиентов
56. user1773463 23.03.23 09:42 Сейчас в теме
(55) очень рад за вас. У крупного клиента стоит 20я и просто так он ее не обновит
57. RustamZz 23.03.23 09:53 Сейчас в теме
(56) Надо уметь убеждать, что бы обновили.
2. vlasin 12.07.12 16:04 Сейчас в теме
3. pilotfitz 12.07.12 20:24 Сейчас в теме
4. andrewks 1370 12.07.12 22:19 Сейчас в теме
8. pilotfitz 13.07.12 10:58 Сейчас в теме
(4) andrewks, хотел использовать идентификатор в качестве ключа для организации обмена с другой системой
10. andrewks 1370 13.07.12 11:29 Сейчас в теме
(8) ну, всё равно же запрос потом будешь обрабатывать в 1С. там и вытащишь идентификатор. по сути, Идентификатор лежит в ссылке, но 1С не позволяет достучаться до него напрямую.
11. pilotfitz 13.07.12 11:41 Сейчас в теме
(10) andrewks, в данном случае будет односторонний обмен, мне нужно просто отдавать в стороннюю систему данные. Получается, буду формировать пакет в два этапа 1) запрос 2) заполнение идентификатора при обходе результата, по сути очередной запрос в цикле, который так не любят экзаменаторы. тупняк, как ни крути, было бы лучше получить идентификатор запросом
12. andrewks 1370 13.07.12 13:13 Сейчас в теме
(11) э-э-э... а кто заставляет делать запрос в цикле? заполнение идентификатора при обходе не требует делать запрос в цикле
14. pilotfitz 13.07.12 15:02 Сейчас в теме
(12) andrewks, а метод УникальныйИдентификатор()- это разве не запрос к БД?
18. andrewks 1370 13.07.12 15:20 Сейчас в теме
(14) не факт. хотя от 1С, конечно, всего можно ожидать. если переживаешь за этот момент - проверь. напиши простейший код и считай вызовы сервера
43. Wo0dV0rd258 09.07.21 15:12 Сейчас в теме
(14) Нет. Ссылка, полученная в результате запроса - это сущность, которая уже содержит в себе уникальный идентификатор, возвращенный из БД. Метод УникальныйИдентификатор() просто получает из ссылки на стороне сервера 1С уникальный идентификатор. Запрос к БД не выполняется при этом.
44. FatPanzer 09.07.21 15:35 Сейчас в теме
5. red80 12.07.12 22:34 Сейчас в теме
Нормально. Видимо человек хочет сделать универсальный запрос, анализирующий объекты конфигурации. Угадал?
7. pilotfitz 13.07.12 10:57 Сейчас в теме
(5) red80, не угадал, все проще. 1С является источником данных для другой системы, идентификаторы идеально подходят в качестве ключей
milov.aleksey; +1 Ответить
37. milov.aleksey 398 13.09.19 12:54 Сейчас в теме
(7) Есть проще решение: в СКД--> ОсновнаяСхемаКомпоновкиДанных --> на вкладке "Вычисляемые выражения" добавить:

XMLСтрока(Ссылка)
huzden; jif; GV.; eeeio; fedor40; machneff; vladnet; romankoav; Yan_Malyakov; user1464234; luchik.lipetsk; nagaitseff; user658191_e.churakin; Оберон; UJF; Megaiff; +16 Ответить
6. winapi 60 13.07.12 08:23 Сейчас в теме
Да просто выгружайте результат запроса в ТЗ, там где надо получать идентификаторы, добавляйте колонку идентификатор, обрабатывайте для каждой строки и потом эту ТЗ снова в запрос загружайте и продолжайте работу.
9. pilotfitz 13.07.12 10:59 Сейчас в теме
(6) winapi, спасибо, видимо так и поступлю
13. Alex353 6 13.07.12 14:21 Сейчас в теме
Сделайте отдельный текстовый реквизит и туда сохраняйте значение UUID, потом сможете его вытащить в запросе.
16. pilotfitz 13.07.12 15:07 Сейчас в теме
(13) Alex353, чтобы заполнить значения идентификаторов, мне ведь нужно в цикле перебрать строки? есть предположение, что метод УникальныйИдентификатор() есть ничто иное, как запрос к БД. Ровно как запрос есть обращение к свойствами любого объекта типа Ссылка. Сейчас посмотрю в профайлере, может быть идентификатор существует вместе со ссылкой, ведь по сути ссылка это и есть идентификатор
17. Alex353 6 13.07.12 15:15 Сейчас в теме
(16) pilotfitz, Например если вы синхронизируете справочники, то в модуль объекта в процедуру ПриСохранении() добавьте код, получающий значение UUID и записывающего его в текстовый реквизит этого же элемента и потом уже сможете его из запроса получить напрямую.
19. pilotfitz 13.07.12 15:54 Сейчас в теме
(17) Alex353, теперь понял вашу идею, спасибо. Единственное хотелось бы обойтись без изменения конфы
20. Alex353 6 13.07.12 20:03 Сейчас в теме
(19) pilotfitz, Изменения будут минимальные. Заполнение и сохранение реквизита можно оформить через подписку на события и создать свой общий модуль. Сможете обновляться автоматически, т.к. типовую конфу вы не трогаете, а ваши изменения будут лежать сбоку от нее.
21. pilotfitz 14.07.12 09:47 Сейчас в теме
22. Alien_RS_Forever 432 14.07.12 12:16 Сейчас в теме
(20), (21) лучше создать регистр сведений и в него через подписку на события писать пару ссылка - id. т.о. можно использовать для любых объектов метаданных и не плодить реквизиты. с блокировками там порядок будет: ссылка - измерение, id - ресурс.
gelmoriel; 1cprogr_nsk; METAL; sommid; CaSH_2004; +5 Ответить
23. Alex353 6 14.07.12 13:53 Сейчас в теме
(22) srv7, Не думаю что это правильный вариант в данном случае. UUID постоянная величина и не будет меняться со временем, нет смысла делать еще 1 регистр и потом цеплять его к таблице с объектами.
25. Alien_RS_Forever 432 16.07.12 09:42 Сейчас в теме
(23), (24) здесь фишка не в хранении (повторном) id объекта, а в том, что можно запросами получать таблицы объектов будучи уверенным в их уникальности, например при обменах данными между разными конфигурациями, когда приходит пачка объектов и необходимо определить, в какой объект базы-приемника что загружать. Для примера - такой регистр уже существует в типовых конфигурациях - СоответствиеОбъектовИнформационныхБаз.
26. sergb1979 14.12.12 13:18 Сейчас в теме
(25) srv7, все верно написал. как раз сталкнулся с такой задачей, где номера документов неуникальные в течение дня и стыковать несколько баз тяжело
29. Allexe8.1 03.10.13 17:46 Сейчас в теме
(26) sergb1979, В РИБ используется как раз передача ссылок (уидов) в качестве значений. Предполагается, что уиды уникальны в пределах всех распределенных баз). Выгоднее тем, что для получения реквита объекта, вам не нужно получать его ссылку из базы, из регистра соответствий - эту ссылку можно запихать в объект напрямую.
15. pilotfitz 13.07.12 15:03 Сейчас в теме
хотя может и нет.... ссылка ведь и есть сам идентификатор
28. Allexe8.1 03.10.13 17:41 Сейчас в теме
(15) pilotfitz, Точно нет - любая ссылка содержит тип и идентификатор. Посмотрите ЗначениеВСтрокуВнутр(Ссылка).
Если было бы иначе, то, например, в УФ ссылки нельзя было бы использовать в контексте клиента.
30. Alien_RS_Forever 432 04.10.13 01:40 Сейчас в теме
(28) (29) ну только если тема не безнадежно устарела ))
(15) вот тут (если интересно) в моей публикации можете посмотреть, как из ID получить тип объекта..
Allexe8.1; +1 Ответить
31. Allexe8.1 04.10.13 02:01 Сейчас в теме
(30) srv7, Писал что то подобное, когда начинал с обменами заморачиваться). ИЗ ид можно получить ссылку - только зная тип. Собственно, любая ссылка - это тип (в контексте данной конфигурации) + ИД. Точнее идентификатор типа + идентификатор объекта.
32. Alien_RS_Forever 432 04.10.13 02:18 Сейчас в теме
(31) посмотрите обработку ;) я точно не помню код, но там именно по куску идентификатора можно определить тип таблицы, а по типу таблицы - тип объекта
33. Alien_RS_Forever 432 04.10.13 02:19 Сейчас в теме
(31) типа у нас есть некий ID и только, приехавший из другой базы и нам нужно только по нему понять, что это за объект и создать ссылку с этим ID.. посмотрите вобщем
24. TsMGeorg 16.07.12 09:16 Сейчас в теме
Да вариант с хранением ID объектов представляется мне несколько абсурдным
27. CaSH_2004 372 03.10.13 17:32 Сейчас в теме
(24) Как раз наоборот. 1С это плотно использует как указанов (25). А для многих крупных фирм где запрещено пользоватся конфигуратором как прикажеш получать ID если только консоль запросов доступна?
34. ARL 313 05.06.14 10:12 Сейчас в теме
Столкнулся с подобной задачей.
При формировании выгрузки просто пишем строку на подобии:
Item.ID = XMLСтрока(СтрокаДерева.Номенклатура);
т.к это для ссылки даст " XML представление уникального идентификатора ссылки "(Синтакс-помощник)
SmArtist; Alien_job; TeMochkiN; dger2002; bzmax; BoryaMbi; mymyka; khadjit2003; +8 Ответить
35. makarovy 18.09.18 13:35 Сейчас в теме
С версии 8_3_12 можно.

В языке запросов расширена поддержка значений следующих типов: УникальныйИдентификатор, ХранилищеЗначений.
Реализована возможность создания временных таблиц на основании таблиц значений, содержащих колонки вышеуказанных типов.

Реализована возможность использовать поля и выражения типа УникальныйИдентификатор в операции множественного В.

Источник:
Vitaly1C8; dr2c; andreich_ru; EMelihoff; +4 Ответить
36. Serj1C 483 08.08.19 09:37 Сейчас в теме
(35)
основании таблиц значений, со

Но из ссылки то также нельзя получить уникальный идентификатор в запросе?
42. Xershi 1483 22.10.20 16:57 Сейчас в теме
(36) да передать гуид можно, но ссылку в него преобразовать в запросе нельзя. В СКД можно используя пост обработкой или в спец консолях тоже самое делается после получения данных.
38. Running 06.07.20 21:06 Сейчас в теме
Можно. В настройках запроса, обычно по кнопке ЕЩЕ выбираете из списка Дополнительно (Синий бочонок с шестеренкой) устанавливаете настройки отображать ссылки. После настройки подождать минуты 2 и пробовать свой запрос. Ссылки должны отображаться ссылками.
39. radik_gre 27.08.20 19:58 Сейчас в теме
(38) Можно подробнее про это? Что за кнопка "Еще"?
40. gelmoriel 22.10.20 16:20 Сейчас в теме
(39) Это кнопка в консоли запросов.
Прикрепленные файлы:
41. Xershi 1483 22.10.20 16:55 Сейчас в теме
(39) это пост обработка в консолях.
46. 1v7 235 24.11.21 11:09 Сейчас в теме
//Уже можно:
&НаСервере
Процедура УИДвЗапросе(ТЗ_МатериалыНаСкладе) // Таблица значений

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

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

КонецПроцедуры
Показать
user1406450; +1 1 Ответить
47. CaSH_2004 372 29.06.22 22:25 Сейчас в теме
(46) Если уж начитался чего то на ночь то пиши источник, вот он кстати:
Получение уникального идентификатора объекта из ссылки в запросе
Там хоть подробности описаны что и как, а у тебя какие-то обрывки мыслей.
Вся это лепота доступна только на платформе версии 8.3.22, причем эта версия ознакомительная! Чтобы убедится в этом идем сюда:
Технологическая платформа 8.3
где читаем внизу:
14.06.22 опубликована версия 8.3.22.1368, предназначена для тестирования

Такой вариант я бы только врагу пожелал использовать на своей рабочей базе. Для начала изучите "Сервис публикации ошибок" - чем новее версия тем она глюкавее. Даже статья начинается с:
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.

А вот интересно зачем вы приведенный в статье текст запроса выложили дословно немного поменяв переменные и чуток оформив его? Тестировали? А зачем такое полное следование примеру с указанием ненужных полей? Спрашиваю потому что если бы не это то я бы и не заметил откуда этот плагиат. А так пока что это единственная статья которую я нашел по данной теме и явно не вы ее автор.
Забавно что статья написана 18.11.2021, а коммент ваш 24.11.21, а сама то версия 8.3.22 до сих пор в разработке - уже более полугода.
Кстати было как то что выкладывали в релизы ссылку на 8.4, повисела несколько лет и ее убрали - решили что рано нам такие продвинутые технологии иметь ))
48. sondarium 177 05.07.22 23:56 Сейчас в теме
в 8.3.22 добавили такую возможность:
УникальныйИдентификатор(Спр.Ссылка) - вернёт uuid
ПРЕДСТАВЛЕНИЕ(УникальныйИдентификатор(Спр.Ссылка)) - вернёт строкой uuid

соряныч, выше уже писали)
Vitaly1C8; +1 Ответить
49. Vitaly1C8 06.07.22 00:48 Сейчас в теме
Оставьте свое сообщение

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