Интернет-магазины, работающие одновременно через собственный сайт, маркетплейсы и несколько складов, часто сталкиваются с проблемой синхронизации данных между разными системами. Особенно это заметно, когда учет ведется в 1С, а товары продаются сразу через несколько каналов. В таких условиях ошибки в резервировании и обновлении остатков могут приводить к пересорту, отменам заказов и дополнительным затратам на обработку.

С подобной задачей столкнулся интернет-магазин Kamatyres. Компания продает шины и диски через собственный сайт, активно работает с маркетплейсами и использует несколько складов, а учет заказов и остатков ведется в 1С.

Ранее мы уже реализовали для клиента интеграцию между 1С и интернет-магазином. Следующим этапом стала разработка системы поскладского резервирования товаров, которая позволила синхронизировать работу всех каналов продаж и складов.

Почему штатного механизма резервирования оказалось недостаточно

Штатный механизм резервирования в 1С-Битрикс работает только с общим доступным остатком и не учитывает конкретные склады. Для интернет-магазина с несколькими точками хранения это создавало риск продажи товара, который недоступен на нужном складе.

Проблема становилась критичной при работе с маркетплейсами. Если покупатель оформляет заказ на товар, которого фактически нет в наличии, площадка может отменить заказ и применить штрафные санкции.

Задача

Перед нами стояла задача реализовать корректное резервирование товаров в разрезе складов, обеспечить актуальность остатков во всех каналах продаж и полностью исключить продажи «в минус».

Выбранный подход

Мы отказались от реализации дополнительной логики внутри 1С-Битрикс. При большом количестве товаров и постоянном обмене данными такой подход усложнил бы контроль процессов и увеличил нагрузку на интернет-магазин.

Вместо этого мы вынесли всю логику резервирования в отдельный сервис, разработанный на Laravel. Битрикс остался витриной интернет-магазина, а управление остатками, резервами и обменом с 1С было перенесено во внешний сервис.

Такое решение позволило:

  • реализовать поскладское резервирование товаров;

  • обеспечить прозрачный контроль всех обменов с 1С;

  • снизить нагрузку на основной сайт;

  • повысить отказоустойчивость интеграции.

Архитектура решения

Получение данных из 1С

Сервис принимает остатки по складам в формате JSON непосредственно из 1С. Поскольку объем передаваемых данных может достигать десятков тысяч записей за один цикл обмена, информация не обрабатывается сразу.

Все полученные данные помещаются в очередь на обработку. Это позволяет избежать блокировок, равномерно распределить нагрузку на сервер и обеспечить стабильную работу системы даже при больших объемах данных.

На скриншоте ниже показали обработчик входящего запроса, который принимает данные из 1С и ставит задачу в очередь для дальнейшей обработки. Благодаря этому прием новых данных не зависит от скорости их последующей обработки. 

Расчет остатков с учетом резервов

После обработки сообщения сервис сохраняет фактические остатки, полученные из 1С, и рассчитывает количество товара, доступное для продажи.

Логика работы следующая:

  1. При оформлении заказа остатки товаров автоматически попадают в резерв.

  2. Резерв сохраняется до получения подтверждения обработки заказа со стороны 1С.

  3. Доступный остаток рассчитывается как фактический остаток минус количество товаров в резерве.

Таким образом интернет-магазин всегда получает остатки с учетом уже оформленных, но еще не обработанных заказов.

В коде реализовали пересчет доступного остатка на основании данных из 1С и текущих резервов. После вычисления итоговое значение помещается в отдельную очередь для последующей отправки в интернет-магазин.

Защита от рассинхронизации данных

В процессе разработки выявили особенность обмена: заказы обрабатываются в 1С практически сразу, тогда как обновление остатков происходит по расписанию.

Из-за этого могла возникнуть ситуация, когда резерв снимался раньше, чем поступали новые данные об остатках. В течение нескольких минут пользователи видели некорректное количество товара.

Для решения этой проблемы мы реализовали механизм отложенного снятия резерва. После подтверждения заказа со стороны 1С резерв сохраняется еще в течение 7 минут. За это время система гарантированно получает обновленные остатки и исключает появление отрицательных значений.

Передача данных в интернет-магазин

После пересчета остатки помещаются в отдельную очередь и передаются на сайт. Использование очередей позволило сделать интеграцию отказоустойчивой. Если сайт временно недоступен или во время передачи возникает ошибка, сообщение не теряется. Система автоматически выполняет повторную отправку до успешной обработки.

Использование очередей позволяет гарантировать доставку сообщений даже при временных сбоях на стороне сайта или сети. 

Интерфейс управления резервированием

Помимо механизма резервирования мы разработали отдельную административную панель на Laravel, которая позволяет контролировать состояние системы в режиме реального времени.

Мониторинг резервов и заказов

В интерфейсе отображаются заказы, ожидающие обработки в 1С, а также товары, находящиеся в резерве. Это позволяет оперативно контролировать состояние заказов и понимать, какое количество товара временно недоступно для продажи.

Контроль остатков по товарам

Для каждого товара отображаются:

  • фактический остаток, полученный из 1С;

  • количество товара в резерве;

  • остаток, доступный для продажи;

  • дата последнего обновления данных.

Такой подход значительно упрощает диагностику возможных расхождений между сайтом и учетной системой.

История обмена с 1С

Дополнительно реализовали журнал обменов, в котором фиксируются все сообщения между сайтом и 1С. Сотрудники могут быстро найти нужное событие, проверить статус обработки заказа, просмотреть переданные данные и при необходимости передать информацию специалистам 1С для дальнейшего анализа.

Итоги

  • Исключили продажи товаров с отрицательным остатком.

  • Обеспечили корректное резервирование в разрезе складов.

  • Снизили риск отмен заказов и штрафов со стороны маркетплейсов.

  • Повысили скорость и стабильность обмена данными между сайтом и 1С.

  • Обеспечили прозрачный контроль всех процессов резервирования и обмена.

  • Снизили нагрузку на интернет-магазин за счет вынесения логики в отдельный сервис.

Разработанная система позволила создать надежный механизм управления остатками для многоскладского интернет-магазина и обеспечить актуальность данных одновременно на сайте, в 1С и на маркетплейсах.