Как получить uid в запросе 1с
Перейти к содержимому

Как получить uid в запросе 1с

  • автор:

Получение уникального идентификатора объекта из ссылки в запросе

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Планируется в версии 8.3.22

По многочисленным просьбам в версии 8.3.22 в язык запросов и в язык выражений СКД добавится функция УникальныйИдентификатор(Ссылка). Параметр Ссылка — выражение, результатом которого является ссылка (кроме ссылок на таблицы внешних источников данных). Функция возвращает уникальный идентификатор переданной ссылки или NULL, если передано значение NULL.

Это нововведение, в частности, упростит задачи интеграции систем на платформе 1С:Предприятие с внешними системами.

Рассмотрим пример. У нас есть интеграция с внешней системой на уровне данных – таблица внешней системы ссылается на справочник Товары в нашей инфобазе.

Структура таблицы внешней системы:

Идентификатор Ключ (число)
Наименование Название товара на английском языке (строка)
УникальныйИдентификатор Ссылка на элемент справочника Товары (уникальный идентификатор)

Нам нужно на стороне 1С вывести содержимое справочника Товары и для каждого товара показать его название на английском языке.

Предположим, мы получили содержимое внешней таблицы в виде таблицы значений (через веб-сервис или внешний источник данных или ещё каким-то образом).

Сейчас связать записи внешней таблицы (лежащие в таблице значений) с элементами справочника Товары можно так:

  1. Добавить в таблицу значений колонку, которую надо заполнить ссылкой на элементы справочника Товары, обойдя все записи таблицы значений в цикле.
  2. Полученную таблицу значений с помощью запроса объединить со справочником Товары.

В версии 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Строка(Выборка.Ссылка.УникальныйИдентификтор()))

Как получить УникальныйИдентификатор (guid) с помощью консоли запросов 1С?

Возможно ли вывести УникальныйИдентификатор (GUID) вместо обычной ссылки с помощью простой консоли запросов в 1С? Как должен выглядеть текст запроса? Например, чтобы получить УникальныйИдентификатор номенклатуры.

  • Вопрос задан более двух лет назад
  • 6464 просмотра

5 комментариев

Простой 5 комментариев

Sgr_A

Цель данного вопроса? Зачем GUID в запросе?
Luna999 @Luna999 Автор вопроса
Sgr_A, цель — получить список УникальныхИдентификаторов тех или иных элементов

Sgr_A

Luna999, это пересказ вашего первоначального вопроса. Я вам о другом. Для чего вам этот список GUID и почему именно в консоли нужно? Может вы не по тому пути идете, решения именно вашего вопроса. Возможно вам подойдет другой подход.

Luna999 @Luna999 Автор вопроса

Sgr_A, именно в консоли потому что для меня (пользователя) других вариантов не вижу. Для чего список — чтобы сопоставить элементы с сайтом.

Sgr_A

чтобы сопоставить элементы с сайтом

— это уже конкретная цель, исходя из нее можно уже как-то формулировать ответы.
Решения вопроса 1

Sgr_A

Могу посоветовать использовать Инструменты разработчика от Tormozit.

605058a9e32d9910310740.png

После выполнения запроса нажать на кнопку (см. скриншот) и выведется GUID.

P.S. Если основной режим работы у Вас — «Управляемое приложение», просто запустите из под обычного.

Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 4

WhiteSsnoww

Андрей Шамин @WhiteSsnoww
Программист

На языке запросов — никак.
Однако, есть удобный набор обработок — Инструменты разработчика
В инструментах разработчика можно выводить результаты запроса с отображением гуидов ссылок и вообще в любых списках справочников и документов. Рекомендую.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *