Перейти к содержимому

Как получить гуид объекта в 1с в запросе

  • автор:

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 );

Как получить гуид объекта в 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С? Как должен выглядеть текст запроса? Например, чтобы получить УникальныйИдентификатор номенклатуры.

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

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
Программист

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

1С 8.x : Как получить уникальный идентификатор объекта, GUID?

Распечатать

GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов. Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2128 или 3,402 * 10в38), что вероятность того, что в мире будут независимо сгенерированы два совпадающих ключа, крайне мала.

Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х

 ГУИДССЫЛКИ = СсылкаНаОбъект.УникальныйИдентификатор(); 
// или
НоменклатураСсылка = Справочники.Номенклатура.НайтиПоКоду("00013");
Если НЕ НоменклатураСсылка.Пустая() Тогда
Сообщить("GUID = " + НоменклатураСсылка.УникальныйИдентификатор());
КонецЕсли;

Как с помощью запроса получить уникальный идентификатор:
Код 1C v 8.х

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

В 1С 7.7 можно получить так

Через v7plus.dll
Код 1C v 7.x

 Инфо = СоздатьОбъект("AddIn.V7SysInfo"); 
ГлобальноУникальныйИдентификатор = Инфо.СоздатьGUID();

Через WScript
Код 1C v 7.x

 Функция СоздатьGUID() 
TypeLib = CreateObject("Scriptlet.TypeLib");
NewGUID = TypeLib.Guid();
TypeLib = "";
Возврат NewGUID;
КонецФункции

//*******************************************
Процедура Сформировать()
g=СоздатьGUID();
Сообщить("Создан GUID: "+g);
КонецПроцедуры

при OLE доступе:
Код 1C v 7.x

 Если Док_Источник.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 1 Тогда 
Пока Док_Источник.ПолучитьДокумент() = 1 Цикл
Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));

// Для примера Объект возвращает ,
// а ПолучитьИД(объект) = 258156CB
КонецЦикла;

Еще посмотрите метод:
ЗначениеВСтрокуВнутр();
Синтаксис:
ЗначениеВСтрокуВнутр()
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
— значение объекта агрегатного типа данных которое нужно преобразовать.

Разместил: E_Migachev Версии: | 7.x | 8.x | Дата: 16.03.2010 Прочитано: 235422

Распечатать

Возможно, вас также заинтересует

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » — конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=» D:

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

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