(8) ну, всё равно же запрос потом будешь обрабатывать в 1С. там и вытащишь идентификатор. по сути, Идентификатор лежит в ссылке, но 1С не позволяет достучаться до него напрямую.
(10) andrewks, в данном случае будет односторонний обмен, мне нужно просто отдавать в стороннюю систему данные. Получается, буду формировать пакет в два этапа 1) запрос 2) заполнение идентификатора при обходе результата, по сути очередной запрос в цикле, который так не любят экзаменаторы. тупняк, как ни крути, было бы лучше получить идентификатор запросом
(14) Нет. Ссылка, полученная в результате запроса - это сущность, которая уже содержит в себе уникальный идентификатор, возвращенный из БД. Метод УникальныйИдентификатор() просто получает из ссылки на стороне сервера 1С уникальный идентификатор. Запрос к БД не выполняется при этом.
Да просто выгружайте результат запроса в ТЗ, там где надо получать идентификаторы, добавляйте колонку идентификатор, обрабатывайте для каждой строки и потом эту ТЗ снова в запрос загружайте и продолжайте работу.
(13) Alex353, чтобы заполнить значения идентификаторов, мне ведь нужно в цикле перебрать строки? есть предположение, что метод УникальныйИдентификатор() есть ничто иное, как запрос к БД. Ровно как запрос есть обращение к свойствами любого объекта типа Ссылка. Сейчас посмотрю в профайлере, может быть идентификатор существует вместе со ссылкой, ведь по сути ссылка это и есть идентификатор
(16) pilotfitz, Например если вы синхронизируете справочники, то в модуль объекта в процедуру ПриСохранении() добавьте код, получающий значение UUID и записывающего его в текстовый реквизит этого же элемента и потом уже сможете его из запроса получить напрямую.
(19) pilotfitz, Изменения будут минимальные. Заполнение и сохранение реквизита можно оформить через подписку на события и создать свой общий модуль. Сможете обновляться автоматически, т.к. типовую конфу вы не трогаете, а ваши изменения будут лежать сбоку от нее.
22.
Alien_RS_Forever
43214.07.12 12:16 Сейчас в теме
(20), (21) лучше создать регистр сведений и в него через подписку на события писать пару ссылка - id. т.о. можно использовать для любых объектов метаданных и не плодить реквизиты. с блокировками там порядок будет: ссылка - измерение, id - ресурс.
(22) srv7, Не думаю что это правильный вариант в данном случае. UUID постоянная величина и не будет меняться со временем, нет смысла делать еще 1 регистр и потом цеплять его к таблице с объектами.
25.
Alien_RS_Forever
43216.07.12 09:42 Сейчас в теме
(23), (24) здесь фишка не в хранении (повторном) id объекта, а в том, что можно запросами получать таблицы объектов будучи уверенным в их уникальности, например при обменах данными между разными конфигурациями, когда приходит пачка объектов и необходимо определить, в какой объект базы-приемника что загружать. Для примера - такой регистр уже существует в типовых конфигурациях - СоответствиеОбъектовИнформационныхБаз.
(26) sergb1979, В РИБ используется как раз передача ссылок (уидов) в качестве значений. Предполагается, что уиды уникальны в пределах всех распределенных баз). Выгоднее тем, что для получения реквита объекта, вам не нужно получать его ссылку из базы, из регистра соответствий - эту ссылку можно запихать в объект напрямую.
(15) pilotfitz, Точно нет - любая ссылка содержит тип и идентификатор. Посмотрите ЗначениеВСтрокуВнутр(Ссылка).
Если было бы иначе, то, например, в УФ ссылки нельзя было бы использовать в контексте клиента.
30.
Alien_RS_Forever
43204.10.13 01:40 Сейчас в теме
(28) (29) ну только если тема не безнадежно устарела ))
(15) вот тут (если интересно) в моей публикации можете посмотреть, как из ID получить тип объекта..
(30) srv7, Писал что то подобное, когда начинал с обменами заморачиваться). ИЗ ид можно получить ссылку - только зная тип. Собственно, любая ссылка - это тип (в контексте данной конфигурации) + ИД. Точнее идентификатор типа + идентификатор объекта.
33.
Alien_RS_Forever
43204.10.13 02:19 Сейчас в теме
(31) типа у нас есть некий ID и только, приехавший из другой базы и нам нужно только по нему понять, что это за объект и создать ссылку с этим ID.. посмотрите вобщем
(24) Как раз наоборот. 1С это плотно использует как указанов (25). А для многих крупных фирм где запрещено пользоватся конфигуратором как прикажеш получать ID если только консоль запросов доступна?
Столкнулся с подобной задачей.
При формировании выгрузки просто пишем строку на подобии:
Item.ID = XMLСтрока(СтрокаДерева.Номенклатура);
т.к это для ссылки даст " XML представление уникального идентификатора ссылки "(Синтакс-помощник)
В языке запросов расширена поддержка значений следующих типов: УникальныйИдентификатор, ХранилищеЗначений.
Реализована возможность создания временных таблиц на основании таблиц значений, содержащих колонки вышеуказанных типов.
Реализована возможность использовать поля и выражения типа УникальныйИдентификатор в операции множественного В.
(36) да передать гуид можно, но ссылку в него преобразовать в запросе нельзя. В СКД можно используя пост обработкой или в спец консолях тоже самое делается после получения данных.
Можно. В настройках запроса, обычно по кнопке ЕЩЕ выбираете из списка Дополнительно (Синий бочонок с шестеренкой) устанавливаете настройки отображать ссылки. После настройки подождать минуты 2 и пробовать свой запрос. Ссылки должны отображаться ссылками.
&НаСервере
Процедура УИДвЗапросе(ТЗ_МатериалыНаСкладе) // Таблица значений
// Создание выборки
Запрос = Новый Запрос("ВЫБРАТЬ
| ТЗ_МатериалыНаСкладе.Наименование КАК НаименованиеEn,
| ТЗ_МатериалыНаСкладе.УникальныйИдентификатор КАК УникальныйИдентификатор
|ПОМЕСТИТЬ ВТ_МатериалыНаСкладе
|ИЗ
| &ТЗ_МатериалыНаСкладе КАК ТЗ_МатериалыНаСкладе
|;
|
|ВЫБРАТЬ
| Материалы.Код КАК Код,
| Материалы.Наименование КАК Наименование,
| ВТ_МатериалыНаСкладе.НаименованиеEn КАК НаименованиеEn
|ИЗ
| Справочник.Материалы КАК Материалы
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_МатериалыНаСкладе КАК ВТ_МатериалыНаСкладе
| ПО УникальныйИдентификатор(Материалы.Ссылка) = ВТ_МатериалыНаСкладе.УникальныйИдентификатор");
Запрос.УстановитьПараметр("ТЗ_МатериалыНаСкладе ", ТЗ_МатериалыНаСкладе);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;
КонецПроцедуры
(46) Если уж начитался чего то на ночь то пиши источник, вот он кстати:
Получение уникального идентификатора объекта из ссылки в запросе Там хоть подробности описаны что и как, а у тебя какие-то обрывки мыслей.
Вся это лепота доступна только на платформе версии 8.3.22, причем эта версия ознакомительная! Чтобы убедится в этом идем сюда:
Технологическая платформа 8.3 где читаем внизу:
14.06.22 опубликована версия 8.3.22.1368, предназначена для тестирования
Такой вариант я бы только врагу пожелал использовать на своей рабочей базе. Для начала изучите "Сервис публикации ошибок" - чем новее версия тем она глюкавее. Даже статья начинается с:
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
А вот интересно зачем вы приведенный в статье текст запроса выложили дословно немного поменяв переменные и чуток оформив его? Тестировали? А зачем такое полное следование примеру с указанием ненужных полей? Спрашиваю потому что если бы не это то я бы и не заметил откуда этот плагиат. А так пока что это единственная статья которую я нашел по данной теме и явно не вы ее автор.
Забавно что статья написана 18.11.2021, а коммент ваш 24.11.21, а сама то версия 8.3.22 до сих пор в разработке - уже более полугода.
Кстати было как то что выкладывали в релизы ссылку на 8.4, повисела несколько лет и ее убрали - решили что рано нам такие продвинутые технологии иметь ))