1С БСП: Методы сопоставления данных при синхронизации и загрузке
Проблема идентификации (Задвоение данных)
При настройке обменов данными (РИБ, Универсальный формат EnterpriseData) или массовой загрузке данных (из Excel, сторонних API) главная проблема — корректное сопоставление (мэппинг) объектов. Платформа 1С идентифицирует ссылочные объекты (Справочники, Документы) по Уникальному Идентификатору (UUID/GUID). Если данные приходят из внешней системы (где нет 1С-овских GUID), или базы ранее велись независимо, алгоритмы создадут дубли (два контрагента с одним ИНН). Бизнес-риски: искажение бухгалтерского баланса, невозможность сверки взаиморасчетов, хаос в НСИ (нормативно-справочной информации).
Методы поиска объекта в 1С
| Метод платформы / БСП | Точность поиска | Когда использовать |
|---|---|---|
По Уникальному Идентификатору (GUID) | Абсолютная (100%) | При обменах между базами 1С (РИБ, настроенный КД2/КД3), где объекты изначально порождены в одной среде. |
По полям поиска (ИНН, Артикул, Код) | Высокая | Интеграция с внешними системами (CRM, Сайты). Требует контроля уникальности реквизита. |
По Наименованию (Строке) | Низкая (Частые ошибки) | Крайний случай (загрузка из прайс-листов Excel). Требует нормализации строк (удаление пробелов, регистра). |
Алгоритмы сопоставления и устранения дублей
Сценарий 1: Программный поиск и загрузка без изменения GUID
При программной загрузке данных необходимо сначала искать объект по ключевым полям, и только если он не найден — создавать новый. Блокировка ОбменДанными.Загрузка = Истина отключает проверки (при записи), ускоряя процесс.
// Пример правильной загрузки Контрагента из API (JSON/XML)
ВходящийИНН = СтруктураДанных.ИНН;
ВходящееИмя = СтруктураДанных.Наименование;
// 1. Поиск по уникальному ключу (ИНН + КПП)
СсылкаНаОбъект = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ВходящийИНН);
Если СсылкаНаОбъект.Пустая() Тогда
// 2. Объект не найден - создаем новый
НовыйОбъект = Справочники.Контрагенты.СоздатьЭлемент();
НовыйОбъект.ИНН = ВходящийИНН;
Иначе
// 3. Объект найден - обновляем реквизиты
НовыйОбъект = СсылкаНаОбъект.ПолучитьОбъект();
КонецЕсли;
НовыйОбъект.Наименование = ВходящееИмя;
НовыйОбъект.ОбменДанными.Загрузка = Истина; // Отключаем бизнес-логику ПриЗаписи
НовыйОбъект.Записать();Сценарий 2: Использование подсистемы "Обмен Данными" (БСП)
В типовых конфигурациях (на базе БСП) для пользователей предусмотрена форма «Сопоставление данных». Если при синхронизации (КД3/EnterpriseData) система находит расхождения по полям поиска, она помещает объекты в регистр сведений ПубличныеИдентификаторыСинхронизируемыхОбъектов.
- Перейдите в раздел Администрирование -> Синхронизация данных -> Настройки синхронизации.
- В узле обмена нажмите кнопку «Сопоставить данные».
- Система покажет таблицу: слева объекты текущей базы, справа — пришедшие. Администратор (или MDM-менеджер) должен вручную указать, какие объекты являются идентичными, чтобы БСП связала их GUID'ы в регистре сведений.
Типовые ошибки разработчиков (Код)
- Поиск в цикле (N+1 проблема): Вызов
НайтиПоРеквизитувнутри цикла на 10 000 строк из Excel убьет производительность. Правильный паттерн: загрузить все ИНН из файла во временную таблицу, сделать ОДИН SQL-запрос (через объектЗапрос) к справочнику Контрагенты (LEFT JOIN), и обработать результат. - Игнорирование регистра и спецсимволов: Поиск
НайтиПоНаименованию("ООО Ромашка")не найдет «ООО Ромашка» (с двумя пробелами). Требуется предварительная очистка данных (RegEx или функции БСП Стринг).
Очистка замусоренной НСИ штатными обработками «Поиск и удаление дублей» парализует работу базы на дни. Разработчики ITSTM напишут высокооптимизированные SQL/1C скрипты пакетной замены ссылок и настроят строгую MDM-политику для предотвращения появления дублей в будущем.
Частые вопросы (FAQ)
Что делает ОбменДанными.Загрузка = Истина?
Это платформенный флаг. Если он установлен, при вызове метода Записать() платформа игнорирует проверки, прописанные разработчиками в модуле объекта (ОбработкаПроверкиЗаполнения, ПередЗаписью). Это нужно, чтобы загрузить 'неполные' исторические данные без ошибок.
Как заменить ссылки, если дубли уже созданы?
В типовых конфигурациях используйте обработку 'Поиск и удаление дублей' (из раздела Администрирование -> Обслуживание). Она находит дубли, позволяет выбрать 'Оригинал' и автоматически во всех документах меняет ссылки с дублей на оригинал, после чего помечает дубли на удаление.
Можно ли задать свой GUID при создании объекта программно?
Да. НовыйОбъект.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор("Ваш-GUID-строкой"))); Это критически важно при начальной миграции данных, чтобы сохранить связи.
Что такое MDM?
Master Data Management (Управление мастер-данными). Это архитектурный подход, при котором справочник (например, Контрагенты) заводится только в одной базе (Центральной), а в остальные базы (ЗУП, WMS) он передается только на чтение (без права создания новых элементов пользователями).