Как сделать уникальный идентификатор 1с
Для получения уникального идентификатора объекта, используйте код вида:
Код 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 ,
С темой уже разобрался.
Это тестовая запись в модуле объекта
Но по поводу импорта-экспорта данных есть пару вопросов..
Но это во первых другая тема.
Во вторых стоящие вопросы требуют капитального ознакомления с кодом, над которым работал аж целую неделю.
Так что, может выйду на форум и задам их. Правда что бы было понятно, придется скинуть не мало кодовых строк.
Ладно . позже может выйду на форум создав другую тему.
И буду признателен за отклик!
Пока!
Не устроил ответ?
Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.
Реклама
Новые задачи (Фриланс)
Новые вакансии
- Ведущего программиста приглашаем 1с от 100 000р. от Millana
Пятница, 28 января, 12:54 - Приглашаем ведущего программист erp, 150 000 от Millana
Пятница, 28 января, 12:49 - Ведущего программиста приглашаем (1С) ЗП от 100 000р. от Millana
Пятница, 28 января, 10:08
Читайте также: