gifts2017

Обработка для замены ссылок (дублей) без перепроведения в "1С:Предприятие 8" для любых конфигураций (обычное приложение)

Опубликовал Александр Иванов (tunesoft) в раздел Обработки - Обработка документов

Замена ссылок (дублей) любых справочников (Номенклатура, Контрагенты, Договора и другие) без перепроведения: все числовые значения в регистрах останутся неизменными
Основное отличие нашей обработки в том, что сперва генерируется и выполняется запрос по всем метаданным с получением всех нужных объектов и необходимых реквизитов (добавление в текст запроса только реквизитов заданного типа с отбором по значениям). Далее выполняется замена ссылок по заранее полученным именам таблиц, табличным частям и реквизитам, без излишних проверок в циклах по объектам.

Обработка не ищет дубли контрагентов и других справочников, выполняет только замену ссылок по списку объектов.

Данная обработка была создана более двух лет назад, оттестирована, отлажена и многократно успешно применялась для замены ссылок.

Поиск и замена дублей (обычное приложение)

Основное отличие нашей обработки в том, что сперва генерируется и выполняется запрос по всем метаданным с получением всех нужных объектов и необходимых реквизитов (добавление в текст запроса только реквизитов заданного типа с отбором по значениям). Далее выполняется замена ссылок по заранее полученным именам таблиц, табличным частям и реквизитам, без излишних проверок в циклах по объектам.

Ссылки в каждой таблице заменяются отдельно.

Поиск и замена дублей (обычное приложение)

Регистры бухгалтерии, накопления, расчёта и сведений с регистратором перезаполняются через набор записей.

Регистры сведений без регистратора через менеджер записи.

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

Поиск и замена дублей (обычное приложение)
 
Поиск и замена дублей (обычное приложение)

Информация по всем заменам фиксируется в стандартном журнале регистрации 1С с указанием внутреннего идентификатора и имени таблицы.

Поиск и замена дублей(обычное приложение)

После выполнения процедуры замены ссылок обратите внимание на то, что используемые последовательности документов в вашей базе данных будут сдвинуты на самый ранний объект, в котором была замена ссылки. Вы можете не перепроводить документы, а только изменить дату границы последовательности.

Список ссылок можно сохранить в файл и позднее загрузить, и продолжить замену.

Тип ссылок для всех строк устанавливается из первой строки реквизита "Источник".

Кнопка "Отчет по объектам" позволяет получить полный перечень объектов с указанием таблиц, табличных частей и реквизитов, в которых будет выполнена замена ссылок.

Изображения к публикации содержат дополнительную информацию по использованию обработки.

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

Наименование Файл Версия Размер
Обработка для замены ссылок (дублей) в "1С:Предприятие 8" для любых конфигураций 23
.epf 31,94Kb
27.04.16
23
.epf 31,94Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. pepe (pepe) 13.11.15 17:06
А каким образом происходит поиск ссылок?
2. Александр Иванов (tunesoft) 13.11.15 17:36
(1) pepe, генерируется текст запроса 1С по всем метаданным только по реквизитам, содержащим тип ссылки и отбором по значениям "Источник".
Фрагмент этой функции видно на скрине:
3. Андрей Карпов (karpik666) 13.11.15 18:29
(2) tunesoft, так, а чем стандартный поиск дублей не угодил или из инструментов разработчики, да и на худой конец "Поиск и замена значений" , что на диске ИТС? Все это работает без перепроведения документов.
4. Анянов Михаил (insurgut) 13.11.15 21:27
Так это же стандартная обработка с диска ИТС поиска и замены значений, которая точно так же напрямую в движениях заменяет ссылки без перепроведения документов. Куда смотрят модераторы?
5. Александр Иванов (tunesoft) 13.11.15 22:18
(3) karpik666, согласен, варианты есть, но они не совсем подходят для наших задач.

В нашей обработке упор больше сделан на строгость, правильность замены данных (человеческий фактор), а также на большие объёмы данных.
Сейчас регламент работы с данной обработкой следующий: один сотрудник (бухгалтер) в отдельно специализированной обработке "Поиск дублей" готовит список замен, далее выгружает список во внутреннем представлении в файл, далее этот список у себя открывает главный бухгалтер и утверждает, далее список пересылается программисту, программист загружает файл в обработку "Замена ссылок", формирует необходимые отчёты до замены, выполняется замена и т. д.

Ещё в типовой обработке "ПоискИЗаменаЗначений.epf" с диска ИТС выполняется поиск объектов через стандартную функцию "НайтиПоСсылкам", и далее в цикле выполняется перебор всех реквизитов объектов с проверкой на тип и содержание:
...
Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда

...
Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда

...

это будет медленно при большом количестве объектов для замены.

Основное отличие нашей обработки в том, что сперва генерируется и выполняется запрос по всем метаданным с получением всех нужных объектов и необходимых реквизитов (добавление в текст запроса только реквизитов заданного типа с отбором по значениям).
Далее выполняется замена ссылок уже по заранее полученным именам таблиц, табличным частям и реквизитам, без излишних проверок в циклах.
6. Александр Иванов (tunesoft) 13.11.15 22:19
(4) insurgut, совсем не стандартная, основные отличия описаны в предыдущем комментарии.

ещё избыточные циклы и проверки в типовой обработке "ПоискИЗаменаЗначений.epf":

Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда
СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя);
Пока СтрокаТабЧасти <> Неопределено Цикл


(3) karpik666,
>"или из инструментов разработчики"

внутрь кода не смотрел, но в описании публикации указано "основано на обработке "ПоискИЗаменаДублирующихсяЭлементов" с ИТС"
7. Александр Иванов (tunesoft) 13.11.15 22:56
На двух одинаковых тестовых БД "Бухгалтерия 2" запустил разные обработки, в одной типовую "ПоискИЗаменаЗначений", в другой нашу, настроил одинаковые элементы для замены.

Через несколько секунд "ПоискИЗаменаЗначений" выдала сообщение и прервалась:
Существуют документы, оформленные по договору "Договор №... от 01.01.15г.".
Контрагент договора не может быть изменен, элемент не записан.
Не удалось записать "Договор №... от 01.01.15г. (Договоры контрагентов)"!


Наша обработка успешно завершила выполнение за несколько минут, при этом в журнал регистрации добавлены сообщения вида "Замена <Справочник.Контрагенты;Почта;005;7cba181e-335b-11e4-a84f-001f29081c26> на <Справочник.Контрагенты;Почта России;000011;4a9b2d6c-26b0-11df-97a9-001d7d9bbaae> в таблице <Справочники.ДоговорыКонтрагентов>", данные "Договор №... от 01.01.15г.".
8. Анянов Михаил (insurgut) 14.11.15 07:04
(7) tunesoft, ОбменДанными.Загрузка = Истина, вот и все отличие... Поиск и замена дублирующих использует замены в режиме загрузки данных, поиск и замена значений просто записывает элемент (в итоге выполняются проверки).
9. Александр Иванов (tunesoft) 14.11.15 11:28
(8) insurgut, это знаю, с 1С работаю более 15 лет, смысл в том, что в исходном варианте обработка "ПоискИЗаменаЗначений" не заменяет ссылки и нет флажка на форме чтобы включить режим "ОбменДанными.Загрузка = Истина"
10. Андрей Карпов (karpik666) 14.11.15 17:11
(9) tunesoft, что то непонятно, с 1С более 15 лет, так зачем тогда приводите такое сравнение, или вы думаете, что квалификация посетителей сайта не позволит сказать в чем различия таких данных? Стандартная "поиск и замена значений" предусматривает обмен данными загрузка, просто почему то разработчики не удосужились просто вывести параметр на форму, переделывается это в течении 5 минут, достаточно в функцию замены передавать параметр, что выполнять без проверок. Вам говорят вы изобрели велосипед, притом, что есть уже точно работающие инструменты, и не для одних справочников, а также ПВР, ПВХ, планов счетов, Задач и т.д. А по поводу инструментов, это очень сильно переработанная обработка с ИТС, так как заменяет не только ссылки, но и позволяет оценивать регистры сведений, чтобы не было ошибки на уникальность строк.
11. Александр Иванов (tunesoft) 14.11.15 18:16
(10) karpik666,
>и не для одних справочников, а также ПВР, ПВХ, планов счетов, Задач и т.д.

В нашей обработке тоже есть аналогичная возможность, сейчас в форме в типе элемента явно указано "Справочник", раньше было "Любая ссылка", можно снова выбрать мышкой "Любая ссылка"

>А по поводу инструментов, это очень сильно переработанная обработка с ИТС, так как заменяет не только ссылки, но и позволяет оценивать регистры сведений, чтобы не было ошибки на уникальность строк.

Отлично.
Тоже заменяем в регистре сведений.

>Вам говорят вы изобрели велосипед

Ну и замечательно.
Обработки разные, работают по-разному, и вообще изобретать "велосипеды" полезно :)
12. Андрей Карпов (karpik666) 14.11.15 18:36
(11) tunesoft, ладно будь по вашему, может кому то пригодится.
13. pepe (pepe) 16.11.15 11:02
(12) karpik666, Нужно проверить эту обработку, думаю она быстрее работает. Стандартной обработка на моей базе тупо виснет. Через запросы более эффективнее, только сложность, что нужно разбирать метаданные.
14. Александр Иванов (tunesoft) 16.11.15 15:08
(13) pepe,
>Стандартной обработка на моей базе тупо виснет.

Не должна зависать.
В другой сессии 1С в журнале регистрации смотрели запись транзакций фиксируется ?
База файловая или SQL ? Какой размер БД ?
Пробовали выполнить в конфигураторе "Администрирование - Тестирование и исправление" ?
15. pepe (pepe) 17.11.15 12:06
Это проблема размера базы, база уже 600 гбайт. Тестирование и исправление делали относительно не давно.
16. gulchitai (gulchitai) 28.01.16 05:10
(5) tunesoft. Вы пишите про обработку "Поиск дублей", который готовит список замен, она есть на инфостарте? Как ее можно получить?
17. Александр Иванов (tunesoft) 28.01.16 13:15
(16) gulchitai, какие-то были, можете через поиск найти.
18. gulchitai (gulchitai) 29.01.16 03:35
19. gulchitai (gulchitai) 05.02.16 05:05
Замена ссылок происходит не в режиме ОбменДанными.Загрузка = Истина? При замене появляются сообщения об ошибках, которые у нас вставлены в подписки на события, в них есть такая проверка
Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
Но кажется мы в нее не попадаем... В коде посмотреть не могу, т.к. обработка защищена паролем
20. Александр Иванов (tunesoft) 05.02.16 09:50
(19) gulchitai, запись выполняется в режиме ".ОбменДанными.Загрузка = Истина", но в случае изменения регистра сведений без регистратора используется менеджер записи, у которого нет "ОбменДанными". Почему используется "МенеджерЗаписи", а не "НаборЗаписей" уже не помню :)