Получение уникального идентификатора объекта из ссылки в запросе
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Планируется в версии 8.3.22
По многочисленным просьбам в версии 8.3.22 в язык запросов и в язык выражений СКД добавится функция УникальныйИдентификатор(Ссылка). Параметр Ссылка — выражение, результатом которого является ссылка (кроме ссылок на таблицы внешних источников данных). Функция возвращает уникальный идентификатор переданной ссылки или NULL, если передано значение NULL.
Это нововведение, в частности, упростит задачи интеграции систем на платформе 1С:Предприятие с внешними системами.
Рассмотрим пример. У нас есть интеграция с внешней системой на уровне данных – таблица внешней системы ссылается на справочник Товары в нашей инфобазе.
Структура таблицы внешней системы:
| Идентификатор | Ключ (число) |
| Наименование | Название товара на английском языке (строка) |
| УникальныйИдентификатор | Ссылка на элемент справочника Товары (уникальный идентификатор) |
Нам нужно на стороне 1С вывести содержимое справочника Товары и для каждого товара показать его название на английском языке.
Предположим, мы получили содержимое внешней таблицы в виде таблицы значений (через веб-сервис или внешний источник данных или ещё каким-то образом).
Сейчас связать записи внешней таблицы (лежащие в таблице значений) с элементами справочника Товары можно так:
- Добавить в таблицу значений колонку, которую надо заполнить ссылкой на элементы справочника Товары, обойдя все записи таблицы значений в цикле.
- Полученную таблицу значений с помощью запроса объединить со справочником Товары.
В версии 8.3.22 это можно будет сделать гораздо проще.
Проиллюстрируем это кодом. Содержимое внешней таблицы помещено в таблицу значений ТЗ_ТоварыВнешняя.
1С 8.3 Получить УИД в запросе — Программист 1С Минск. Автоматизация бизнеса.
ПРИМЕРЫ КОДА 1С
Перейти в раздел примеры кода 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 );
Как получить uid в запросе 1с
Хай пипл.
Есть запрос.
В запросе одно их полей типа ссылка
оно мне бодро возвращает ссылку
типа такого
Заказ 000000034 от 22.10.2018 15:07:25
А я хочу получить ссылку в виде GUID.
Как такое сделать?
(0) постобработкой через XMLСтрока()
(0) Пипл в твоём лице не знает что в запросе GUID не получить :). Если хочешь получать, то делай в базе строковое поле для GUID и записывай GUID туда.
(1) ГУИДСсылки = XMLСтрока(Ссылка)
Так?
(3) Ну да, самый быстрый способ получения GUID
(3) тебе реально быстрее тут спросить, чем проверить?
(5) Да как-то не тот GUID как я хотел получается однако. Думал что не так написал.
Ок, будем дальше форматировать.
(6) Не стоит копать глубже — закопаешься. Если дело дошло до Гуида в запросе — то надо может быть, как говорил Жванецкий, что-то в консерватории подправить?
ТЗ не я писал, написано выгрузить GUID неком формате, значит выгрузить GUID. Нафуй он им в виде строки нужен, хрен его знает.
(6) из этой строки в обратку вполне себе получается Ссылка
(3) Это все-таки строковое представление, а не сам идентификатор.
Переходи на 8.3.12, там это можно
В некоторых конфигурациях видел — гуид подпиской заполняется в отдельный реквизит.
Ну это при реальной необходимости
(8) С таким подходом далеко не уедешь
(13) чорт только что мои знания устарели, сижу блин на 8.3.10(
За ссылку спасибо.
(11)А поподробнее что можно в 8.3.12?
(13) я глянул документацию и не нашел как из ссылки получить GUID, есдинственное упоминание это:
любые поля со значениями следующих типов: ХранилищеЗначения, УникальныйИдентификатор и ссылка внешнего источника данных.
Но ссылка к ним не относится
(17) А УникальныйИдентификатор ни о чем не говорит вам?
(17) УникальныйИдентификатор это оно и есть.
(19) Нет, Уникальный идентификатор — тип такой, Ссылка создается на основании Уникального Идентификатора, но имеет другой тип, а именно ОбъектМетаданных.Ссылка.
В патч нотсах тоже ничего:
В языке запросов расширена поддержка значений следующих типов: УникальныйИдентификатор, ХранилищеЗначений.
Реализована возможность создания временных таблиц на основании таблиц значений, содержащих колонки вышеуказанных типов.
Реализована возможность использовать поля и выражения типа УникальныйИдентификатор в операции множественного В.
(19) Это оно и есть, но в запросе не получить из ссылки УникальныйИдентификатор.
Там написано, что теперь запрос может работать с
типом УникальныйИдентификатор. Но получить УникальныйИдентификатор ссылки в запросе не получится.
(18)(19) Вопрос был в том как запросом из бд получить уникальный идентификатор без обработки.Ответ был что в 8.3.12 это есть, я найти не могу, поэтому прошу подробностей.
(13) Говорит, что у ссылки вместо основного представления можно получить ее УИД, я перерыл документацию, ибо мне бы это сейчас очень пригодилось, но не нашел ни слова, может я чего не понимаю?(
В запросе естесственно
В СКД когда-то я такое делал.
В голом запросе не получится
(25) В скд в вычисляемом поле — не вопрос вообще
(25) Спасибо за ответ
Почему именно запросом нужно? все равно ведь обрабатывать результат
(23) ВЫРАЗИТЬ(Ссылка КАК УникальныйИдентификатор) ? Такое сработает?)
Не, в запросе _из ссылки_ получить УИД нельзя. Я-то отвечал на вопрос из заголовка темы — что в результате запроса теперь может быть и поле с типом УИД, не более того.
«Не шмогли» / не захотели ребятки из 1С чего-то за 15 лет УИД от ссылки давать возможность получать.
(30)В заголовке нет такого вопроса.
(31) О — опыт. Вопроса нет, а ответ, тем не менее, дан. Учись.
Что-то не получается у меня каменный цветок, везде одинаковое значение выходит.
Причем меняется при каждом прогоне кода.
Пока Выборка.Следующий() Цикл
Сообщить(«ИД — » + Выборка.ИД);
Сообщить(«Ссылка — » + Выборка.Ссылка);
Сообщить(«Ссылка ГУИД- » + XMLСтрока(Выборка.Ссылка));
Сообщить(«Номер — » + Выборка.Номер);
ИД — 42
Ссылка — Заказ 000000016 от 23.10.2018 11:37:49
Ссылка ГУИД- 8a342b2e-d696-11e8-8222-000c29cac5e2
Номер — 000000016
Запись добавлена!
ИД — 43
Ссылка — Заказ 000000017 от 23.10.2018 11:37:49
Ссылка ГУИД- 8a342b2f-d696-11e8-8222-000c29cac5e2
Номер — 000000017
Запись добавлена!
ИД — 44
Ссылка — Заказ 000000018 от 23.10.2018 11:37:49
Ссылка ГУИД- 8a342b30-d696-11e8-8222-000c29cac5e2
Номер — 000000018
Не одинаковые, найди различия в буквах, они там есть
8a342b2e-d696-11e8-8222-000c29cac5e2
8a342b2f-d696-11e8-8222-000c29cac5e2
8a342b30-d696-11e8-8222-000c29cac5e2
Различий не видно?
Мозг так устроен, что если видит совпадение в начале и в конце, то не воспринимает отличие где-то в серединке
А толку то.
Вот второй прогон. Тут другие.
ИД — 41
Ссылка — Заказ 000000024 от 23.10.2018 11:49:42
Ссылка ГУИД- 32e3438a-d698-11e8-8222-000c29cac5e2
Номер — 000000024
Запись добавлена!
ИД — 42
Ссылка — Заказ 000000025 от 23.10.2018 11:49:42
Ссылка ГУИД- 32e3438b-d698-11e8-8222-000c29cac5e2
Номер — 000000025
Запись добавлена!
ИД — 43
Ссылка — Заказ 000000026 от 23.10.2018 11:49:42
Ссылка ГУИД- 32e3438c-d698-11e8-8222-000c29cac5e2
Номер — 000000026
Запись добавлена!
ИД — 44
Ссылка — Заказ 000000027 от 23.10.2018 11:49:42
Ссылка ГУИД- 32e3438d-d698-11e8-8222-000c29cac5e2
Номер — 000000027
Запись добавлена!
Сообщить(«Ссылка ГУИД- » + XMLСтрока(Выборка.Ссылка.УникальныйИдентификтор()))
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
SeiOkami / OneS Public
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
UID объекта в запросе #5
Eremkinig opened this issue Apr 5, 2021 · 7 comments
UID объекта в запросе #5
Eremkinig opened this issue Apr 5, 2021 · 7 comments
Запросы Предложение New feature or request Реализовано Предложение реализовано и доступно в полноценном релизе платформы
Comments
Eremkinig commented Apr 5, 2021 •
edited by SeiOkami
В 1С отсутствует возможность получения УИД ссылки в запроса, а так же соединения с ней.
Хотя физически на SQL эта колонка есть и используется при обращении к Ссылке. Осталось только предоставить к ней доступ с языка запросов 1С.
Это облегчит код, в том числе, в интеграционных задачах с http-сервисами и внешними источниками данных.
Например, когда требуется отдать в качестве ответа на GET-запрос, uid номенклатуры, то приходится получать его постобработкой запроса в цикле перебирать и получать его. А это уже дополнительное время.
Так же была бы удобна возможность приведения УИД к строке (и наоборот)
ВЫБРАТЬ ВЫРАЗИТЬ(Т.Ссылка.УникальныйИдентификатор КАК СТРОКА) . ГДЕ Т.Ссылка.УникальныйИдентификатор В (ВЫБРАТЬ ВТ.УИД ИЗ ВТ)
The text was updated successfully, but these errors were encountered:
