Дано: Система с пользователями, которые могут создать дубли в справочнике "Номенклатура". Настроенный обмен справочника из УПП13 в БП30. Дубли на стороне УПП13 удаляются обработкой "ПоискИЗаменаДублирующихсяЭлементов.epf". Обмен элементами справочника выполняется по внутреннему идентификатору.
Цель: Передать данные о произведенных заменах и выполнить замену дублирующихся элементов на стороне БП30.
Описание решения:
Искал в БП30 неиспользуемую нами подсистему, которая имеет регистр сведений для хранения пары идентификаторов+ регламентное задание, чтобы выполнять зеркалирование по расписанию через расширение. Выбрал МониторингЦКК.
Алгоритм состоит из 3х шагов:
— логирование дубль/оригинал ссылок на стороне источника;
— обмен таблицей дубль/оригинал ссылок;
— поиск и замена дублирующихся элементов на стороне приёмника.
Шаг №1. Логирование дубль/оригинал ссылок на стороне источника.
Создаём РС DEV_УдаленныеУУИД
— измерение ТипСсылки (строка100)
— измерение УдаленныйУУИД (строка36)
— ресурс АктуальныйУУИД(строка36)
— по желанию реквизиты Автор / ДатаСоздания и т.д.
Модуль менеджера
В обработке "ПоискИЗаменаДублирующихсяЭлементов.epf" необходимо вклиниться в алгоритм процедуры УдалитьЭлементыПослеЗамены() и вызвать логирование замены.
Изменения в обработке ПоискИЗаменаДублирующихсяЭлементов.epf
Шаг №2. Обмен таблицей дубль/оригинал ссылок.
Вносим изменения в правила обмена, чтобы передать таблицу ссылок в приёмник.
Шаг №3. Поиск и замена дублирующихся элементов на стороне приёмника.
На стороне БП30 пишем расширение. Переопределяем модуль ИнцидентыЦККСервер
// Вызывается из регламентной процедуры МониторингЦКК
&Вместо("ВыполнитьМониторингЦКК")
Функция DEV_ЗаменитьСсылки() Экспорт
//Обрабатываем записи с флагом ИнцидентАктуален и скидываем флаг.
...
ПарыЗамен = Новый Соответствие;
ПарыЗамен.Вставить(СсылкаДубль, СсылкаОригинал);
Параметры = Новый Структура;
Параметры.Вставить("СпособУдаления", "Пометка");
РезультатВыполнения = ОбщегоНазначения.ЗаменитьСсылки(ПарыЗамен, Параметры);
...
КонецФункции
Тестируем и настраиваем регламентное задание
Профит.
Буду рад, если кто поделится своим решением данной проблемы.
Писал и тестировал на 8.3.13.1513 (совместимо с другими версиями 8.*).
Вроде все грамотно написано и чувствую, что польза в этой обработке есть, но…
я ничего не понял, начиная от заголовка. Далее вообще идет какой-то непоследовательный и путанный треш.
(1) Сорян — умысла запутать точно не было) — попробую описать проблему:
Есть у нас база УПП13. Настроен обмен в БП30. Периодически берем справочник Номенклатура и ищем дубли — (например нашли 3 ссылки — «Чай лимонный» / «Лимонный чай» / «Чай (лимон)»). В УПП обработкой чистим дубли и все ссылки заменяем на «Чай лимонный».
Проблема в том, что в БП30 из-за обмена тоже теперь есть 3 разных номенклатуры, которые надо схлопнуть и оставить именно ту ссылку, которая осталась в УПП.
Для этой рутины и проделываем 3 шага:
— логируем схлопывание дублей номенклатуры на стороне УПП (ссылка которую удалили, ссылка которую оставили)
— обменом этот регистр сведений уходит в БП30
— расширением проходим по таблице ссылок и выполняем замену ссылок на стороне БП30. Т.е. берем ГУИД ссылки которую удалили в УПП и заменяем на ГУИД ссылки которую оставили в УПП.
Надеюсь так прояснилось немного…
да, так понятно.
цель — свертка дублей в базах обмена и затем однозначная синхронизация по уид без потерь данных в любой ИБ.