Настройка автоматического сопоставления номенклатуры и контрагентов в 1С (БСП)
При синхронизации данных между базами 1С (например, УТ -> БП) возникают ошибки:
- Дублирование карточек контрагентов с одинаковым ИНН/КПП при каждой загрузке.
- Создание дублей номенклатуры из-за различий в пробелах, регистрах или спецсимволах наименований.
- Ошибки проведения документов:
Поле 'Договор контрагента' не заполненоиз-за сбоя сопоставления договоров. - Зависание пакетов синхронизации в регистре сведений
СоответствияОбъектовИнформационныхБаз.
1. Механизм сопоставления Библиотеки Стандартных Подсистем (БСП)
Синхронизация БСП производит идентификацию объектов в следующем приоритетном порядке:
- Поиск по уникальному идентификатору (GUID) в регистре
СоответствияОбъектовИнформационныхБаз. - Поиск по полям бизнес-идентификации (для Контрагентов:
ИНН + КПП; для Номенклатуры:Артикул + ПроизводительилиШтрихкод). - Создание нового объекта (если сопоставление не найдено и включено автосоздание).
2. Программный поиск и сопоставление контрагентов по ИНН/КПП
&НаСервере
Функция НайтиИлиСоздатьКонтрагента(ДанныеКонтрагентаDTO)
ИНН = СокрЛП(ДанныеКонтрагентаDTO.ИНН);
КПП = СокрЛП(ДанныеКонтрагентаDTO.КПП);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН
| И (&КПП = "" ИЛИ Контрагенты.КПП = &КПП)
| И НЕ Контрагенты.ПометкаУдаления";
Запрос.УстановитьПараметр("ИНН", ИНН);
Запрос.УстановитьПараметр("КПП", КПП);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.Ссылка;
КонецЕсли;
// Если контрагент не найден — создаем новый объект
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = ДанныеКонтрагентаDTO.Наименование;
НовыйКонтрагент.НаименованиеПолное = ДанныеКонтрагентаDTO.НаименованиеПолное;
НовыйКонтрагент.ИНН = ИНН;
НовыйКонтрагент.КПП = КПП;
НовыйКонтрагент.ЮридическоеФизическоеЛицо = ?(СтрДлина(ИНН) > 10,
Перечисления.ЮридическоеФизическоеЛицо.ФизЛицо,
Перечисления.ЮридическоеФизическоеЛицо.ЮрЛицо);
НовыйКонтрагент.Записать();
Возврат НовыйКонтрагент.Ссылка;
КонецФункции3. Регистрация соответствия в регистре БСП
Чтобы при последующих обменах не тратить ресурсы на повторный поиск по полям, сохраните сопоставление в служебном регистре:
&НаСервере
Процедура ЗафиксироватьСоответствиеБСП(УзелОбмена, ВнутренняяСсылка, ВнешнийИдентификатор)
МенеджерЗаписи = РегистрыСведений.СоответствияОбъектовИнформационныхБаз.СоздатьМенеджерЗаписи();
МенеджерЗаписи.УзелИнформационнойБазы = УзелОбмена;
МенеджерЗаписи.СобственнаяСсылка = ВнутренняяСсылка;
МенеджерЗаписи.УникальныйИдентификаторИсточника = ВнешнийИдентификатор;
МенеджерЗаписи.ТипИсточника = XMLТипЗнч(ВнутренняяСсылка).ИмяТипа;
МенеджерЗаписи.ТипПриемника = XMLТипЗнч(ВнутренняяСсылка).ИмяТипа;
МенеджерЗаписи.Записать(Истина);
КонецПроцедуры Частые вопросы (FAQ)
Почему при синхронизации создаются дубли номенклатуры с одинаковым наименованием?
Сравнение строк в 1С чувствительно к невидимым символам (неразрывные пробелы, символы перевода каретки). Перед сопоставлением всегда применяйте функции СокрЛП() и нормализацию строк.
Как очистить ошибочные соответствия объектов между базами?
В режиме 1С:Предприятие откройте регистр сведений 'Соответствия объектов информационных баз' с отбором по проблемному узлу обмена и удалите некорректные записи.
Как сопоставлять номенклатуру по характеристикам и сериям?
Используйте составной ключ идентификации: 'Артикул + НаименованиеХарактеристики + Производитель'. В правилах конвертации EnterpriseData настройте соответствующие алгоритмы идентификации.
Что делать, если у одного контрагента-физлица отсутствует КПП?
В запросе сопоставления делайте проверку условия: И (&КПП = "" ИЛИ Контрагенты.КПП = &КПП), чтобы поиск по 12-значному ИНН физического лица не блокировался пустым полем КПП.