Как получить уникальный идентификатор 1с
Перейти к содержимому

Как получить уникальный идентификатор 1с

  • автор:

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

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

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

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

    В версии 8.3.22 это можно будет сделать гораздо проще.

    Проиллюстрируем это кодом. Содержимое внешней таблицы помещено в таблицу значений ТЗ_ТоварыВнешняя.

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

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