Замена идентификаторов справочников

Опубликовал Роман Зиновьев (Широкий) в раздел Обработки - Обработка справочников

Обработка для изменения ГУИДа у выбранных элементов справочника. Имеется различные варианты подбора элементов. Для работы необходим серверный вариант 1с 8.1.

Принцип работы: Обработка сканирует все реквизиты конфигурации на вхождение типа выбранного справочника. Далее она скидывает элементы справочника (у которых надо поменять ГУИД) в служебную таблицу на sql_сервере и дополнительно создает служебные колонки у таблиц, где будет проходить замена.
Процесс замены идентификаторов может занимать значительное время. Время зависит от размеров базы и сложности конфигурации.
Отката транзакции при неудачной обработке нет (данных у меня было много и лог транзакций разрастался просто чудовищно) - поэтому делайте перед запуском архивную копию.
Замену ГУИДов можно производить только у элементов, которые не являются предопределенными.

Скачать файлы

Наименование Файл Версия Размер
-
.1225886052 21,42Kb
25.09.09
321
.1225886052 21,42Kb 321 Скачать

См. также

Комментарии
1. Сергей Старых (tormozit) 4139 07.11.08 08:41 Сейчас в теме
Ну вот уже и ГУИДы менять начали. Куда катится мир?)))
2. Сергей Лунев (luns) 07.11.08 09:00 Сейчас в теме
3. Роман Зиновьев (Широкий) 689 07.11.08 09:06 Сейчас в теме
Когда открывали новые филиалы - ставили нашу рабочую базу без документов..
Позже занялись проектом "консолидация данных".. ну и напоролись что ГУИДы у номенклатуры совпадают во всех филиалах процентов на 80.
4. Сергей Лунев (luns) 07.11.08 09:34 Сейчас в теме
(3) Понятно... а мы консолидируем при помощи свойств. Так можно "объединять" элементы с разными значениями реквизитов.
5. Роман Зиновьев (Широкий) 689 20.01.09 12:16 Сейчас в теме
6. Роман Зиновьев (Широкий) 689 21.01.09 17:03 Сейчас в теме
Добавил отображения состояния обработки.
Исправил ошибку: если заменямый справочник являлся графой отбора журнала - то замена проходила некорректно
7. Алексей (alexdum12) 03.09.09 09:40 Сейчас в теме
Нужная вещь, особенно когда нужно добиться синхронизации нескольких баз со "своей историей" и конфигурацией до запятой в части справочников
8. Aleksandr Korotkov (adminagro) 03.02.10 15:52 Сейчас в теме
Ребята выдает "неудачная попытка соединения с SQL-сервером". ... Помогите может быть кто сталкивался .
9. Роман Зиновьев (Широкий) 689 03.02.10 15:56 Сейчас в теме
Параметры вводишь неправильные..
Попробуй написать логи/пароль с учетом регистра
10. Aleksandr Korotkov (adminagro) 03.02.10 16:49 Сейчас в теме
:cry: Что то не получается. Я ввожу сервер 1C или нужно указывать конкретно SQL сервер где лежит база . И имя и пароль указывать для доступа к базе или к SQL серверу?
11. Роман Зиновьев (Широкий) 689 03.02.10 16:50 Сейчас в теме
12. Aleksandr Korotkov (adminagro) 03.02.10 16:52 Сейчас в теме
?? я вроде не ... но что то не получается.
вот что указываю : SQL сервер server-msa
логин : sa
пароль : ****** :)
база данных как в SQL 1cv81 и ни... сразу без задержек дает отбой
13. Роман Зиновьев (Широкий) 689 03.02.10 16:56 Сейчас в теме
Скуль случаем не экспресс?
Открой Managment Studio и попробуй там законнектиться.
14. Aleksandr Korotkov (adminagro) 03.02.10 16:57 Сейчас в теме
Да вроде пошло :) . Спасибо буду пробывать
15. Aleksandr Korotkov (adminagro) 03.02.10 17:09 Сейчас в теме
Подскажите а можно ли заменить GUID только у выбранного элмента и на тот GUID что я укажу. У меня просто не согласование GUID между синхронизирующимися базами. нужно менять не все и только на то что укажу ?
16. Роман Зиновьев (Широкий) 689 03.02.10 17:11 Сейчас в теме
(15) Можно ... только надо убедится что твой новый ГУИД в базе не существует
17. Aleksandr Korotkov (adminagro) 03.02.10 17:25 Сейчас в теме
Еще один уточняющий вопрос. Когда я делаю подбор и выбирая конкретные позиции справочника. GUID меняется толко в данных позициях или во всем справочнике. Просто закрались сомнения потому что процедура пробигает по каким-то 424 элементов , хотя в списке выбран только один .
18. Роман Зиновьев (Широкий) 689 03.02.10 17:27 Сейчас в теме
Вообще то обработка должна менять ГУИД во всех объектах, где твой справочник может участвовать.
Иначе полезут битые ссылки
19. Aleksandr Korotkov (adminagro) 03.02.10 17:33 Сейчас в теме
Еще один уточняющий вопрос. Почему для любого значения справочника Контрагенты, число "Обработанно реквизитов" равно 424 ?
20. Роман Зиновьев (Широкий) 689 03.02.10 17:35 Сейчас в теме
Я же уже объяснил. Справочник типа "Контрагент" в участвует в различных документах,справочниках и т.д. Во всех этих таблицах нужно заменить гуид
21. Aleksandr Korotkov (adminagro) 03.02.10 17:36 Сейчас в теме
22. Трактор Трактор (Трактор) 1111 19.02.10 16:34 Сейчас в теме
А как обработка поступает с регистрами свойств если после изменения ГУИДа запись становится неуникальной?
Например: Регистр сведений КонтактнаяИнформация измерения Объект, Тип, Вид. Мы изменилили в нём ГУИД одного контрагента на ГУИД другого. Но у этого другого есть записи с теми же значениями Тип и Вид. Что мы увидим в регистре сведений?
23. Роман Зиновьев (Широкий) 689 19.02.10 19:49 Сейчас в теме
(22) Мы увидим ошибку..
Этоа обработка для замены гуидов.. а не для замены элементов справочников.
Т.е. перед тем , как ввести для замены гуид существующего элемента справочника - нужно хорошо подумать
24. Екатерина Толмачева (Umka18) 08.11.11 18:06 Сейчас в теме
Пригодилось когда в 2-х базах с обменами постоянно что-то задваивалось. Пришлось делать синхронизацию по гуид, но сначала их корректировать пришлось
25. Igor2010 (IgorXml) 22.04.12 19:02 Сейчас в теме
Без SQL фокус не получится? С другими СУБД может получиться?
Не все регистры сведений не получаются, если объект используется.
26. Сергей Яковенко (xoxland) 78 19.06.12 13:51 Сейчас в теме
Некорректно, точнее вообще, не обрабатываются ссылочные ресурсы РегистровСведений. исправляется легко:
в модуль формы после строки 117 добавить:
ПеребратьПоляОбъектаМетаданных(ОбъектМетаданных,Представление,"Ресурсы");

Также, не обрабатываются константы, анализировать как исправить не было времени

За идею - зачОт, оч спасло
27. Аркадий Кучер (Abadonna) 3659 24.12.12 05:13 Сейчас в теме
(3)
Когда открывали новые филиалы - ставили нашу рабочую базу без документов..
Позже занялись проектом "консолидация данных".. ну и напоролись что ГУИДы у номенклатуры совпадают во всех филиалах процентов на 80.

Через конфигуратор что ли грузили? Не через скуль выгрузку-загрузку?
28. RU FA (stzk) 07.02.13 15:47 Сейчас в теме
здравствуйте! а GUID у справочника, конкретно валюты - руб. - как поменять? у меня при переносе базы создалась вторая валюта руб., теперь валюта учета руб. не совпадает со старой руб.
29. Олег Б (БольшойЧайник) 26 07.02.13 15:59 Сейчас в теме
(28) проще поменять правила обмена. сделать синхронизацию по коду вместо внутреннего идентификатора
30. Роман Зиновьев (Широкий) 689 07.02.13 16:05 Сейчас в теме
(28) Левые колонки что надо поменять, правые - на что надо поменять
31. Denis j (Xatori111) 20 31.07.13 10:49 Сейчас в теме
(18)Не обрабатывает документы ОперацияБух (т.е. не заменяет Гуиды в этих документах) (Управление производственным предприятием, редакция 1.3 (1.3.38.3) ), Можно сделать?

Точнее Регистры Бухгалтерии не обрабатываются, а именно не находится ссылка в Субконто
32. Роман Зиновьев (Широкий) 689 31.07.13 12:03 Сейчас в теме
Там не сам документ, а его движения.
33. Denis j (Xatori111) 20 31.07.13 12:17 Сейчас в теме
(32)Это и имел ввиду, по субконто не хочет менять Гуиды, починить можно?
34. Роман Зиновьев (Широкий) 689 31.07.13 12:55 Сейчас в теме
35. Denis j (Xatori111) 20 31.07.13 13:34 Сейчас в теме
(34)Работает, сейчас заметил, что как выше писали так же не отрабатывают регистры сведений, попробовал исправить вставить кусочек кода после строки 117 вот что получилось, но что то всё равно ГУиды в РС не меняются
Для каждого ОбъектМетаданных Из Метаданные.РегистрыСведений Цикл
Представление="РегистрСведений."+ОбъектМетаданных.Имя;

ПеребратьПоляОбъектаМетаданных(ОбъектМетаданных,Представление,"Измерения");

ПеребратьПоляОбъектаМетаданных(ОбъектМетаданных,Представление,"Реквизиты");

ПеребратьПоляОбъектаМетаданных(ОбъектМетаданных,Представление,"Ресурсы");
КонецЦикла;
36. Роман Зиновьев (Широкий) 689 31.07.13 13:46 Сейчас в теме
По регистрам сведений код уже был.
Предположу что получается нарушается уникальность значений, если элемент (на что заменяем) уже существовал в РС.
37. Denis j (Xatori111) 20 31.07.13 16:09 Сейчас в теме
(36) А такой ещё вопросик, зачем создаётся колонка в таблицах (там вроде получается сначала Гуид записывается в эту колонку, а потом заменяется), почему нельзя сразу заменить?
38. Роман Зиновьев (Широкий) 689 31.07.13 16:21 Сейчас в теме
39. Роман Зиновьев (Широкий) 689 31.07.13 16:21 Сейчас в теме
По хорошему - надо бы эту обработку вообще удалить.
Слишком много дыр и условностей
40. Denis j (Xatori111) 20 31.07.13 16:48 Сейчас в теме
(39)Ну а что делать если надо:)
41. Андрей Волин (kser87) 1268 05.11.13 09:59 Сейчас в теме
Под 8.2 никак не хочет работать. Поправьте пожалуйста
42. Роман Зиновьев (Широкий) 689 05.11.13 10:10 Сейчас в теме
В описании же написано 8.1
Вы можете конвертировать ее под 8.2 (открыть обработку в конфигураторе) - но тут на свой риск.
43. Алекс Ю (AlexO) 112 08.09.14 10:03 Сейчас в теме
(3) Широкий,
ну и напоролись что ГУИДы у номенклатуры совпадают во всех филиалах процентов на 80.

Так это и есть одна и та же Номенклатура. Вся ваша проблема была совсем в другом - обмены нужно было делать не по UUID (раз распределенка - однозначно убрать), а по коду. И все.
А это - велосипед. С квадратными колесами получился. Да еще и с кузовом вместо багажника (выгрузка в SQL).
Вот как пример записи в таблицы SQL - вексьма. И все.
(24) Umka18,
Пригодилось когда в 2-х базах с обменами постоянно что-то задваивалось.

Опишите проблему точнее. Тоже - обмены РИБ по UUID?
(22) Трактор,
Но у этого другого есть записи с теми же значениями Тип и Вид.

Да ничего не увидим, мы должны однозначно знать, что таких UUID больше в базе нет. Нигде и ни у кого.
44. Алекс Ю (AlexO) 112 08.09.14 10:09 Сейчас в теме
(0)
Далее она скидывает элементы справочника (у которых надо поменять ГУИД) в служебную таблицу на sql_сервере и дополнительно создает служебные колонки у таблиц, где будет проходить замена.

На какие UUID меняются старые? Откуда их берут?
Измененные UUID - попадают обратно в базу? Или так и остаются в таблице SQL?
(27) Abadonna,
Через конфигуратор что ли грузили? Не через скуль выгрузку-загрузку?

Разницы, в данном случае, нет никакой - в контексте ответа. Что SQL, что в конфигуратор - выгрузка в базу-приемник будет именно тех UUID, которые с исходной базе, никаких проверок с "вон той базой РИБ" по ключам не было и не будет.
Отличие - если внутри самой базы в файловой версии (к рпримеру) были задвоенные UUID (так как 1С не озаботилась проверкой их уникальности), то SQL не позволит развернуть у себя такую базу - у него поле Ключа уникально и не подлежит "обсуждению". Проще говоря, ругнется "Ошибка. Create Unique index. Неуникальное значение в уникальный индекс".
И чини как хочешь.
45. Роман Зиновьев (Широкий) 689 08.09.14 10:12 Сейчас в теме
(43)
Так это и есть одна и та же Номенклатура. Вся ваша проблема была совсем в другом - обмены нужно было делать не по UUID (раз распределенка - однозначно убрать), а по коду. И все.
А это - велосипед. С квадратными колесами получился. Да еще и с кузовом вместо багажника (выгрузка в SQL).

Мальчик, тебе кто разрешал в темы взрослым дядькам свои глупости постить?
46. Алекс Ю (AlexO) 112 08.09.14 10:19 Сейчас в теме
(39) Широкий,
По хорошему - надо бы эту обработку вообще удалить.

Возможно, достаточно сменить название - "Практически пример создания таблицы в SQL из 1С".
(40) Xatori111,
Ну а что делать если надо:)

Что надо-то на самом деле?
47. Алекс Ю (AlexO) 112 08.09.14 10:20 Сейчас в теме
(45) Широкий,
Слушай, ты.. не-мальчик... ты давай повежливей.
48. Алекс Ю (AlexO) 112 08.09.14 10:22 Сейчас в теме
(0) Ты проблему даже не описал. А выкатил обработку, делающую финт ради развлечения.
Развлекаться - развлекайся, но пиши об этом прямо, и не груби.
Мальчик не-мальчик.