Клиент
Компания — производитель и продавец экологически чистой косметики и товаров для уборки, которая работает по схеме MLM и реализует товары в розницу.
Всего в сети компании — более 200 розничных торговых точек, в каждой из которых работает собственное приложение «1С».
Проблема
В предыдущей версии IT-архитектуры каждая система «1С:Розница» была соединена с контуром головной компании с помощью интеграции формата «точка – точка». В результате у компании возникали проблемы следующего порядка.
- Было почти невозможно отследить, все ли системы торговых точек своевременно получают запросы и обновления. Архитектура была непрозрачной.
- Иногда в системах торговых точек содержалась неактуальная информация, если в момент отправки данных из основного IT-контура система-получатель была офлайн.
- «1С:ERP Управление предприятием» головной компании была перегружена запросами от розницы.
Задача
Организовать прозрачный, контролируемый и асинхронный обмен информацией между основными системами компании и «1С» в торговых точках.
Гипотеза 1: отдельные коннекторы для каждой из «1С:Розница»
Первоначальной гипотезой KT.Team стало создание отдельных коннекторов для получения информации под каждую из систем «1С:Розница».
Такой подход позволил бы разделить потоки информации и сделать их независимыми для каждой из систем «1С:Розница». За счёт систем мониторинга и логирования было бы в разы легче фиксировать проблемы в передаче данных.
Оборотной стороной такого подхода являлось огромное количество коннекторов: для каждой сущности (ассортимент, цены, остатки и т. д.) нужно было разработать более 200 коннекторов. При добавлении новой розничной точки также необходимо было создавать новые коннекторы для каждой из сущностей.
Финальное решение: общий API-коннектор по каждой сущности для всех розниц
Чтобы облегчить архитектуру в моменте и упростить дальнейший рост сети клиента, команда KT.Team предложила принципиально иной подход. На каждую сущность, которую нужно забирать из «1С:ERP Управление предприятием», приходится только один коннектор. Он с заданной периодичностью или при срабатывании заранее определённого триггера забирает весь объём информации по конкретной сущности: номенклатуре, ценам, остаткам и т. д. Затем полученные данные передаются в общее хранилище. Как бы ни росла розничная сеть клиента, этот коннектор всегда будет один и действовать он будет по заданному алгоритму.
Для розничных точек мы разработали единый API, работу которого можно описать так: «я отдаю номенклатуры любому потребителю, который готов забирать их по описанным правилам».
К этому API подключаются все «1С:Розница» торговых точек. В их коннекторах прописаны условия, уточняющие, какую информацию они должны забирать. Каждая из розничных точек может отправлять по этому API запрос: «отдай все номенклатуры, подходящие под мой уникальный идентификатор». В ответ получает либо информацию, либо пустой массив (если, например, со времени последнего взаимодействия ничего не обновилось). Если вдруг хранилище в данный момент недоступно, розница получает сообщение об ошибке.
Мы разработали схему работы компонента для «1С» для «1С:Розница» под каждую из сущностей. При добавлении новой торговой точки потребуется минимум времени на подключение. Достаточно скопировать разработанные ранее компоненты, изменить идентификатор системы «1С:Розница» в настройках и добавить соответствующую настройку в корпоративный инструмент мониторинга для регулирования доступности и активности точки «1С:Розница».
Выгоды для клиента
- Есть единый контракт сообщения для запроса данных. Не нужно помнить или хранить документацию на стандарты более чем 200 разрозненных систем.
- На стороне ESB нет необходимости в размещении на сервере ESB и поддержании одинаковых типовых коннекторов для каждой сущности.
- Добавить новую розничную точку можно быстро и без лишних затрат на разработку.
- Каждая новая «1С:Розница» отображается в мониторинге на графике передачи данных. В случае недоступности какой-то из «1С:Розница» техническая поддержка получает соответствующее уведомление.