Замена дублей партнеров УТ 11.4

У клиента было заведено много дублей партнеров с одинаковыми телефонами.

Они возникли из-за сбоя обмена с сайтом — клиенты искались не по телефону, а по другим полям, в итоге не сопоставлялись и плодились.

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

Решено было сделать свертку дублей.

При этом, слава богу, используется настройка УТ, что контрагент соотносится с партнером 1:1.

Я завел у справочника партнеров поле дор_КлючДляСвертки и в него записал телефон партнера

Затем сделал копию базы.

Запустил поиск дублей:

Отсортировал дубли по количеству:

Некоторые дубли удали из замены, например, те, где не был указан телефон или телефон был неправдоподобный, сокращенный.

Запустил автоматическое определение правильных элементов. И потом выполнил замену дублей.

Но этого мало. Ведь теперь контрагенты этих партнеров встали на одного партнера. Нужно делать замену дублей контрагентов по партнеру:

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

Выполнил замену дублей.

Далее запустил удаление помеченных объектов, чтобы дубли физически удалились:

Большая часть контрагентов и партнеров удалилось, осталось около 10 партнеров и контрагентов, их список выслал контрагенту для сверки по ним взаиморасчетов. Некоторые из них застряли в ключах аналитики по партиям.

UPD 2024-04-10: после замены рекомендую сделать замену дублей ключей реестра документов, а то у меня в журналах закупки и продажи были дубли:

UPD 2024-05-07: Доработал чтобы ключ был в однотипном формате — убрал лишние символы. Так нашлось еще больше дублей.

&НаСервере
Процедура ВнестиТелефоныВКлючПартнераНаСервере()
	Для Каждого Строка ИЗ ТабТелефонныхНомеров Цикл
		ТекТелефон = Строка.Представление;
		ТекТелефон = СтрЗаменить(ТекТелефон, " ", "");
		ТекТелефон = СтрЗаменить(ТекТелефон, "+7", "8");
		ТекТелефон = СтрЗаменить(ТекТелефон, "(", "");
		ТекТелефон = СтрЗаменить(ТекТелефон, ")", "");
		ТекТелефон = СтрЗаменить(ТекТелефон, "-", "");
		Строка.Представление = ТекТелефон;
		Если НЕ ЗначениеЗаполнено(ТекТелефон) Тогда
			Продолжить;
		КонецЕсли;
		ОО = Строка.Партнер.ПолучитьОбъект();
		ПрисвоитьБезопасно(ОО.дор_КлючДляСвертки, ТекТелефон);
		Если ОО.Модифицированность() Тогда
			ОО.ОбменДанными.Загрузка = истина;
			ОО.Записать();
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Среда: УТ 11.4.13.46 Объем: 2 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

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