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