Как повторно сопоставить контрагентов и банковские счета при синхронизации УТ 11.4 и БП 3.0 и устранить дубли?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Синхронизация данных между конфигурациями «1С:Управление торговлей 11» (УТ) и «1С:Бухгалтерия предприятия 3.0» (БП) — это стандартный процесс для большинства торговых компаний. Однако в процессе эксплуатации пользователи часто сталкиваются с неприятной проблемой: в базах начинают плодиться дубли контрагентов, организаций или их банковских счетов. Обычное удаление дублирующихся элементов стандартными средствами не всегда решает проблему окончательно — при следующем сеансе обмена они могут появиться снова.

В этой статье мы подробно разберем причины возникновения этой проблемы, изучим внутренние механизмы сопоставления объектов в платформе «1С:Предприятие 8.3» и пошагово пройдем процесс исправления и предотвращения дублирования данных.

Выясняем причины: почему задваиваются контрагенты и банковские счета?

Современный обмен между УТ 11 и БП 3 построен на использовании универсального формата обмена EnterpriseData. При первой отправке данных система пытается автоматически сопоставить объекты в двух базах по определенным полям поиска (правилам сопоставления). Если автоматическое сопоставление не находит однозначного соответствия, создается новый объект, что и приводит к появлению дублей. Рассмотрим, почему это происходит наиболее часто:

  1. Различия в ключевых реквизитах контрагентов. Поиск контрагентов по умолчанию выполняется по связке ИНН + КПП для юридических лиц или по ИНН для физических лиц и индивидуальных предпринимателей. Если в одной базе КПП заполнен, а в другой нет (или заполнен с ошибкой), система посчитает этих контрагентов разными и создаст дублирующий элемент. Если ИНН отсутствует в обеих базах, сопоставление идет по наименованию. Любое несовпадение (лишний пробел, разница в кавычках или регистре букв) гарантированно приведет к задвоению.
  2. Особенности подчиненных справочников (Банковские счета). Справочник БанковскиеСчетаКонтактов (или аналогичные подчиненные справочники) жестко привязан к владельцу — контрагенту или организации. Если задвоился сам контрагент, то все его банковские счета будут созданы повторно для нового дубля контрагента. Даже если владельцы сопоставлены корректно, банковские счета сопоставляются по связке БИК банка и НомерСчета. Ошибка хотя бы в одной цифре приведет к созданию нового счета.
  3. Параллельный ввод данных в обеих базах. Если менеджеры в УТ 11 и бухгалтеры в БП 3 одновременно создают одного и того же контрагента вручную, то при последующей синхронизации без предварительной настройки сопоставления система создаст дубли, так как у этих объектов будут разные внутренние уникальные идентификаторы (UUID).

Где хранятся связи: разбираем работу регистров сопоставления

Для того чтобы объекты «узнавали» друг друга при повторных обменах, платформа хранит связи между их уникальными идентификаторами в специальных регистрах сведений. В зависимости от версии конфигураций и используемой технологии обмена это могут быть разные регистры:

Рассмотрим подробнее регистр ПубличныеИдентификаторыСинхронизируемыхОбъектов. В нем хранятся записи, связывающие ссылку на объект в текущей базе с уникальным идентификатором этого же объекта в базе-источнике через узел обмена. Если в этом регистре для одного объекта создано несколько некорректных записей или присутствуют «битые» ссылки, обмен будет постоянно сбоить или создавать дубли.

Для быстрого перехода к этому регистру в любой из баз мы можем воспользоваться меню «Перейти по ссылке» (сочетание клавиш Shift + F11) и вставить следующий адрес:

e1cib/list/РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов

Проанализируем ситуацию: если мы просто удалим дублирующий элемент справочника с помощью стандартной обработки, запись в регистре сведений может остаться и указывать на несуществующий объект (отображается как <Объект не найден...>). При следующем обмене это может вызвать ошибку:

«Для уникального идентификатора и узла назначен более чем один объект...» или обмен просто создаст дубль заново.

Пошаговый алгоритм исправления дублей и восстановления сопоставления

Для того чтобы корректно и навсегда устранить задвоение объектов, выполним последовательно следующие шаги. Настоятельно рекомендуем делать это в периоды отсутствия активной работы пользователей и обязательно создать резервные копии обеих баз перед началом процедур. При работе с несколькими базами для автоматического создания их архивных копий перед проведением технических процедур применяется программа для автоматического архивирования и обслуживания 1С.

Шаг 1. Анализ и очистка сопоставлений в регистре сведений

Прежде чем запускать слияние дублей, нам необходимо разорвать неверные связи обмена. Перейдем в базу, где обнаружены дубли (например, в БП 3.0), и откроем регистр сведений ПубличныеИдентификаторыСинхронизируемыхОбъектов через «Переход по ссылке».

В списке записей настроим отбор по колонке «Объект» или визуально найдем записи, которые ведут на дублирующийся (неправильный) элемент справочника Контрагенты или БанковскиеСчета. Также обратим внимание на записи с битыми ссылками (<Объект не найден>). Выделим эти записи и удалим их из регистра.

Шаг 2. Объединение элементов справочника

Теперь, когда неверные связи в регистре удалены, мы можем безопасно объединить дубли в самой информационной базе. Для этого воспользуемся типовым инструментом:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных.
  2. Откроем ссылку Поиск и удаление дублей.
  3. В поле «Искать в» выберем справочник Контрагенты (или Банковские счета).
  4. Настроим правила поиска (например, по совпадению ИНН) и нажмем кнопку Найти дубли.
  5. В появившемся списке выберем правильный элемент, который будет сохранен в базе (он должен быть отмечен как «Оригинал»), а дублирующий элемент назначим к замене.
  6. Нажмем кнопку Удалить дубли. Программа перенесет все ссылки в существующих документах на правильного контрагента, а дубль пометит на удаление.
  7. Обязательно зайдем в Удаление помеченных объектов и полностью сотрем дублирующиеся карточки из базы данных.

Шаг 3. Регистрация измененных объектов для обмена

Чтобы изменения успешно передались во вторую информационную базу (УТ 11) и связали там правильный объект, нам нужно принудительно зарегистрировать измененные карточки к отправке:

  1. Перейдем в раздел Администрирование — Синхронизация данных — Настройки синхронизации.
  2. Нажмем кнопку Состав отправляемых данных (иконка с изображением монитора и круговой стрелки).
  3. В открывшемся окне найдем справочник Контрагенты.
  4. Нажмем кнопку Зарегистрировать — Одиночный объект и выберем нашего правильного (объединенного) контрагента. То же самое при необходимости сделаем для его банковского счета.

Шаг 4. Запуск синхронизации и проверка результатов

Запустим процесс обмена данными. После завершения цикла выгрузки-загрузки в обеих базах ссылки синхронизируются. Поскольку старая неверная связь в регистре публичных идентификаторов была удалена, а измененный объект был принудительно зарегистрирован к отправке, система создаст правильную единую запись сопоставления.

Как предотвратить появление дублей с помощью интерактивного сопоставления

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

Рассмотрим, как запустить этот режим по шагам:

  1. В настройках синхронизации данных выберем нашу настройку обмена с УТ (или БП) и нажмем кнопку Синхронизировать с дополнительными параметрами (или выполним обмен по шагам, отключив автоматический режим).
  2. На этапе получения данных программа приостановит процесс и выведет окно сопоставления.
  3. Мы увидим список разделов (Контрагенты, Номенклатура, Банковские счета и т.д.) с индикацией количества несопоставленных объектов. Строки с синим кружком информации указывают на то, что эти объекты будут созданы как новые (что потенциально может привести к дублям).
  4. Дважды кликнем на строку справочника Контрагенты. Откроется форма сопоставления.
  5. Мы можем нажать Сопоставить автоматически и выбрать нужные поля (например, искать только по ИНН, игнорируя наименование и КПП).
  6. Если автоматический режим не сработал из-за грубых различий в реквизитах, мы можем сопоставить объекты вручную. Для этого найдем в левой части окна (данные в нашей базе) нужного контрагента, а в правой части (загружаемые данные) выберем соответствующую запись и нажмем кнопку Установить соответствие.
  7. После ручной привязки всех спорных элементов нажмем Записать и продолжить. Связи запишутся в регистр публичных идентификаторов, и физического дублирования карточек в справочнике не произойдет.

Решение проблемы программным путем (для разработчиков)

Если дублей скопилось слишком много, ручная очистка регистра может занять много времени. Рассмотрим пример кода на встроенном языке 1С, который позволяет программно найти и удалить записи в регистре ПубличныеИдентификаторыСинхронизируемыхОбъектов, ссылающиеся на помеченные на удаление или «битые» ссылки объектов справочника контрагентов.

Проанализируем следующий алгоритм:


// Создаем запрос для поиска записей регистра с "битыми" или удаляемыми объектами
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ПубличныеИдентификаторы.Идентификатор КАК Идентификатор,
    |	ПубличныеИдентификаторы.УзелИнформационнойБазы КАК УзелИнформационнойБазы,
    |	ПубличныеИдентификаторы.Ссылка КАК Ссылка
    |ИЗ
    |	РегистрСведений.ПубличныеИдентификаторыСинхронизируемыхОбъектов КАК ПубличныеИдентификаторы
    |ГДЕ
    |	(ПубличныеИдентификаторы.Ссылка.ПометкаУдаления = ИСТИНА
    |	ИЛИ ПубличныеИдентификаторы.Ссылка.Ссылка ЕСТЬ NULL)
    |	И ПубличныеИдентификаторы.Ссылка ССЫЛКА Справочник.Контрагенты";

РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

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

Этот код выбирает из базы сопоставления для тех контрагентов, которые либо помечены на удаление, либо уже физически удалены из базы (значение NULL при проверке реквизитов ссылки). После выполнения такой обработки можно смело запускать стандартный поиск и удаление дублей — конфликтов при последующей синхронизации не возникнет. Для этой задачи также можно использовать инструмент аудита базы с нечетким поиском дублей и безопасной заменой ссылок.

Золотые правила для предотвращения дублирования в будущем

Для того чтобы навсегда минимизировать вероятность появления дублей при обмене УТ 11 и БП 3, рекомендуем придерживаться нескольких простых правил организации совместной работы в базах:

  1. Четкое разделение точек ввода данных. Договоритесь с коллегами, что ввод новых контрагентов и их банковских счетов происходит строго в одной базе — например, в УТ 11 менеджерами при оформлении сделок. В БП 3 эти данные должны попадать исключительно посредством синхронизации. Ввод контрагентов «и там, и там» вручную — главная причина хаоса в базах.
  2. Обязательное заполнение ИНН и КПП. Запретите на уровне прав или настроек программы запись контрагентов-юридических лиц без заполненного ИНН и КПП. Если эти поля заполнены корректно в обеих базах, то типовые правила сопоставления EnterpriseData отработают на 100% правильно, даже если наименования будут слегка отличаться.
  3. Своевременное обновление конфигураций. Механизмы обмена и правила конвертации данных (XDTO-пакеты формата EnterpriseData) постоянно дорабатываются разработчиками фирмы «1С». Если ваша БП 3 регулярно обновляется, а УТ 11 осталась на релизе трехлетней давности, логика сопоставления может нарушиться из-за несовместимости версий формата обмена. Держите обе базы в актуальном состоянии.
← На главную