Организация сетевой розничной торговли часто сталкивается с задачей консолидации данных. Типовой сценарий: есть центральный склад (офис) и несколько периферийных торговых точек. Если во всех узлах используются версии ПРОФ, задача решается штатным механизмом РИБ (Распределенная Информационная База). Однако, если в целях экономии на торговых точках установлена 1С:Розница Базовая, стандартный механизм РИБ становится недоступен из-за лицензионных ограничений платформы. Чтобы убедиться, что базы настроены идентично перед началом синхронизации, можно использовать сравнение значений констант для поиска расхождений в настройках двух баз.
В этой статье мы подробно разберем, как построить архитектуру обмена в связке "Центр (ПРОФ) — Магазины (Базовая)", какие подводные камни нас ожидают при синхронизации справочников и как правильно настроить движение документов перемещения товара.
Давайте проанализируем исходные данные. У нас есть Центральная база (версия ПРОФ) и несколько периферийных баз (версии Базовая). Ограничения базовой версии 1С критичны для нашей задачи:
Однако, обмен данными в универсальных форматах (XML, EnterpriseData) в базовых версиях разрешен. Это оставляет нам пространство для маневра. Наша цель — настроить выгрузку товаров и документов перемещения из Центра в Магазины, и загрузку данных о продажах (чеки, отчеты о розничных продажах) из Магазинов в Центр.
Прежде чем приступать к настройке сложных обменов, давайте рассмотрим архитектурное решение, которое часто игнорируют, но которое может быть наиболее эффективным.
Вместо того чтобы мучиться с обменами, рассинхронизацией остатков и дублями номенклатуры, мы можем организовать работу всех магазинов в одной центральной базе 1С:Розница ПРОФ.
Как это работает:
Преимущества:
Недостатки:
Если интернет стабилен, этот вариант предпочтительнее. Если же автономность магазинов критична, переходим к настройке обменов.
Поскольку РИБ недоступен, нам придется связать независимые информационные базы. Основная сложность здесь заключается не в транспорте файлов, а в сопоставлении объектов. Для реализации этого процесса часто используется выгрузка и загрузка данных в формате XML с возможностью пакетной обработки.
В системе 1С каждый объект справочника (например, товар "Молоко") имеет уникальный идентификатор (GUID). Если вы создали карточку "Молоко" в Центральной базе и отдельно создали такую же карточку в базе Магазина — для 1С это два совершенно разных товара, даже если у них одинаковое наименование и штрихкод.
При попытке сделать стандартную выгрузку без специальной подготовки, в базе-приемнике появятся дубли. Чтобы этого избежать, необходимо использовать механизм поиска по полям. Для обеспечения надежной доставки сообщений между базами в сложных проектах может потребоваться универсальный обмен XML в связке с RabbitMQ.
Для реализации обмена нам потребуется создать правила обмена (файл .xml) с помощью конфигурации "Конвертация данных". Рассмотрим ключевые настройки для справочников:
1. Справочник Номенклатура
В правилах конвертации объектов (ПКО) для номенклатуры необходимо отключить поиск по GUID (или сделать его вторичным) и включить поиск по ключевым полям. Оптимальный приоритет полей поиска:
2. Справочник Контрагенты
Здесь поиск следует настроить по связке полей ИНН + КПП. Это гарантирует, что поставщики не задвоятся.
При обмене между независимыми базами (не РИБ) логика документов меняется. Давайте разберем, как трансформировать документы при выгрузке.
Направление: Центр -> Магазин
В Центре вы создаете документ ПеремещениеТоваров, где отправитель — "Центральный склад", а получатель — "Магазин №1".
При выгрузке в базу Магазина этот документ нельзя загрузить как ПеремещениеТоваров, если в базе Магазина не ведется учет остатков Центрального склада. Поэтому в правилах обмена настраивается конвертация:
ПеремещениеТоваров (Центр).ПоступлениеТоваров (Магазин).В документе поступления в качестве Контрагента подставляется виртуальный поставщик "Головная организация" или "Центральный склад".
Направление: Магазин -> Центр
Здесь все проще. Магазин закрывает смену и формирует документ ОтчетОРозничныхПродажах. Этот документ можно выгружать в Центр "как есть".
Если написание правил в "Конвертации данных" кажется слишком сложным, можно воспользоваться механизмами, которые предлагает сообщество или сама платформа в виде внешних обработок.
Для базовых версий (начиная с платформы 8.3.6 и определенных релизов конфигураций) доступно подключение Расширений конфигурации. Это позволяет добавить функционал обмена, не снимая конфигурацию с поддержки. Например, для синхронизации визуального контента можно использовать универсальный механизм выгрузки и загрузки картинок номенклатуры.
Посмотрим, как организовать такой обмен:
Пример алгоритма загрузки продаж в Центр (псевдокод):
<code>
// Чтение файла данных
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ПутьКФайлу);
МассивПродаж = ПрочитатьJSON(ЧтениеJSON);
Для Каждого СтрокаПродажи Из МассивПродаж Цикл
// Поиск товара по штрихкоду
ТоварСсылка = Справочники.Номенклатура.НайтиПоРеквизиту("Штрихкод", СтрокаПродажи.Штрихкод);
Если ТоварСсылка.Пустая() Тогда
// Логирование ошибки или создание товара (если разрешено)
Продолжить;
КонецЕсли;
// Заполнение табличной части отчета
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = ТоварСсылка;
НоваяСтрока.Количество = СтрокаПродажи.Количество;
НоваяСтрока.Цена = СтрокаПродажи.Цена;
КонецЦикла;
</code>
При реализации любого из описанных методов (кроме RDP) обратите внимание на следующие моменты:
1. Синхронизация цен
Вместе с товарами необходимо передавать документы УстановкаЦенНоменклатуры. В базе магазина цены должны быть актуальными для работы кассы. Убедитесь, что "Виды цен" в обеих базах называются одинаково или корректно сопоставляются.
2. Контроль дублей
Регулярно (раз в неделю/месяц) запускайте в базах обработку "Поиск и удаление дублей". Даже при идеальных правилах обмена, пользователи могут создать товар вручную в магазине, что приведет к рассинхронизации.
3. Возвраты товаров
Продумайте логику возвратов товаров от покупателя. Если возврат происходит в день покупки, он обрабатывается на кассе. Если позже — создается документ ВозвратТоваровОтПокупателя. Этот документ также должен мигрировать в Центр.
Организовать обмен между 1С:Розница ПРОФ и Базовой версией возможно, несмотря на отсутствие РИБ. У вас есть три пути: