Как поменять УникальныйИдентификатор (GUID) у объектов?

16. serg1983 20 17.04.12 12:59 Сейчас в теме
у меня щас тоже это проблема возникла. Начальник Организации Плевал на бухгалтеров и тупо создал новую валюту Рубли. Бухгалтера вешаются в бУХГАЛТЕРИИ. Зделал замену с (Диска ИТС) с помощью обработки, вроде все поменял, ан нет При выгрузке Платежных Документов он опознает это в бухгалтерии как в валюту. Че делать не знаю
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
17. Region102 27.05.12 16:22 Сейчас в теме
Как вариант доработать правила, там скорее всего синхронизация по GUID только стоит, надо добавить поиск по полям поиска "Код", "Наименование" к примеру.
18. dvv01 120 05.06.12 11:17 Сейчас в теме
1. Запускаешь "Поиск и замена дублирующих элементов спаравочников и документов" в одной из баз - выбираешь (атоматом) нужный элемент и менаешь на него все ссылки от второго, но второй не удаляеш, а только помечаеши на удаление. Делаеши обмен (можно только помеченного на удаление, но межно и всех ссылающихся на него объектос из обмена). Во второй базе принимаешь обмен - один из объектов становится также помеченным на удаление, запускаеши в ней "Поиск и замена дублирующих элементов спаравочников", но в качестве "правильного" выбираешь не по числу ссылок, а тот, который без пометки - удаляешь дубли. После этого удаляешь в каждой из баз помеченный. Может не получиться с некоторыми канстантами, используемыми в глобальный настройках - ихменяешь обработкой типа:

Об = Константы.ВалютаУправленческогоУчета.СоздатьМенеджерЗначения();
Об.ОбменДанными.Загрузка = Истина;
Об.Значение = ...
Об.Записать();

где значение выбираешь из запроса
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Валюты.Ссылка
|ИЗ
| Справочник.Валюты КАК Валюты
|ГДЕ
| Валюты.ПометкаУдаления = ЛОЖЬ
| И Валюты.Наименование = &Наименование
|";
Запрос.УстановитьПараметр("Наименование", "руб.");
Результат = Запрос.Выполнить().Выбрать();
Результат.Следующий();
Значение = Результат.Ссылка;

Ключевое тут Об.ОбменДанными.Загрузка = Истина; для отключение внутренних проверок типа "Объект не может быть изменен т.к. используется где-то глобально"

А потом уже удалить окончательно.
Можно узать аналогичные обработки типа "Замена ссылок" - схема работы аналогична, только предварительно проверить, работают ли они и с регистрами.
19. dvv01 120 05.06.12 11:21 Сейчас в теме
2. Править "Регистр соответствий для обмена" - для нужной номенклатуры указав "правильный" УИД (если обмены работают через него). Генератор строк приаттачен.
Делал для решения аналогичногой проблемы.

3. Если начальной синхронизации еще не было, то надо перенастроить настройки обмена в "Ковертации данный" - для нужного спрвочника в "конвертация свойств" задать поиск соответствующего по наименованию, а не по УИД
Прикрепленные файлы:
КалькуляторGUID.epf
solar1986; +1 Ответить
20. dimon_upi 22.05.14 06:53 Сейчас в теме
Уважаемый автор, у вас модель обмена данными спроектирована не правильно, если у вас возникают проблемы подобного рода. ИСПОЛЬЗУЙТЕ КОНВЕРТАЦИЮ ДАННЫХ (как писали выше уважаемые "dvv01" и "Region102"), выдергивайте правила обмена, дорабатывайте для правильной синхронизации и используйте. За многолетнюю практику всевозможных обменов проблемы возникали только в случае когда бездумно используется типовой обмен. Прописывать гуиды в чистом виде это необдуманно, вы же не ком объекты пишите где гуид уникален в принципе всегда, поэтому такой подход не всегда уместен, в вашем случае это точно лишнее, проще подвязаться к коду валюты и наименованию.

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

ПыСы: искал немного другое, наткнулся на эту старую заметку =)
21. Bacemo 09.11.14 19:49 Сейчас в теме
В двух организациях я выполнял по принципу Повторно загружал обменом из приемника в источник нужный объек (например Организацию), а потом заменой.
Поскольку думаю, что если Заменить ГУИД только в одном элементе, проблема не решится.
22. provnick 19.11.14 04:39 Сейчас в теме
Доброго всем дня, действительно проблема, у нас обмен между ЗиУП и БУХ и еще между несколькими организациями, то одно задваивается, то другое. Но самое неприятное, что это может происходить в Плане счетов, в ЗиУП один у предопределенного счета идентификатор, в БУХ у такого же предопределенного другой, при выгрузке данных из ЗиУП в БУХ создается новый с идентификатором из ЗиУП (боремся заменой значений), можно найти в файле обмена, заменить, но каждый раз видится сложным, как побороть это, может кто сталкивался.
23. SeverBaP 5 19.11.14 10:23 Сейчас в теме
(22) provnick, надо править правила обмена через конвертацию - сопоставлением все это лечится.
24. provnick 19.11.14 11:07 Сейчас в теме
Есть опыт? Пробовали правила править, ставим галку искать, если не найдено, по коду и наименованию, не удвоились счета, но будет ли правильно, что не совпадают по UUID или это не существенно, главное проводки совпадают? И еще, откровенно говоря не совсем понял, в типовых правилах не стоят галки поиска, это значит по умолчанию ищет по UUID? Так вот после правки по поиску, особенно коснулось физ лиц, все "посыпалось" конкретно (задвоилось), ну и напугались, что будет еще хуже. Если есть желание и опыт, может глянете правила на предмет работоспособности?
25. azhdan 15.12.14 19:57 Сейчас в теме
а что делать Ошибка загрузки информационной базы. В информационную базу загружены не все данные
по причине:
Попытка вставки неуникального значения в уникальный индекс:
Microsoft SQL Native Client: CREATE UNIQUE INDEX terminated because a duplicate key was found for object name 'dbo._AccumRegTotals6944' and index name '_AccumR6944_ByDims_TRRN'. The duplicate key value is (Nov 1 4009 12:00AM, 0x088a001a927fea7211dc86bf5f77f5c0, 0x00000000000000000000000000000000, 0).
HRESULT=80040E2F, SQLSrvr: SQLSTATE=23000, state=1, Severity=10, native=1505, line=1
26. shootnik_kl 28 17.07.09 15:59 Сейчас в теме
Собственно зачем: есть база, объекты в которой были созданы выгрузкой/загрузкой из двух других баз. Но вот с валютами, например фигня получилась их по две теперь, с одинаковыми кодами, и названиями. Это очень мешает, мешать стало не сразу :), поэтому год уже работает так.
Хотелось бы во всех трех базах поменять GUID валют, т.к. замена самих объектов потребует перепроведения всех документов (если я прав), а их 60000 за год работы накопилось и база каждый день нужна... в общем проблемно.
Но в синтаксис помощнике я не нашел способа записать GUID, только получить - что делать? помогите, пожалуйста
27. Душелов 4018 17.07.09 16:14 Сейчас в теме
28. shootnik_kl 28 17.07.09 16:29 Сейчас в теме
Что бы не было дублей валют. Выгрузки/загрузки данных продолжаются, и каждый раз будет создаваться копия валюты. А в константах, например, одна валюта упр.учета, и пользователи не знают какую выбирать - кроме ГУИДа все одинаковое.
-----
рассмотрю другие варианты решения проблемы.
29. Душелов 4018 17.07.09 16:34 Сейчас в теме
Поставьте нужный гуид в регистре соответствий объектов для обмена. А изменять гуид у объектов - это надо додуматься...
rise; Leits; +2 Ответить
30. shootnik_kl 28 17.07.09 18:24 Сейчас в теме
Обмен не стандартный, придется дописывать.
А чем плохо поменять гуид в данном конкретном случае для валюты? Я понимаю, что в целом (идеологически) это не правильно, но тут не могу придумать отрицательных последствий...
31. I_G_O_R 69 17.07.09 19:15 Сейчас в теме
(1)
может это поможет, можно установить для нового элемента:

Валюта = Справочники.Валюты.СоздатьЭлемент();
СтрокаGUID = "b8bea012-3da9-4d01-8855-48811771af7a";
УникальныйИдентификатор = Новый УникальныйИдентификатор(СтрокаGUID);
Ссылка = Справочники.Валюты.ПолучитьСсылку(УникальныйИдентификатор);
Валюта.УстановитьСсылкуНового(Ссылка);
Валюта.Наименование = "новый рубль";
Валюта.Записать();

вообще "поискдулей" разве не сработает? заменит одну валюту на другую без перепроведения и удалит лишнюю
LaninaNata; Leits; sashapere; +3 Ответить
32. I_G_O_R 69 17.07.09 19:20 Сейчас в теме
мне кажется гуид нельзя менять, а то откроешь документ или справочник, а там будет
"<Объект не найден> (1:840c00115b644cd511de6e6f8828e421)"
33. Душелов 4018 17.07.09 22:39 Сейчас в теме
34. WiseSnake 1520 17.07.09 23:10 Сейчас в теме
>например фигня получилась их по две теперь, с одинаковыми кодами, и названиями

Ну во первых ГУИДус у этих валют разный и нафига их менять не пойму, а во вторых возьми обработку поиск и замена значений или объединение дублей обработке есть как на диске ИТС та и на этом сайте и объедини одинаковые валюты.
35. Alex_Sun 24.07.09 10:04 Сейчас в теме
гуид можно менять обработкой поиск и замена значений.
36. Моха 24.07.09 13:28 Сейчас в теме
Ошибочное сообщение :).
37. anddro 84 24.07.09 21:42 Сейчас в теме
В принципе возможно напрямую в скульной базе - непосредственными запросами SQL - очень опасное действие, да менять много где, но как вариант.
38. artbear 1539 25.07.09 08:05 Сейчас в теме
Страна Советов :(
Автор, учись правильно задавать вопросы !
Советчики, учитесь правильно понимать вопросы !

Смена ГУИД никак не возможна и не нужна.
Автор, тебе нужно поменять ссылки на валюты в разных объектах, т.е. сменить ссылочные ГУИД валюты в объектах, а не в самих элементах-валютах.
Юзай обработки типа Поиск-Замена, все будет достаточно просто.

ЗЫ особенно хорошо, если в твоей конфе в модулях объектов юзается схема с ОбменДанными.Загрузка = Истина.
ipoloskov; +1 Ответить
39. shootnik_kl 28 25.07.09 12:54 Сейчас в теме
Всем спасибо, действительно не так все страшно, воспользовался этой обработкой: http://infostart.ru/projects/1134/index.php?p=3&id=1134%2F#comm валюты в регистрах сведениях заменяются быстро, а вот документы, судя по скорости, перепроводяться, благо их мало было...
По поводу зачем (кстати, я так и не отказался от идеи :) ):
1) Есть база 1, валюта USD, из нее данные частично переносятся в базу 3.
2) Есть база 2, валюта та же USD, и из нее данные частично переносятся в базу 3.
3) Сам перенос данных через xml, т.е. нужно при переносе (программировании переноса) любых объектов следить за валютами, написал такое:
		Если (ТипЗнч(Данные.Ссылка) = Тип("ДокументСсылка.УстановкаЦенНоменклатуры")) Тогда	
				СтрокаGUID = "bfe5746c-74b8-11dc-84dd-00046146d635";
				ГрнGUID = Новый УникальныйИдентификатор(СтрокаGUID);
				СтрокаGUID = "bfe5746d-74b8-11dc-84dd-00046146d635";
				USDGUID = Новый УникальныйИдентификатор(СтрокаGUID);				
				Для Каждого стр из Данные.Товары Цикл					
					Если стр.валюта.УникальныйИдентификатор() = ГрнGUID Тогда
						стр.валюта = Справочники.Валюты.НайтиПоКоду("980");
					КонецЕсли;
					Если стр.валюта.УникальныйИдентификатор() = USDGUID Тогда
						стр.валюта = Справочники.Валюты.НайтиПоКоду("840");
					КонецЕсли;
				КонецЦикла;
				Данные.Записать();
			КонецЕсли;
Показать

И такой код везде нужно предусмотреть, где есть дублирующиеся элементы (в данном случае валюты). Но "физический смысл" этой валюты один и тот же, это НЕ разные валюты. И если бы в базе 1 и в базе 2 у них был одинаковый ГУИД, вышеприведенный код не понадобился.
41. PLAstic 295 12.01.18 12:53 Сейчас в теме
(39) Почему-то не было озвучено самое простое и правильное решение.
1) Делаете выгрузку, получаете задвоенные объекты.
2) Анализируете, на какой из элементов ссылаются зашедшие документы.
3) Запускаете "Поиск и удаление дублей", выбираете как оригинальный элемент из п.2, выполняете удаление дублей.
Всё, больше появляться дубли не будут.

Если это массовые задвоения, то в обработке замены дублей всегда надо ручками выбирать элемент, на котором висит меньше объектов. По умолчанию она выбирает наоборот, где больше. Меньше объектов потому - что по старому элементу у вас большая история ссылающихся документов, а по вновь зашедшему только несколько за краткий период загрузки.
Dolour; корум; de0nis; +3 Ответить
40. SeverBaP 5 03.09.09 11:49 Сейчас в теме
У меня тоже барада: незнаю куда лучше прописать по смене ссылок толи в запись толи в чтение XML подскажите куда лучше!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот