Синхронизация данных между типовыми конфигурациями «1С:Управление торговлей 11» и «1С:Бухгалтерия предприятия 3.0» — это стандартная задача, которая, тем не менее, часто преподносит неприятные сюрпризы в виде дублирующихся контрагентов, номенклатуры или документов. Одной из наиболее сложных проблем является некорректная работа регистров сопоставления и возникновение системных ошибок при попытке ручного исправления данных. Разберем подробно, почему возникают эти сложности и как их правильно решать, используя механизмы современной платформы 1С.
Рассмотрим ситуацию, когда при попытке ручного добавления записи в РегистрСведений.СоответствияОбъектовИнформационныхБаз система выдает ошибку в обработчике ПередЗаписью. Текст ошибки обычно выглядит следующим образом:
Ошибка при выполнении обработчика - 'ПередЗаписью' по причине:
{РегистрСведений.СоответствияОбъектовИнформационныхБаз.МодульНабораЗаписей(32)}:
Ошибка при вызове метода контекста (Добавить)
ОбменДанными.Получатели.Добавить(Отбор.УзелИнформационнойБазы.Значение);
по причине: Несоответствие типов (параметр номер '1')
Проанализируем причину этого сбоя. В современных конфигурациях, работающих на базе БСП (Библиотеки стандартных подсистем), регистрация изменений для обмена данными происходит автоматически. Когда мы пытаемся записать данные в регистр соответствий вручную, срабатывает программный код в модуле набора записей, который ожидает, что в поле УзелИнформационнойБазы передан объект определенного типа (ссылка на узел плана обмена). Если тип узла не соответствует ожидаемому планом обмена, использующим этот регистр, или если сам механизм обмена переведен на «Универсальный формат», стандартные процедуры регистрации «ломаются».
Важный момент: ручная правка этого регистра крайне не рекомендуется. В новых редакциях УТ 11 и БП 3.0, использующих Универсальный формат (Enterprise Data), данный регистр практически не задействован для сопоставления новых данных. Вместо него система использует другой механизм.
Выясним, какой регистр является ключевым для обмена через Универсальный формат. Это РегистрСведений.ПубличныеИдентификаторыОбъектов. В отличие от старого механизма (обмена по правилам XML), где сопоставление шло напрямую «Ссылка источника — Ссылка приемника», Enterprise Data работает через промежуточный идентификатор (GUID), который понятен обеим базам.
Если мы обнаруживаем дубли, это означает, что при загрузке система не смогла найти связь в этом регистре и не нашла объект по «полям поиска» (например, по ИНН/КПП для контрагентов или Артикулу для номенклатуры). В результате создается новая запись.
Вместо того чтобы вносить данные в регистры вручную, рискуя нарушить целостность базы, воспользуемся штатным инструментом 1С. Рассмотрим пошагово, как вызвать окно сопоставления, которое «пропало» после первой синхронизации:
Если окно сопоставления не открывается автоматически, мы можем принудительно вызвать его через обработку «Сопоставление объектов», доступную в некоторых версиях через «Все функции» (Функции для технического специалиста) или в самом окне настройки синхронизации (кнопка с изображением двух стрелок «Сопоставить данные»).
Если синхронизация уже прошла и базы наполнились дублями, простое установление соответствия не удалит лишние карточки. Посмотрим, как исправить ситуацию:
ПоискИУдалениеДублей (раздел Администрирование — Обслуживание). Выбираем объект (например, Контрагенты), задаем критерии сравнения (ИНН и КПП).Проанализируем алгоритм, по которому система решает: создать новый объект или обновить существующий. Для Enterprise Data порядок поиска следующий:
ПубличныеИдентификаторыОбъектов. Если запись есть — объект сопоставляется.Если менеджер в УТ создал контрагента без ИНН, а бухгалтер в БП уже завел его с ИНН, система при синхронизации не сможет их связать и создаст дубль в УТ (карточку с ИНН из БП) и дубль в БП (карточку без ИНН из УТ). Чтобы этого избежать, необходимо требовать от пользователей заполнения ключевых полей до момента выполнения обмена.
Если настройки сопоставления окончательно запутались, а ручные правки привели к ошибкам, наиболее надежным способом будет «обнуление» связи. Рассмотрим этот процесс:
Если вам все же необходимо программно связать объекты, не делайте это через метод Добавить() набора записей регистра без предварительной подготовки. Правильный путь — использовать механизмы БСП. Для регистрации изменений или сопоставления объектов следует использовать программный интерфейс обмена данными:
// Пример получения идентификатора для Enterprise Data
ИдентификаторОбъекта = ОбменДаннымиСервер.ПубличныйИдентификаторОбъекта(СсылкаНаОбъект);
Подводя итог, отметим: работа с дублями при синхронизации — это всегда комбинация технических настроек и дисциплины ведения учета. Использование встроенных инструментов сопоставления и соблюдение уникальности полей поиска (ИНН/КПП) практически полностью исключают необходимость ручного вмешательства в регистры 1С.