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

20.01.18

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка "Замена GUID"
.epf 14,29Kb
291
291 Скачать (1 SM) Купить за 1 850 руб.

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

Данная обработка позволит вам установить произвольный 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

См. также

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

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

12000 руб.

02.09.2020    171978    964    403    

924

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14471    109    46    

108

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

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

22200 руб.

06.10.2023    17331    43    15    

75

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27333    96    48    

138

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

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

15000 руб.

10.11.2023    11936    45    33    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191317    1153    0    

920

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18107    7    32    

42

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1143    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 294 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 459 12.12.14 09:14 Сейчас в теме
Сыкотные пути какие-то.
Мне проще юзать обработки типа ПоискИЗаменаЗначений или для УФ SearchAndChange_AllModes_0_0_1_4.
Ежели известен ГУИД новый, то значит в базе можно создать объект с этим ГУИД, а потом сделать замену выше указанными обработками, не так быстро конечно, но не в обход механизмов платформы.
12. madonov 261 26.04.22 04:27 Сейчас в теме
Успешно устранил дубли в плане счетов. Спасибо!
Оставьте свое сообщение