Приветствуем вас, уважаемые коллеги! Сегодня мы детально разберем одну из наиболее частых и в то же время сложных задач, с которыми сталкиваются администраторы и программисты 1С при масштабировании розничных сетей. Представим ситуацию: у вас уже успешно функционирует распределенная информационная база (РИБ) «1С:Розница», состоящая из Главного узла (например, Офис) и подчиненных узлов (Магазин, Склад). В то же время в рамках той же организации открывается или уже работает другой магазин, учет в котором некоторое время велся обособленно в точно такой же версии конфигурации «1С:Розница».
Казалось бы, базы одинаковые, структура метаданных идентична — почему бы просто не «привязать» существующую базу к Главному узлу напрямую? Однако при первой же попытке стандартного обмена данными вы столкнетесь с катастрофическими последствиями: задвоением справочников номенклатуры, контрагентов, касс и складов. Давайте проанализируем причины этой проблемы и подробно рассмотрим три практических метода ее решения.
Ключевая проблема кроется в понятии уникального идентификатора объекта (GUID или UUID). Платформа «1С:Предприятие 8.3» идентифицирует любой элемент справочника или документ не по его коду, артикулу или наименованию, а по уникальной 128-битной строке GUID.
Даже если в обеих базах заведена номенклатура «Молоко 3.2%» с одинаковым кодом и штрихкодом, в независимой базе этой позиции соответствует один GUID, а в базе РИБ — совершенно другой. При прямом объединении баз платформа воспримет их как два абсолютно разных товара. В результате в вашей системе образуется огромное количество дублей, что полностью парализует складской и финансовый учет. Для решения этой задачи нам потребуется выполнить синхронизацию и сопоставление этих идентификаторов.
Рассмотрим по шагам наиболее надежный, штатный метод, гарантирующий полную целостность данных в вашей системе. Суть метода заключается в выгрузке данных из обособленной базы, их загрузке и сопоставлении в Главном узле РИБ с последующим созданием «чистого» начального образа подчиненного узла.
Универсальный обмен данными в формате XML. Выгружаем справочники (Номенклатура, Контрагенты, Физические лица) и документы (остатки товаров, продажи) за необходимый период. При наличии сложных связей можно воспользоваться программой «1С:Конвертация данных» для настройки точных правил переноса.Поиск и замена дублей в Главном узле. Тщательно сопоставляем загруженные позиции с уже имеющимися в базе. В качестве правильных (оригинальных) элементов выбираем те, которые изначально были в РИБ. После замены все ссылки в загруженных документах перенаправятся на единые элементы, а дубли будут помечены на удаление.Что делать, если замена рабочей базы на точке новым начальным образом РИБ крайне нежелательна? Например, на кассовом компьютере подключено и тонко настроено сложное торговое оборудование, эквайринг, ККТ, и перенастройка системы с нуля займет слишком много времени. В такой ситуации проанализируем альтернативный вариант — отказ от РИБ для этой конкретной точки в пользу универсального формата обмена.
Вместо механизма РИБ настроим регулярную синхронизацию данных через встроенный формат EnterpriseData. Рассмотрим особенности этого механизма:
GUID, а по ключевым полям поиска. Для номенклатуры такими полями могут выступать Штрихкод, Артикул или Наименование. Для контрагентов — ИНН и КПП.Выясним, существует ли способ обойтись без создания огромного начального образа, если база весит десятки гигабайт, а интернет-канал на точке слабый. Да, существует программный метод привязки. Обращаем внимание, что данный способ требует высокой квалификации и обязательного создания резервных копий обеих баз!
Разберем алгоритм программного связывания баз:
// Программное назначение главного узла РИБ
Процедура УстановитьСвязьРИБ()
// Находим или создаем предопределенный узел (ЭтотУзел)
ЭтотУзелОбъект = ПланыОбмена.ПоМагазинам.ЭтотУзел().ПолучитьОбъект();
ЭтотУзелОбъект.Код = "М2";
ЭтотУзелОбъект.Наименование = "Магазин 2 (бывший независимый)";
ЭтотУзелОбъект.Записать();
// Создаем или находим узел Главного диспетчера
УзелЦентр = ПланыОбмена.ПоМагазинам.НайтиПоКоду("ЦБ");
Если УзелЦентр.Пустая() Тогда
НовыйУзел = ПланыОбмена.ПоМагазинам.СоздатьУзел();
НовыйУзел.Код = "ЦБ";
НовыйУзел.Наименование = "Центральная база";
НовыйУзел.Записать();
УзелЦентр = НовыйУзел.Ссылка;
КонецЕсли;
// Устанавливаем признак подчиненности главному узлу
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентр);
Сообщить("База успешно преобразована в подчиненный узел РИБ!");
КонецПроцедуры
Критически важно: Сразу после выполнения этого кода запускать обмен категорически запрещено! Нам необходимо предварительно выровнять GUID в обеих базах. Для этого используем специализированные обработки по переносу и замене ссылок (например, обработку «Выгрузка загрузка данных XML» с опцией сопоставления по ключевым полям). Только после того, как справочники в обеих базах будут иметь абсолютно идентичные идентификаторы, можно выполнить первый тестовый обмен.
Подводя итоги, отметим, что для файловых баз «1С:Розница» наиболее стабильным и рекомендуемым является Метод 1. Он минимизирует риски человеческого фактора и гарантирует, что в будущем все конфигурации на удаленных точках будут обновляться централизованно, а аналитические отчеты по продажам и остаткам товаров в Офисе будут абсолютно корректными.