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

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

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

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

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

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

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


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

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

 

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

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

 

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


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

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

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

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

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

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

Параметры = Новый Структура;
Параметры.Вставить("СпособУдаления", "Пометка");

РезультатВыполнения = ОбщегоНазначения.ЗаменитьСсылки(ПарыЗамен, Параметры);
...
КонецФункции

 

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

Профит.

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

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

3 Comments

  1. VmvLer

    Вроде все грамотно написано и чувствую, что польза в этой обработке есть, но…

    я ничего не понял, начиная от заголовка. Далее вообще идет какой-то непоследовательный и путанный треш.

    Reply
  2. mrcamomile

    (1) Сорян — умысла запутать точно не было) — попробую описать проблему:

    Есть у нас база УПП13. Настроен обмен в БП30. Периодически берем справочник Номенклатура и ищем дубли — (например нашли 3 ссылки — «Чай лимонный» / «Лимонный чай» / «Чай (лимон)»). В УПП обработкой чистим дубли и все ссылки заменяем на «Чай лимонный».

    Проблема в том, что в БП30 из-за обмена тоже теперь есть 3 разных номенклатуры, которые надо схлопнуть и оставить именно ту ссылку, которая осталась в УПП.

    Для этой рутины и проделываем 3 шага:

    — логируем схлопывание дублей номенклатуры на стороне УПП (ссылка которую удалили, ссылка которую оставили)

    — обменом этот регистр сведений уходит в БП30

    — расширением проходим по таблице ссылок и выполняем замену ссылок на стороне БП30. Т.е. берем ГУИД ссылки которую удалили в УПП и заменяем на ГУИД ссылки которую оставили в УПП.

    Надеюсь так прояснилось немного…

    Reply
  3. VmvLer

    да, так понятно.

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *