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

Обновлено: 07.07.2024

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

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

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

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

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


Про ссылки, GUID, уникальные идентификаторы и ненайденные объекты.

Итак, что же такое ссылка с точки зрения 1С? Ссылка - это тип данных, однозначно идентифицирующий объект в системе. А как ссылка соотносится с уникальным идентификатором (далее УИД) , получаемым методом УникальныйИдентификатор()? УИД - это по сути свойство ссылки с типом УникальныйИдентификатор, строковое представление которого является 16-ричным числом и выглядит примерно так:

К слову, УИД пустой ссылки всегда такой:

Таким образом, мы теперь понимаем, что при создании нового элемента объектного типа, в платформе 1С запускается специальный генератор случайных чисел и получается GUID, который и записывается в качестве УИДа ссылки.

Можно ли зная УИД найти объект в базе? В общем случае нельзя, нужно дополнительно знать где искать – то есть таблицу данных, имя которой определяется именем объекта метаданных. Но, зная о том, что вероятностью совпадения GUID можно пренебречь, то на практике можно осуществлять поиск ссылки по УИД (например, анализируя файл выгрузки данных в формате XML), плюс учесть возможности программного создания объектов с заданным GUIDом, речь о которых пойдет ниже.

С теорией мы разобрались и теперь проведем небольшой эксперимент. Развенчаем "миф" о невозможности приведения системы в прежнее состояние после удаления объекта ссылочного типа. Использовать будем исключительно средства платформы 1С.

Во вложении пример обработки (для 8.2) с процедурой "УдалитьВосстановитьЭлемент", которая сначала удаляет элемент справочника по передаваемой ссылке, а потом создает новый такой же элемент (для простоты предполагается, что справочник не содержит табличных частей). При этом, после удаления, ссылки на элемент становятся "битыми" (объект не найдент. ), а после воссоздания опять становятся "нормальными".

Объект не найден (48:b3e2001617ec3f2a11e1912c787ec129)
787ec129-912c-11e1-b3e2-001617ec3f2a:

Анализируя XML файлы обмена, мы так же можем встретить знакомые уже GUIDы, которые можно в случае необходимости изменять (такие задачи конечно же редки, но иногда могут встретиться).

Так же, иногда встречаются задачи, когда нам нужно создать и записать сразу два элемента справочника, где один элемент одновременно является владельцем другого и ссылается на него (например, элемент справочника "Номенклатура" с реквизитом "Основная единица измерения" с типом справочник "Единицы измерения", который в свою очередь подчинен номенклатуре).

УИД = Новый УникальныйИдентификатор();

мы можем организовать запись каждого из элементов за один раз.

Замечу, что использовать данные механизмы нужно крайне осторожно, помня о возможных последствиях.

В начале публикации для упрощения понимания основной идеи мы считали, что GUIDы формируются как случайные числа в очень большом диапазоне, к тому же сама идея своей красотой заслуживает к себе внимания. Но, как уже упоминалось ранее, на самом деле в случае платформы 1С это не так - при формировании GUIDов используется время, о чем говорит "1" в первой позиции третьей секции (при случайной генерации на этой позиции "4"):

787ec129-912c- 1 1e1-b3e2-001617ec3f2a

И связи с этим у нас появляется еще одна интересная возможность - получения времени генерации УИДа ссылки. Вот ссылка на публикацию с обработкой получения времени ссылки:

Gigi --> Gigi


Всем привет!
Никто не подскажет как это сделать?
Дело в чем .
Хотя ладно . скину часть задачи
Вот эту часть

Дело в том, что при перезаписи имеющихся объектов в базе приема по данным объектов базы источника, нужна предварительная десериализация.
Которая осуществляется не по коду или номеру, а по уникальному идентификатору.
Поэтому если на пример у принятого из базы источника документа записанного в XML, на пример номер: "00000002". И если документ с таким же номером имеется в базе приема то команда:

Не вернет его как Объект с номером "00000002". А вместо этого вернет пустое значение объекта.
Поэтому нужно как то при создании нового объекта принудительно записать тот идентификатор который указан в данных XML
Вот собственно и весть вопрос.
Короче . КАК ОБЪЕКТУ ПРИСВОИТЬ УКАЗАННЫЙ ИДЕНТИФИКАТОР И ТАК ЕГО И ЗАПИСАТЬ.
Никто не подскажет как можно это сделать по быстрому.
Буду признателен!

Gigi @ Сегодня, 16:46 ,
Молчание не всегда золото . че нет отклика?

Gigi @ Сегодня, 17:10 ,
Видимо уже не рабочее время.
Ладно. я тоже закруглюсь .
Но буду признателен за отклик ..

Gigi --> Gigi


Gigi @ 14.06.19, 18:15 ,
С темой уже разобрался.
Это тестовая запись в модуле объекта

Но по поводу импорта-экспорта данных есть пару вопросов..
Но это во первых другая тема.
Во вторых стоящие вопросы требуют капитального ознакомления с кодом, над которым работал аж целую неделю.
Так что, может выйду на форум и задам их. Правда что бы было понятно, придется скинуть не мало кодовых строк.
Ладно . позже может выйду на форум создав другую тему.
И буду признателен за отклик!
Пока!

77844

Не устроил ответ?
Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.

Реклама

Новые задачи (Фриланс)

Новые вакансии

  • Ведущего программиста приглашаем 1с от 100 000р. от Millana
    Пятница, 28 января, 12:54
  • Приглашаем ведущего программист erp, 150 000 от Millana
    Пятница, 28 января, 12:49
  • Ведущего программиста приглашаем (1С) ЗП от 100 000р. от Millana
    Пятница, 28 января, 10:08

Читайте также: