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