Замена GUID для объектов

20.01.18

Разработка - Инструментарий разработчика

Обработка позволяет при использовании MSSQL в качестве СУБД поменять GUID объекта. Внимание!!! Данная обработка обращается к СУБД «напрямую», используйте ее на свой страх и риск. Используйте обработку только в случае, если вы четко понимаете, что и для чего вы делаете. Я всех предупредил.

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

Наименование Файл Версия Размер
Обработка "Замена GUID"
.epf 14,29Kb
284
.epf 14,29Kb 284 Скачать

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

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

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

 

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

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

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

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

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

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

Для х64

Provider=SQLOLEDB.1;Server=[Сервер];UID=[Пользователь];pwd=[Пароль];Database=[БазаДанных];

Для х32

Driver={SQL Server};Server=[Сервер];UID=[Пользователь];pwd=[Пароль];Database=[БазаДанных];

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

 

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

 

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

 

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

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

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

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

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

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

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

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

 

Замена GUID 8.2 8.3

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122069    670    389    

712

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 15300 руб.

06.10.2023    7272    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3514    11    1    

33

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177730    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99342    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18104    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28102    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23598    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. xamass 4 10.12.14 08:50 Сейчас в теме
По поиску и замене есть загвоздка, когда УИД меняется в документе, надо бы делать замену и в Движениях, которые сделал этот документ, и еще при этом подсчитать текущие итоги.
2. PiterPrg 36 10.12.14 09:57 Сейчас в теме
Да, на документах я как-то не тестировал. Надо посмотреть. Действительно. НайтиПоСсылкам не ищет среди Регистров...
3. xamass 4 10.12.14 10:13 Сейчас в теме
Транзакции в SQL не отрабатывают, ошибка следующая
Ошибка выполнения запроса:{ВнешняяОбработка.ЗаменаГУИД.МодульОбъекта(98)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Транзакция не может иметь несколько наборов записей с данным типом курсора. Измените тип курсора, завершите транзакцию или закройте один из наборов записей.

Комментировал строки относящиеся к транзакциям, проходит без ошибки
4. PiterPrg 36 10.12.14 11:00 Сейчас в теме
Комментировать транзакции - это не дело :-)

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

Проверь плиз, (поскольку у меня и так и так работает)
Скачай обработку после модерации
или добавь
Чтение.Close();


после

  Возврат 0;
КонецЕсли;


в строках 80 и 110 модуля обработки

т.е. должно стать:

		Возврат 0;
	КонецЕсли;
	Чтение.Close();
	



Если не поможет, придется явно описывать тип курсора.
5. PiterPrg 36 10.12.14 11:45 Сейчас в теме
По - поводу первого замечания.
Действительно, в регистрах замены не происходит.
НайтиПоСсылкам не ищет по регистрам.

Буду разбираться. Пока необходимо перепроведение документов с измененными объектами
6. xamass 4 10.12.14 11:53 Сейчас в теме
По движениям у меня есть такой вариант, в процедуре ПолучитьТаблицы() добавить
Для Каждого Ссылка ИЗ Ссылки Цикл
		Для Каждого Дв ИЗ Ссылка.Метаданные.Движения Цикл
			Если Фильтр.Найти(Дв)<>Неопределено Тогда
				Продолжить;
			КонецЕсли;	
			Фильтр.Добавить(Дв);
		КонецЦикла;	
	КонецЦикла;
Показать


Но при этом он подхватывает и таблицы ИтогиПоСчетамСубконто, которые относятся к бух. регистрам, при замене в этой таблице скрипт падает с ошибкой:
Не удается вставить повторяющуюся строку ключа в объект "dbo._AccRgAT2615" с уникальным индексом "_AccRgA2615_ByPeriod_TRRRRRRN". Повторяющееся значение ключа: .....

Пока не могу найти информацию, когда и при каких обстоятельствах происходит запись в эти таблицы, и надо ли в нашем случае сразу менять там записи, или можно пропускать их.
10. PiterPrg 36 21.07.15 14:20 Сейчас в теме
В новой версии обработки добавлен 3-й алгоритм замены. Происходит попытка заменить ссылку вообще во всех полях базы данных (в движениях документа тоже). При этом ошибки, описанные в (6), игнорируются. Хорошая новость в том, что это обычно итоговые поля регистров и при пересчете итогов все станет хорошо. То что это ссыкотные пути (9) - кто-ж спорит-то, кончно ссыкотные.... А что делать если поиску и замене не хватает памяти? Или эта замена будет выполнятся 2 месяца?
11. as7bs 285 22.03.21 17:17 Сейчас в теме
(10)
В новой версии обработки добавлен 3-й алгоритм замены. Происходит попытка заменить ссылку вообще во всех полях базы данных (в движениях документа тоже). При этом ошибки, описанные в (6), игнорируются. Хорошая новость в том, что это обычно итоговые поля регистров и при пересчете итогов все станет хорошо.

Проверки на наличие в базе GUID на который будет идти замена, как я понимаю нет? Нужно заменить по таблице соответствия GUID у довольно большого списка объектов.
Предполагаю адаптировать вашу обработку следующим образом: Вариант3 - запускаю процедуру ЗаменитьГУИД(старУИД, новУИД) в цикле, предварительно проверяя наличие в базе новУИД у других объектов, в случае наличия пропускаю. После чего выполняю тестирование с перерасчетом итогов. Чем опасна такая замена? Или можно сделать как-то по другому?
Обычным способом через замену пробовал - очень долго.
13. Dmitri93 12 15.02.23 16:41 Сейчас в теме
(11)
Проверки на наличие в базе GUID на который будет идти замена, как я понимаю нет? Нужно заменить по таблице соответствия GUID у довольно большого списка объектов.
Предполагаю адаптировать вашу обработку следующим образом: Вариант3 - запускаю процедуру ЗаменитьГУИД(старУИД, новУИД) в цикле, предварительно проверяя наличие в базе новУИД у других объектов, в случае наличия пропускаю. После чего выполняю тестирование с перерасчетом итогов. Чем опасна такая замена? Или можно сделать как-то по другому?
Обычным способом через замену пробовал - очень долго.

В итоге сделали так? Получилось что-нибудь? Тоже планирую так сделать.
7. PiterPrg 36 10.12.14 13:31 Сейчас в теме
Спасибо, хорошая идея. надо подумать.

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

Нужно как-то исключить таблицы с итогами (по всем регистрам)
И после замены делать пересчет итогов в Тестировании/Исправлении

А с агрегатами - вообще не знаю как, надеюсь они тоже при пересчете обновятся

З.Ы. Закрытие рекордсета помогло?
8. xamass 4 10.12.14 14:08 Сейчас в теме
Да, закрытие рекордсета помогло.
Тестирование и исправление как то совсем не хочется делать, т.к. с таким вариантом получится вряд ли быстрее, чем при обычном поиске и замене.

Да, и мне кажется, что не только пересчет итогов влияет, ведь если просто проводить документ или даже записывать набор записей и после этого сразу обойти таб. итогов запросом, то данные будут обновленные.
9. Brawler 454 12.12.14 09:14 Сейчас в теме
Сыкотные пути какие-то.
Мне проще юзать обработки типа ПоискИЗаменаЗначений или для УФ SearchAndChange_AllModes_0_0_1_4.
Ежели известен ГУИД новый, то значит в базе можно создать объект с этим ГУИД, а потом сделать замену выше указанными обработками, не так быстро конечно, но не в обход механизмов платформы.
12. madonov 169 26.04.22 04:27 Сейчас в теме
Успешно устранил дубли в плане счетов. Спасибо!
Оставьте свое сообщение