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 комментариев

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

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

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

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

После выполнения запроса нажать на кнопку (см. скриншот) и выведется GUID.
P.S. Если основной режим работы у Вас — «Управляемое приложение», просто запустите из под обычного.
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 4

Андрей Шамин @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: