При объединении двух уже работающих информационных баз — например, нетиповой конфигурации «Управление торговлей 10.3» и «Бухгалтерия предприятия 2.0» — часто возникает страх получить тысячи дублей номенклатуры и контрагентов. Попытка решить эту проблему «в лоб» через уравнивание внутренних идентификаторов (GUID) во внешнем файле или настройку распределенной информационной базы (РИБ) является распространенной архитектурной ошибкой. Разберем, почему этот путь тупиковый и как правильно организовать сопоставление справочников при старте обмена.
Проанализируем технические ограничения платформы «1С:Предприятие», которые делают первоначальный замысел невозможным:
УникальныйИдентификатор() формируется в момент первоначальной записи объекта в базу данных и является постоянным. Платформа 1С не имеет штатных инструментов для перезаписи GUID существующего элемента. Задать собственный GUID можно только в момент создания нового объекта через вызов Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(...)). Попытки изменить поле _IDRRef напрямую в таблицах СУБД разрушают ссылочную целостность базы данных, ломают индексы и приводят к непредсказуемым ошибкам в движениях документов.Для успешного обмена равенство системных идентификаторов в двух базах не требуется. Механизм универсального обмена данными («Конвертация данных 2.1») и типовые планы обмена находят объекты по четкой иерархии приоритетов:
ИНН + КПП (либо наименование для физических лиц). Для номенклатуры — Артикул, Код или полное наименование с учетом признака ЭтоГруппа.Нередко возникает идея не переносить детальный справочник номенклатуры из 15–20 тысяч позиций в бухгалтерскую базу, а свернуть его до нескольких обобщенных номенклатурных групп. Выясним, почему при объекте налогообложения УСН «Доходы минус расходы» так делать категорически нельзя.
Согласно ст. 346.17 НК РФ, стоимость приобретенных товаров включается в расходы только при одновременном соблюдении условий: товары оприходованы, оплачены поставщику и реализованы (списаны) конечному покупателю. В конфигурации «Бухгалтерия предприятия» для контроля этих условий ведется жесткий аналитический учет на специализированном регистре накопления «Расходы при УСН». Учет на этом регистре выполняется строго в разрезе конкретных позиций номенклатуры и партий. Если свернуть номенклатуру до групп, партионный учет разрушится, а расчет книги учета доходов и расходов (КУДиР) станет некорректным. Сопоставление номенклатуры должно производиться «один к одному».
Рассмотрим правильный порядок действий для запуска синхронизации между работающими базами УТ 10.3 и БП 2.0.
СоответствиеОбъектовДляОбмена.Посмотрим на пример кода для программной привязки элементов в базе-приемнике:
// Создаем запись соответствия для предотвращения дублирования
ЗаписьСоответствия = РегистрыСведений.СоответствиеОбъектовДляОбмена.СоздатьМенеджерЗаписи();
ЗаписьСоответствия.УзелОбмена = СсылкаНаУзелПланаОбмена;
ЗаписьСоответствия.СобственнаяСсылка = НайденнаяСсылкаВТекущейБазе;
ЗаписьСоответствия.ИмяТипаПриемника = "СправочникСсылка.Номенклатура";
ЗаписьСоответствия.ИдентификаторБазыПриемника = Строка(GUIDОбъектаИзБазыИсточника);
ЗаписьСоответствия.Записать(Истина);
После заполнения этого регистра штатный механизм обмена при чтении входящего XML-сообщения сразу найдет нужную ссылку по идентификатору базы-источника и не станет создавать дублирующий элемент.
Если сопоставить данные напрямую по кодам или артикулам невозможно из-за расхождений в написании, скорректируем правила поиска в конфигурации «Конвертация данных 2.1» (КД 2.1):
Номенклатура.ПрекратитьПоиск, чтобы управлять ветвлением алгоритма при нахождении однозначного соответствия.Применение таких правил позволяет безопасно соединить две исторически изолированные базы, сохранив прозрачный партионный учет для целей УСН и исключив рутинную ручную зачистку дублей после каждого сеанса обмена.