Guid что это такое в 1с
Перейти к содержимому

Guid что это такое в 1с

  • автор:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как получить UUID, ГУИД, GUID объекта в 1С?

Для программного получения уникального идентификатора объекта, нужна всего лишь ссылка на объект.

GUID = СсылкаНаОбъект.УникальныйИдентификатор();
Справочники.ПодразделенияОрганизаций.НайтиПоКоду("123").УникальныйИдентификатор();

Система вернет 36 символьный строковый код идентификатора.

Найти по GUID

В данном примере получаем ссылку на объект по строковому значению GUID.

СсылкаНаОбъект = Справочники.ПодразделенияОрганизаций.ПолучитьСсылку(Новый УникальныйИдентификатор(GUID));

Задать свой GUID для объекта

Бывают случаи когда например перепутаны элементы справочниках в разных базах, которые необходимо синхронизировать, в данном случае одним из решений является получить нужный идентификаторы объект в базе источнике и присвоить его соответствующему элементу в базе приемнике.

СсылкаНовыйGUID = Справочники.ПодразделенияОрганизаций.ПолучитьСсылку(Новый УникальныйИдентификатор(НовыйGUID)); ОбъектДляИзменения.УстановитьСсылкуНового(СсылкаНовыйGUID);

В данном примере получаем ссылку по уникальному идентификатору и присваиваем ее нужному объекту.

Как заменить уникальный идентификатор для подразделения

В моем случае была необходимость для созданного подразделения в 1С Бухгалтерии установить уникальный идентификатор в соответствии с идентификатором подразделения в 1С ЗУП.

Пример обработки использования можно скачать.

В обработке можно получить GUID по ссылке, найти подразделение по GUID и заменить GUID для объекта.

Как получить уникальный идентификатор объекта, GUID?

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

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

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

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

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

Аренда 1С в облаке

 Инфо = СоздатьОбъект("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 КонецЦикла; 

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

Guid что это такое в 1с

Надо создать уникальный идентификатор для записи данных в внешнюю базу данных. Функции случайного числа я так понимаю нет. Милисикунд тоже нет. Может кто решал эту задачу ?

А чем Новый УникальныйИдентификатор() не нравится?
А где ТелепатБот дрыхнет?
Ну GUID - он длинный, а потом какая гарантия что он стопудово будет уникальным ?
(4) почитай описание.
(4) Бугага! Создай 2 GUID и слепи в одну строку.
(6)+ Или воспользуйся текущей датой в числовом представлении.
А можно получить уникальный идентификатор разреза регистра сведений ?
(8) "уникальный идентификатор разреза" - это что-то новое в отечественной автоматизации?
(9) Есть регистр сведений, у него допустим три измерения и один реквизит.
(8) идентификатор разреза регистра сведений - это видимо список значений измерений

Ну и вот реквизит или ссылка на него лежит же в какой-то одной SQL табличке, и foregin key ями связан с тремя таблицами измерений. Если узнать ID этой строки, то это будет уникальный идентификатор разреза.

А вот что про UUID написано:

УникальныйИдентификатор (UUID) Из строки
Синтаксис: Новый УникальныйИдентификатор()
Параметры: (обязательный)
Тип: Строка. Строка GUID. Строка задается в виде "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где Х - символы обозначающие шестнадцатеричное число.

Описание:
Создает уникальный идентификатор из указанной строки GUID. Уникальность полученного таким образом идентификатора определяется уникальностью строки и поэтому не гарантирована.
Пример:
СтрокаGUID = "a763cfbb-f94f-4c67-8e13-0e96a3a7f353";
НовыйGUID = Новый УникальныйИдентификатор(СтрокаGUID);

Получается что никаких гарантий то нет.

Гарантии даст только господь бог.
Ты бы задачку, что-ли, обрисовал поподробнее. А то абсолютно неясно, что тебе надо.

(13)
УникальныйИдентификатор (UUID)
По умолчанию
Синтаксис:
Новый УникальныйИдентификатор
Описание:
Создает новый гарантированно уникальный идентификатор.
Пример:
Отчет = Отчеты[ИмяОтчета].Создать();
Форма = Отчет.ПолучитьФорму(,,Новый УникальныйИдентификатор);
Форма.ПоказыватьЗаголовок = ПоказыватьЗаголовок;
Форма.ОбновитьОтчет();
Форма.Открыть();

(14) Надо сформировать стопудово уникальный код для каждой записи в регистре сведений.

(16) а в (15) фраза "новый гарантированно уникальный идентификатор" Вас ни на какие мысли не наводит?

GUID можно сказать что стопудово уникальный, т.к. генерируется на основании 6-байтового номера сетевой карты и текущего времени. И содержит достаточно бит, чтобы вероятность "не стопудовости" стремилась к 0.

Отсюда следует, что надо иметь на каждом компе сетевую карту (пусть даже встроенную в материнку) и генерировать GUID-ы по возможности не сплошным потоком (т.е. чтобы время различалось).

(18) Но всё-таки для подстраховочки генерируй два идентификатора и создавай свой уникальный из последовательности нечётных символов первого и чётных второго :)))

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

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