gifts2017

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

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

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

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

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

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

См. также

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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