Как получить уникальный идентификатор 1с
Добрый вечер.
Задача следующая требуется получить уникальный идентификатор ссылки справочника. Преобразовать этот уид в строку, а затем произвести обратное действие. Строку с уидом («9ca26c88-a028-11e2-81a6-000423c303ee»), преобразовать обратно в уникальной идентификатор, для получения ссылки справочника.
уид = Номенклатура.УникальныйИдентификатор();
стрУид = Строка(уид);
ПолучитьСсылку() — надо передавать уид, а у меня есть только строка с уидом. Как её преобразовать в уид обратно?
Нашел!
Новый УникальныйИдентификатор(стрУид)
Программирование 1С 8.х для начинающих
- Вы здесь:
- Главная

- Статьи

- Общие вопросы

- Введение

- Уникальный идентификатор
Поделитесь в соцсетях
Общие вопросы
Уникальный идентификатор
Подробности Категория: Введение
-
- Если Вам встречались в базе записи «», то значит настала пора познакомитсья с Уникальным идентификатором.
Уникальный идентификатор (GUID)
Если Вам встречались в базе записи «», то значит настала пора познакомитсья с Уникальным идентификатором .
Уникальный идентификатор — это уникальный набор символов который характерезует экземпляр метаданных объектного типа в 1С(Напрмимер, элемент справочника или документ). По сути ссылка и является уникальным идентификатором, причем даже у разных видов объектов он не может быть похож. Выглядит он примерно так:
de80b7c8-aa22-11dc-a0f4-0011d85708ff
Т.е. это набор из 32 шестнадцатеричных цифр разделенных дефисами.
Надпись появляется в базе когда есть ссылка(уникальный идентификатор) на объект, а объекта в базе нет. Такое может возникнуть или при удалении объектов без проврки ссылочной целостности или при обмене между базами.
Разберем для примера надпись: (36:9c4e0022642fda9811e10393c0d776fd)
Для начала узнаем какой тип объекта был удален, для этого используем метод ПолучитьСтруктуруХраненияБазыДанных(), он возвращает таблицу значений(по умолчанию в формате SDBL) где указано соответсвие внутренних идентификаторов и объектов метаданных.
Например можно написать такой код:
В ней мы находим идентификатор который в конце содержит 36 (цифры до двоеточия), но только не в составе числа( Document2836 ), а точное соответсвие. В нашем случае это следующая строка:
Reference36 Справочник.Номенклатура Значит удаленный элемент был элементом справочника «Номенклатура».
Как Вы заметили внутри скобок находится тип объекта и уникальный идентификатор строкой.
Теперь мы можем на одной из архивных копий найти удаленный элемент, добавив дефисы в имеющуюся у нас строку идентификтора:
ГУИД = Новый УникальныйИдентификатор("9c4e0022-642f-da98-11e1-0393c0d776fd"); СсылкаНаУдаленныйЭлемент = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);Зная все значения полей мы можем вручную или с помощью обработок воссоздать удаленный элемент, но у них будет одно главное отличие — разные Уникальные идентификаторы. А если мы хотим восстановить элемент, то и идентификатор нужно восстановить тот же. Для этого нужно использовать метод «УстановитьСсылкуНового«, например так:
ВосстанавливаемыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); ГУИД = Новый УникальныйИдентификатор("9c4e0022-642f-da98-11e1-0393c0d776fd"); СсылкаНаУдаленныйЭлемент = Справочники.Номенклатура.ПолучитьСсылку(ГУИД); ВосстанавливаемыйЭлемент.УстановитьСсылкуНового(СсылкаНаУдаленныйЭлемент);Теперь можно заполнить остальные поля.
Комментарии
+2 #1 Lancaster 10.07.2017 15:03
Опишу свою ситуацию, так как описано у вас не работало, идентификатор объекта( )
Не совпадает с существовавшим когда-то объектом, хорошо я помнил коды объектов, получив по коду идентификаторы из бекапа и воспользовавшись вашей инструкцией у меня получилось восстановить объекты.Недостаточно прав для комментирования
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 );Получение уникального идентификатора объекта из ссылки в запросе
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.Планируется в версии 8.3.22
По многочисленным просьбам в версии 8.3.22 в язык запросов и в язык выражений СКД добавится функция УникальныйИдентификатор(Ссылка). Параметр Ссылка — выражение, результатом которого является ссылка (кроме ссылок на таблицы внешних источников данных). Функция возвращает уникальный идентификатор переданной ссылки или NULL, если передано значение NULL.
Это нововведение, в частности, упростит задачи интеграции систем на платформе 1С:Предприятие с внешними системами.
Рассмотрим пример. У нас есть интеграция с внешней системой на уровне данных – таблица внешней системы ссылается на справочник Товары в нашей инфобазе.
Структура таблицы внешней системы:
Идентификатор Ключ (число) Наименование Название товара на английском языке (строка) УникальныйИдентификатор Ссылка на элемент справочника Товары (уникальный идентификатор) Нам нужно на стороне 1С вывести содержимое справочника Товары и для каждого товара показать его название на английском языке.
Предположим, мы получили содержимое внешней таблицы в виде таблицы значений (через веб-сервис или внешний источник данных или ещё каким-то образом).
Сейчас связать записи внешней таблицы (лежащие в таблице значений) с элементами справочника Товары можно так:
- Добавить в таблицу значений колонку, которую надо заполнить ссылкой на элементы справочника Товары, обойдя все записи таблицы значений в цикле.
- Полученную таблицу значений с помощью запроса объединить со справочником Товары.
В версии 8.3.22 это можно будет сделать гораздо проще.
Проиллюстрируем это кодом. Содержимое внешней таблицы помещено в таблицу значений ТЗ_ТоварыВнешняя.