Зеркалирование замены ссылок из источника в приемник

Публикация № 1052078

Обмен - Обмен через XML

ПоискИЗаменаДублирующихсяЭлементов обмен данными расширение УникальныйИдентификатор() УПП13 БП30

1
Описание алгоритма зеркалирования действий обработки "ПоискИЗаменаДублирующихсяЭлементов.epf" из источника в приёмник. Наличие системы с пользователями, которые могут создать дубли в справочниках - обязательно :)

Дано: Система с пользователями, которые могут создать дубли в справочнике "Номенклатура". Настроенный обмен справочника из УПП13 в БП30. Дубли на стороне УПП13 удаляются обработкой "ПоискИЗаменаДублирующихсяЭлементов.epf". Обмен элементами справочника выполняется по внутреннему идентификатору.

Цель: Передать данные о произведенных заменах и выполнить замену дублирующихся элементов на стороне БП30.

Описание решения:

Искал в БП30 неиспользуемую нами подсистему, которая имеет регистр сведений для хранения пары идентификаторов+ регламентное задание, чтобы выполнять зеркалирование по расписанию через расширение. Выбрал МониторингЦКК.

Алгоритм состоит из 3х шагов:
 - логирование дубль/оригинал ссылок на стороне источника;
 - обмен таблицей дубль/оригинал ссылок;
 - поиск и замена дублирующихся элементов на стороне приёмника.


Шаг №1. Логирование дубль/оригинал ссылок на стороне источника.

Создаём РС DEV_УдаленныеУУИД
 - измерение ТипСсылки (строка100)
 - измерение УдаленныйУУИД (строка36)
 - ресурс АктуальныйУУИД(строка36)
 - по желанию реквизиты Автор / ДатаСоздания и т.д.

 
 Модуль менеджера

В обработке "ПоискИЗаменаДублирующихсяЭлементов.epf" необходимо вклиниться в алгоритм процедуры УдалитьЭлементыПослеЗамены() и вызвать логирование замены. 

 
 Изменения в обработке ПоискИЗаменаДублирующихсяЭлементов.epf

Шаг №2. Обмен таблицей дубль/оригинал ссылок.

Вносим изменения в правила обмена, чтобы передать таблицу ссылок в приёмник.

Шаг №3. Поиск и замена дублирующихся элементов на стороне приёмника.

На стороне БП30 пишем расширение. Переопределяем модуль ИнцидентыЦККСервер

// Вызывается из регламентной процедуры МониторингЦКК 
&Вместо("ВыполнитьМониторингЦКК") 
Функция DEV_ЗаменитьСсылки() Экспорт

   //Обрабатываем записи с флагом ИнцидентАктуален и скидываем флаг.
   ...
   ПарыЗамен = Новый Соответствие;
   ПарыЗамен.Вставить(СсылкаДубль, СсылкаОригинал);
		
   Параметры = Новый Структура;
   Параметры.Вставить("СпособУдаления", "Пометка");
		
   РезультатВыполнения = ОбщегоНазначения.ЗаменитьСсылки(ПарыЗамен, Параметры);
   ...					
КонецФункции

 

Тестируем и настраиваем регламентное задание

Профит.

Буду рад, если кто поделится своим решением данной проблемы.

Писал и тестировал на 8.3.13.1513 (совместимо с другими версиями 8.*). 

1

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

Наименование Файл Версия Размер
Зеркалирование замены ссылок из источника в приёмник:
.cfe 11,16Kb
22.04.19
0
.cfe 1.0.0.1 11,16Kb Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. VmvLer 23.04.19 11:33 Сейчас в теме
Вроде все грамотно написано и чувствую, что польза в этой обработке есть, но...

я ничего не понял, начиная от заголовка. Далее вообще идет какой-то непоследовательный и путанный треш.
2. mrcamomile 9 23.04.19 16:49 Сейчас в теме
(1) Сорян - умысла запутать точно не было) - попробую описать проблему:
Есть у нас база УПП13. Настроен обмен в БП30. Периодически берем справочник Номенклатура и ищем дубли - (например нашли 3 ссылки - "Чай лимонный" / "Лимонный чай" / "Чай (лимон)"). В УПП обработкой чистим дубли и все ссылки заменяем на "Чай лимонный".
Проблема в том, что в БП30 из-за обмена тоже теперь есть 3 разных номенклатуры, которые надо схлопнуть и оставить именно ту ссылку, которая осталась в УПП.
Для этой рутины и проделываем 3 шага:
- логируем схлопывание дублей номенклатуры на стороне УПП (ссылка которую удалили, ссылка которую оставили)
- обменом этот регистр сведений уходит в БП30
- расширением проходим по таблице ссылок и выполняем замену ссылок на стороне БП30. Т.е. берем ГУИД ссылки которую удалили в УПП и заменяем на ГУИД ссылки которую оставили в УПП.
Надеюсь так прояснилось немного...
3. VmvLer 23.04.19 17:37 Сейчас в теме
да, так понятно.

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