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

Изменить идентификатор объекта

Изменить идентификатор объекта

Я
   elian_hunter

31.08.12 — 16:59

А можно каким-то образом изменить идентификатор объекта? Конкретно мне надо — документа! Вообще где он? как его прочитать? и поменять… ))

   vmv

1 — 31.08.12 — 17:00

нет

   H A D G E H O G s

2 — 31.08.12 — 17:01

Можно.

   H A D G E H O G s

3 — 31.08.12 — 17:01

Но не нужно

   andrewks

4 — 31.08.12 — 17:02

(1)(2)(3) +1 :)

   ptiz

5 — 31.08.12 — 17:03

(0) Идентификатор = Объект

Замена идентификатора = Поиск и замена значений

   elian_hunter

6 — 31.08.12 — 17:15

нет… идентификатор не равно объект… мне нужно прочитать гуид объекта… неужели нет способа??

   ptiz

7 — 31.08.12 — 17:17

(6) Опиши задачу целиком.

   vmv

8 — 31.08.12 — 17:18

гуид — загугли тут или в любой типовой

   Heckfy

9 — 31.08.12 — 17:20

ДокументСсылка.<Имя документа>.УникальныйИдентификатор (DocumentRef.<Имя документа>.UUID)

ДокументСсылка.<Имя документа> (DocumentRef.<Имя документа>)

УникальныйИдентификатор (UUID)

Синтаксис:

УникальныйИдентификатор()

Возвращаемое значение:

Тип: УникальныйИдентификатор.

Описание:

Получает уникальный идентификатор ссылки.

Ссылка может быть получена из уникального идентификатора с помощью метода менеджера ПолучитьСсылку.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

См. также:

ДокументМенеджер, метод ПолучитьСсылку

   elian_hunter

10 — 31.08.12 — 17:21

(7) при загрузке данных из ЗУП в БП, а именно документа «Отражение зарплаты в регл. учете» документ за август  создается, а за февраль удаляется. я попробовал изменить гуид в хмл-е и сработало! видимо каким-то образом совпали гуиды документов за февраль и август (не пойму каким) хочу убедиться что я прав… для этого мне надо прочитать гуиды этих докумнетов

   elian_hunter

11 — 31.08.12 — 17:21

(9) ООО! спасибо!

   ptiz

12 — 31.08.12 — 17:32

(10) Значит, что кто-то сильно умный в ЗУПе взял февральский документ и изменил ему период на август.

   Mikhail Volkov

13 — 31.08.12 — 17:38

(0) Можно, создать другой объект с нужным гуид, затем обработкой Поиск и замена дублирующихся элементов справочников объединить их.

Вот только с предопределенными объектами это не проходит… Кто знает как это сделать средствами 1С? (менять в скуле рискованно)

   elian_hunter

14 — 31.08.12 — 17:40

(12) теоретически, возможно… но, если честно, не совсем понимаю, как это могло произойти…

   andrewks

15 — 31.08.12 — 17:42

(14) заходишь в документ, меняешь, записываешь

   elian_hunter

16 — 31.08.12 — 17:45

(15) да не… не в том дело… просто как бы какой смысл им так делать?…

   hhhh

17 — 31.08.12 — 17:55

(16) у нас пару раз в месяц такое происходит.

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

    Теперь внимание: если бух случайно вместо кнопки «копировать» нажмет кнопку «открыть», (а это ему как два пальца об асфальт) получается твоя ситуация.

Ответ он всегда на поверхности.

   vmv

18 — 31.08.12 — 18:01

(17) а че вы дали тьокам права на вольности с доками прошлого, отчаянные финские парни? При хорошей организации прав такие финты можно делать только в текущем дне, все что было вчера, а тем более в прошлом месяце — извините прочти кучу сообщений о запретах, последствиях, ответься 10 раз — «Да, я не дура и вполне адекватна, сохранить» и только потом позволить изменить что-то в «старом доке»

   hhhh

19 — 31.08.12 — 18:05

(18) эти доки не старые. Может даже сегодняшние.

   hhhh

20 — 31.08.12 — 18:08

(18) и в принципе, если например типовая 1С-ка у клиента, вы за свои деньги будете ему эти запреты вставлять?

   acsent

21 — 31.08.12 — 18:10

поиск и замена дублей

   Mikhail Volkov

22 — 31.08.12 — 20:47

(21) А с предопределенными объектами как?

   Sammo

23 — 31.08.12 — 20:56

(22) Никак. Гуид предопределенного элемента прописан внутри конфигурации и его не изменить. Проводил эксперимент — в скуле менял гуид предопределенного элемента. В результате после очередного сохранения конфигурации был создан еще 1 предопределенный элемент с таким же гуидом.

   Rie

24 — 31.08.12 — 21:00

(23) Ключевое слово — «предопределённый»?

   Mikhail Volkov

25 — 31.08.12 — 22:06

(23) «В результате после очередного сохранения конфигурации был создан еще 1 предопределенный элемент с таким же гуидом» — шалишь? Я еще допускаю одинаковый гуид для разных типов объектов, но в пределах одного типа это невозможно — гуид это ключ!

У меня при обмене баз, когда стоит синхронизация по гуид, такая хрень получается:

Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4795)}: Ошибка записи объекта

           ТипОбъекта             =  Виды контактной информации

           Объект                 =  Телефон физ.лица служебный

           ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Ошибка при попытке вставки записи с неуникальным значением ссылки.

Microsoft OLE DB Provider for SQL Server: Нарушено «PK___Referen__AC8ED0C40F7C1D9B» ограничения PRIMARY KEY. Не удается вставить повторяющийся ключ в объект «dbo._Reference49». Повторяющееся значение ключа: (0xb9493d07ec2909514bd24a29a071e1b7).

HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=E, native=2627, line=1

«Гуид предопределенного элемента прописан внутри конфигурации» — если сам не пропишешь, типа:

Процедура ЗаполнитьПредопределенныхПартнеров() Экспорт

   
//    СправочникОбъект = Справочники.Партнеры.НашеПредприятие.ПолучитьОбъект();    // возмем из базы Кайрос.    10.01.2012 МВ.

   СправочникСсылка = Справочники.Партнеры.ПолучитьСсылку(Новый УникальныйИдентификатор(«97403c2a-4260-481c-8835-1ea87e51a4aa»));

   СправочникОбъект = СправочникСсылка.ПолучитьОбъект();

   Если СправочникОбъект = Неопределено Тогда

       СправочникОбъект = Справочники.Партнеры.НашеПредприятие.СоздатьЭлемент();

       СправочникОбъект.УстановитьСсылкуНового(СправочникСсылка);

   КонецЕсли;

   СправочникОбъект.ДатаРегистрации = Дата(1980, 1, 1);

   Попытка

       СправочникОбъект.Записать();

   Исключение

       Сообщить(«Не удалось записать партнера НашеПредприятие» + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

   КонецПопытки;

И то, это помогает для вновь создаваемой базы. Если предопределенный объект пришел с обновлением, то задать ему нужный гуид таким методом не получается. Может кто-то как-то исхитрился менять на нужный гуид?

   Torquader

26 — 01.09.12 — 22:20

Я чего-то не очень понимаю, зачем менять GUID у объекта ?

Ведь он используется для определения ссылок на сам объект. То есть замена GUID приведёт к созданию другого объекта, но с такими же данными внутри. То есть будет равносильно DELETE+CREATE.

Или вы и все ссылки на ваш объект хотите поменять ?

   sda553

27 — 02.09.12 — 00:01

(26) Необходимости менять гуид нет никогда. Желание его поменять возникает у тех кто ищет простой способ все исправить и не искать истинных причин инцидента.

(22) Почти то же самое, в конфиге создается второй предопределенный элемент, с первого все ссылки в базе перешиватся все на второй, первый предопределнный элемент уничтожается в конфиге. Второй переименовывается в то же имя что было у первого

   Torquader

28 — 02.09.12 — 00:31

(27) Не — один раз возникала необходимость подмены GUID из-за того, что в двух разных базах нужно было сделать один и тот же объект, когда там было уже два объекта — пришлось просто делать замену GUID во всех ссылках.

   sda553

29 — 02.09.12 — 00:46

(28) ну так то да, но сшивание двух баз это все таки не то чтобы подмена гуидов, а наполнение одной базы объектами другой и потом замена ссылок по базе.

А тут не замена одного объекта на другой, а именно смена гуида как цель

   Torquader

30 — 02.09.12 — 00:58

(29) Если в SQL, то как раз просто замена GUID-а, но так обычно не делают.

   Mikhail Volkov

31 — 03.09.12 — 09:04

(27) Будет время, попробую этот метод.

(30) Если это справочник Виды контактной информации (как в моем примере (25))большого риска нет это сделать SQL, а если это например, Управленческая организация, которая используется в документах большого периода… у кого есть опыт замены GUID-а прямо в SQL?

   ptiz

32 — 03.09.12 — 09:30

(31) Теоретически, ничего сложного: через метаданные получить таблицы, где могут быть ссылки на элемент, получить имена этих таблиц в SQL и сделать замену.

На инфостарте есть пример.

   Serg_1960

33 — 03.09.12 — 09:35

Сорри, а какой смысл работы в SQL «напрямую»? Скорость? Но это — нештатная ситуация и алгоритм — «одноразовый». Если замена GUID-ов используется в штатном режиме работы — это бред.

  

Mikhail Volkov

34 — 03.09.12 — 12:39

(33) Для предопределенных объектов штатный режим не подходит. Если только предложенный (27), но тоже далеко не штатный.

Содержание

УИД или уникальный идентификатор

Описание

УИД это определенное значение, однозначно идентифицирующее объект ссылочного типа данных, другими словами, это и есть ссылка уникальная в рамках одной конкретно взятой таблицы, например у справочника номенклатура. УИД есть у любого объекта имеющего ссылочный тип данных, из синтаксис помощника следует, что УИД имеет следующий вид: «XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX», где Х — символы обозначающие шестнадцатеричное число. Прочитать какой текущий уникальный идентификатор существует у ссылки можно с помощью метода УникальныйИдентификатор() например:

КонтрагентПетров = Справочники.Контрагенты.НайтиПоНаименованию(«Петров Иван Сергеевич»);
УИД = КонтрагентПетров. УникальныйИдентификатор();

Использование своего УИД при создании объекта

Изменить УИД у существующего объекта, штатными средствами встроенного языка нельзя. Зато можно при создании нового объекта указать свой УИД. Для этого нужно сделать несколько действий:

  1. Сгенерировать значение типа УИД, используя нужную нам строку(или не используя, как вам будет удобно)

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

    СсылкаСНовымКлиентом = Справочники.Клиенты.ПолучитьСсылку(НовыйGUID);
  3. Установить эту ссылку новому объекту

    НовыйКлиент = Справочник.Клиенты.СоздатьЭлемент();
    НовыйКлиент.УстановитьСсылкуНововго(СсылкаСНовымКлиентом);

Подсказка. Если мы создаем УИД из конкретно взятой строки, то мы можем получить УИД существующего объекта и следовательно в шаге два получить не новую ссылку, а вполне себе существующую. В таком случае при записи объекта полученного в шаге три, система сообщит о том, что не может записать объект с неуникальной ссылкой. Зато получение ссылки по строковому идентификтору, очень удобно использовать при синхронизации между разнородными системами(не 1С) или между разными базами.


Ссылки

Только авторизованные участники могут оставлять комментарии.

При использовании распределенных БД часто возникает проблема «Задвоения» элементов или наоборот, «Объект не найден».

Данная обработка позволит вам установить произвольный GUID для существующих объектов.

При замене GUID объекта обработка изменяет GUID по ссылкам во всех связанных объектах.

Принцип работы с обработкой:

1) В поле «Элемент» указываем объект базы, у которого мы хотим поменять GUID.

Поле «Тек ГУИД» заполняется GUID-ом выбранного элемента.

2) В поле «Нов ГУИД» вводим GUID который мы хотим задать для этого элемента.

3) Указываем строку подключения для базы данных.

Важно. Поскольку обработка происходит на сервере, то строки подключения различаются для х64 и х32 сервера приложений.

4) Тип алгоритма:

«Медленная» замена, с отображением таблиц – При поиске на каждый подходящий реквизит выполняется 3 запроса к MS SQL серверу, при этом выводится информация о таблицах и количествах замены.

Быстрая замена – замена всех значений происходит хранимой процедурой, за одно обращение к MS SQL серверу, однако таблицы для замены определяются при помощи «НайтиПоСсылкам». (Быстрее первого способа, но минимум информации)

Быстрая замена, везде, включая движения документа– замена всех значений происходит хранимой процедурой, за одно обращение к MS SQL серверу. В процессе замены мы пытаемся заменить ссылку в любом подходящем по типу поле в БД. Таким образом, ссылки будут замещаться и в движениях документов и в итогах.

Самый опасный способ! Но мы ведь смелые, без бэкапов ощущения не те (сарказм).

В этом случае желательно сделать тестирование и полный пересчет итогов. А в случае режима «слияния» объектов пересчет вообще обязателен.

5) Для современных релизов платформы у пользователя, под которым осуществляется запуск обработки, необходимо в конфигураторе снять галочку «Защита от опасных действий» в противном случае 1с отказывается полноценно работать с COM-объектами.

Возможен режим «Слияния» объектов.

Предположим, у нас есть 2 элемента справочника с одинаковыми наименованиями и мы хотим, что бы это стал 1 элемент. Можно запустить обработку с поиском и заменой значений, а можно запустить мою обработку.

Выбираем 1 из элементов, «Нов GUID» делаем равным GUID-у второго элемента, отмечаем галочку «Не менять ссылку».

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

Есть элемент справочника Организации можно ему сделать новый УИН как для  нового?

Только у нового можно УИД поставить. Или запросами прямыми. По сути конечно и в файловой можно, но нужно знать как

а поменять УИД между старым и Новым?

нельзя поменять у существующего уже. зачем?

Что бы значил твой вопрос?

Создать новый с заданным уидом и подменить им старый во всех ссылках на него.

Вот тебе замена ссылки у существующего

Сделай новую организацию и ссылки перебрось

Задачу объясни конкретнее, зачем тебе это надо?

Нет задачи, даже в теории чтобы надо было поменять у существующего ГУИД

Иногда это нужно, например для обмена данными, или прямых запросов, в которых завязано на УИДе

Это будет уже другой элемент, такое проканает только с не ссылочными данными

Много баз сливают в одну. Базы делались из одной «рыбы». Т.е. был объект «Наша организация» со своим УИД. Брали Нашу Организацию и делали из нее ООО «Ромашка». Теперь эти лютики и ромашки надо слить в одну базу. И при заливке через ВыгрузкуЗагрузкуДанныхХМЛ Ромашка затирает Лютик и наоборот. Поэтому было бы хорошо в Ромашке поменять УИД заранее чтоб ничего не затереть. Делаю как поиск и замена значений, но очень уж долго работает…

Прямые запросы — нарушение соглашения. Для обменов — делается по сути , т.е. стандартная поиск и замена ссылок, Или регистр соответсвия объектов ИБ юзается… короче задача решается не таким путём как хочет автор

Как насчет ситуации, когда при обмене у разных объектов совпали идентификаторы?

Лучше не УИДы меняй, а поменяй названия и прочую инфу между собой. А УИДы оставь как есть А мне все равно на соглашение, ибо база данных является моей собственностью

ну почему, сливаем данные из двух таблиц в одну — возможно Уиды совпадут

>>А мне все равно на соглашение нуну…

Загрузка выгрузка идет по УИДАм

бывает, за 4 года 1 раз словил :) Но решение не , а опять же Поиск и замена значений. Сиречь создание нового элемента и перекидывание на него ссылок во всей базе

теоретически возможно даже если база не потомок

Ну так что, граждане, есть выход из тунеля?

2 не бывает, разве только сделать так специально. А раз специально сделали — значит думали когда делали. 2 и кто же завел в двух разные объектынх таблицах записи с пересекающимися уидами и зачем он это сделал?

2 тебе уже сказали, что нет.

бывает. В разных ИБ — свой независимый генератор гуидов, пересечение их возможно в теории, но вероятность стремится к нулю

2 настолько быстро сремится к нулю, что то о чем ты описал без специальных действий ты мог словить самое ранее через миллиард лет, а не за четыре года.

настрой загрузку/выгрузку организаций не по УИДАм ,а  по ИНН , в чем проблема то…

когда нибудь случается в первый раз, у меня так документ по обменам бегал, в 2-х разных узлах создались одинаковые гуиды

Какое-то глупое ограничение платформы тянущееся много лет, может в 9.0 все-таки разрешат.

последствия представляешь? вот автор заменит гуид — и пол базы в битых ссылках. Красота, да

Любая вероятность 50% — либо случится, либо нет. (с)

+ вообще — одинаковые гуиды можно найти в больших РИБ базах, но очень редко попадается что они в одном виде документа-справочника

2 что разрешат? Что если поменять уид в записи, то во всех других записях уид тоже автоматом поменятся, и это будет происходить мгновенно?

есть, но не такой как в . Если сливаешь по обменам — вобще проблем нет же, см

Уид — это «фактически» номер объекта в его таблицы. Во всех местах, где идёт ссылка на объект, указывается этот номер. Что будет, если у какой-то записи мы поменяем «номер» — это уже будет другая запись, а от старой останутся неразрешимые ссылки, так как она будет ссылаться на номер, которого нет. То есть, даже если вам каким-то чудом удастся подменить GUID в таблице объекта, всё равно придётся запускать обработку поиска и замены значений, чтобы поменять все ссылки.

Про мгновенно никто не говорит. Но метод такой необходим. Одним общепринятым извращением станет меньше.

2 этот метод реализуем изменением уида в ведущей таблице средствами SQL и во всех ведомых. Или через поиск и замену значений. Если кто-то не знает этого или не умеет этого — то это уже его проблемы а не 1С.

> Можно ли изменить уникальный идентификатор у уже существующего элемента База 10 ГБ размером. Как ты себе это представляешь?

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

бзик-бзик-бзик в 1000 раз быстрее чем перенести 10Гб документов на новую организацию

2 Не стали вообще. НО и создать другой элемент справочника и запустить поиск и замену значений в файловом варианте — тоже не очень долго. Если вдруг это долго, то значит либо базе давно стоит быть в клиент-серверном варианте, либо опять же, не делать вообще

из-за отсутсивя элементарного метода приходится выбирать какой изврат менее гиморен в данном случае. типично одинэсный подход)

думаю, напрямую в таблице SQL можно поменять

2 бзик-бзик-бзик и есть перенести документы на новую организацию, и ТС говорит что это медленно у него.

2 да нет, типично одинэсный подход говорить что метод которого не должно быть вообще, нужен

> бзик-бзик-бзик в 1000 раз быстрее не получится так на физическом уровне.  GUID — это ссылка. Это то же самое, что ты во всех таблицах документов новую ссылку пропишешь.

изменение ссылки во всех таблицах сравниваешь с полным перепроведением документов по новой организации? совесть есть?

2 кто сказал о полном перепроведении? ты давно заглядывал в поиск и замену значений?

напиши правила обмена или возьми с БСП

+ там есть возможность проассоцииоровать один элемент с другим

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

2 зачем она отрабатывает? потому что криворукие программисты не поставили проверку на ОбменДанными.Загрузка?

, посмотри в своей конфигурации наличие регистра сведений  СоответствиеОбъектовДляОбмена. И если он есть — изучи зачем он нужен и как его использует конфигурация.

Заменить 1 поле быстрее, чем переписывать весь объект.

Тэги: 1С 8

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

Понравилась статья? Поделить с друзьями:

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

  • Как изменить уникальный идентификатор компьютера
  • Как изменить универсальный монитор не pnp
  • Как изменить улыбку упражнения
  • Как изменить улыбку на лице
  • Как изменить укладку волос

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии