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

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

  • автор:

Как получить уникальный идентификатор 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) Но всё-таки для подстраховочки генерируй два идентификатора и создавай свой уникальный из последовательности нечётных символов первого и чётных второго :)))

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

    Опишу свою ситуацию, так как описано у вас не работало, идентификатор объекта( )
    Не совпадает с существовавшим когда-то объектом, хорошо я помнил коды объектов, получив по коду идентификаторы из бекапа и воспользовавшись вашей инструкцией у меня получилось восстановить объекты.

    Недостаточно прав для комментирования

    Как получить уникальный идентификатор объекта, 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 КонецЦикла; 

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

    Механизм уникальности форм

    В платформе "1С:Предприятие 8" реализован механизм, позволяющий найти ранее созданный экземпляр формы. Поиск уже существующего экземпляра формы производится каждый раз при попытке получения формы. Контроль уникальности форм производится на основе анализа различных факторов. Состав данных факторов определяется расширением формы, зависящим от типа основного реквизита формы. Если же основной реквизит формы не установлен или имеет тип, для которого нет расширения формы, то уникальность экземпляров данной формы будет определяться значением владельца формы. Таким образом, в платформе реализована некая стратегия подбора экземпляра формы, зависящая от типа, редактируемого в форме значения.

    Например: для расширения формы списка справочника при подборе формы проверяется владелец формы, далее анализируется признак режима выбора. Для расширения формы элемента справочника производится анализ экземпляра объекта, затем значение ссылки, если же получается форма нового элемента, то, дополнительно, осуществляется проверка признака ЭтоГруппа . Таким образом, получение формы элемента справочника путем вызова метода объекта приводит к получению экземпляра формы именно данного объекта. Вызов метода у ссылки приведет к получению формы элемента справочника, обладающего данной ссылкой (если в памяти имеется два экземпляра объекта с данным значением ссылки, то форма будет получена у одного из них, причем конкретный порядок выбора неопределен). Вследствие этого можно рекомендовать получать форму элемента справочника посредством вызова метода у ссылки, а не у объекта.

    Однако в некоторых случаях необходимо получить новый экземпляр формы (вне зависимости от наличия существующих экземпляров) или же получить определенный экземпляр формы, созданный ранее. Для этих целей предназначен параметр различных методов получения формы ( ПолучитьФорму (), ПолучитьФормуВыбора() , ПолучитьФормуНовогоДокумента() и т.д.). Ключ уникальности выделяет экземпляр формы внутри подмножества экземпляров, определяемого стандартным механизмом уникальности форм.

    Значением ключа может являться значение произвольного типа.

    Например: если необходимо открывать различные экземпляры формы списка справочника сотрудников с установленным отбором по подразделению, то в качестве ключа уникальности (при открытии формы списка) можно передавать ссылку на подразделение, устанавливаемую в качестве отбора. Это позволит иметь различные экземпляры форм списка для различных подразделений и, одновременно, не открывать лишних форм списка для уже просматриваемых списков сотрудников подразделения.

    Удобно в качестве ключа использовать значение типа УникальныйИдентификатор . Передача в качестве ключа нового значения данного типа - гарантирует получение нового экземпляра формы.

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

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