При организации одностороннего обмена номенклатурой между типовой «1С:Бухгалтерия предприятия» и отраслевым решением (например, «Альфа-Авто») часто возникает задача: переносить новые позиции номенклатуры так, чтобы ни при каких условиях не перезаписать и не повредить существующие в базе-приемнике элементы. Поиск по наименованию или артикулу в таких случаях не всегда подходит из-за различий в правилах ведения справочников в разных отделах, а прямая синхронизация по внутреннему идентификатору вызывает опасения возможного случайного совпадения GUID.
Разберем детально, какова реальная вероятность коллизии уникальных идентификаторов платформы 1С, как проверить существующие данные и какие архитектурные подходы позволяют организовать безопасную загрузку.
Платформа «1С:Предприятие» использует стандарт формирования 128-битных идентификаторов (UUID v4 и последовательные алгоритмы на базе стандартов RFC). Математическая вероятность случайной генерации двух одинаковых идентификаторов в двух независимых информационных базах стремится к абсолютному нулю.
Проанализируем практические причины, по которым GUID в базах все же могут совпасть:
Если базы создавались независимо с нуля, риск совпадения идентификаторов для разных товаров исключен.
Чтобы окончательно исключить сомнения, выполним предварительную проверку наличия одинаковых системных ссылок в обеих базах. Рассмотрим программный способ выгрузки и сверки идентификаторов через COM-соединение или текстовый файл.
Посмотрим на пример выгрузки списка идентификаторов из базы-источника:
СписокИдентификаторов = Новый Массив;
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не Выборка.ЭтоГруппа Тогда
ГУИДСтрокой = Строка(Выборка.Ссылка.УникальныйИдентификатор());
СписокИдентификаторов.Добавить(ГУИДСтрокой);
КонецЕсли;
КонецЦикла;
В базе-приемнике проанализируем наличие объектов с полученными идентификаторами:
Для Каждого СтрГУИД Из СписокИдентификаторов Цикл
ТекущийГУИД = Новый УникальныйИдентификатор(СтрГУИД);
СсылкаПриемника = Справочники.Номенклатура.ПолучитьСсылку(ТекущийГУИД);
// Проверяем физическое наличие объекта в базе
ОбъектВБазе = СсылкаПриемника.ПолучитьОбъект();
Если ОбъектВБазе <> Неопределено Тогда
Сообщить("Найдено совпадение идентификатора: " + СтрГУИД + " - " + Строка(ОбъектВБазе));
КонецЕсли;
КонецЦикла;
Если конфигурация-источник («Бухгалтерия предприятия») является типовой и ее изменение запрещено, перенесем всю логику сопоставления в базу-приемник («Альфа-Авто»).
Разберем по шагам создание независимого контура соответствий:
СоответствияНоменклатурыБП со следующей структурой:
ИдентификаторИсточника (Тип: Строка, длина 36);Номенклатура (Тип: СправочникСсылка.Номенклатура).Посмотрим на пример алгоритма загрузки:
МенеджерЗаписи = РегистрыСведений.СоответствияНоменклатурыБП.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ИдентификаторИсточника = ИдентификаторБП;
МенеджерЗаписи.Прочитать();
Если Не МенеджерЗаписи.Выбран() Тогда
// Создаем новую номенклатуру в Альфа-Авто
НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.Наименование = ЗагружаемоеНаименование;
НовыйТовар.Артикул = ЗагружаемыйАртикул;
НовыйТовар.Записать();
// Фиксируем соответствие
МенеджерЗаписи.ИдентификаторИсточника = ИдентификаторБП;
МенеджерЗаписи.Номенклатура = НовыйТовар.Ссылка;
МенеджерЗаписи.Записать();
КонецЕсли;
Если обмен настраивается с помощью типового механизма правил конвертации, используем встроенные возможности предотвращения перезаписи существующих данных.
Рассмотрим ключевые настройки в обработчиках событий:
ПоляПоиска при необходимости переопределяем стандартный поиск:
// Отключаем стандартный поиск по внутреннему идентификатору, если найден признак
Если СвойстваПоиска.Свойство("ИдентификаторБП") Тогда
// Выполняем поиск по дополнительному реквизиту или регистру
ПрекратитьПоиск = Истина;
КонецЕсли;
ПередЗаписьюОбъекта дополнительно страхуем существующие данные:
Если Не Объект.ЭтоНовый() Тогда
// Запрещаем перезапись существующих данных
Отказ = Истина;
КонецЕсли;
При создании позиций в отраслевых конфигурациях важно учитывать обязательные реквизиты, без которых учет номенклатуры будет заблокирован. Выясним особенности создания объектов в «Альфа-Авто 4»:
ЕдиницыИзмерения (как минимум базовая единица и единица хранения остатков).Такой комплексный подход полностью устраняет риски искажения существующей справочной информации и гарантирует корректную работу пользователей в обеих учетных системах.