Интеграция 1С-Битрикс с МойСклад

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с МойСклад
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 1С-Битрикс с МойСклад

Интернет-магазин на 1С-Битрикс и МойСклад (облачная система управления торговлей) — распространённая связка у малого и среднего бизнеса. Но штатного модуля интеграции в Битрикс нет, а готовые решения с маркетплейса покрывают 60-70% сценариев. Остаток — нестандартный маппинг свойств, синхронизация остатков по складам, обработка характеристик — требует кастомной разработки. Разберём архитектуру интеграции, API МойСклад и типичные проблемы.

Что синхронизируем

Интеграция Битрикс ↔ МойСклад обычно включает четыре потока данных:

Поток Направление Частота Приоритет
Товары и цены МойСклад → Битрикс Каждые 15-60 мин Высокий
Остатки по складам МойСклад → Битрикс Каждые 5-15 мин Критичный
Заказы Битрикс → МойСклад По событию (при оформлении) Критичный
Статусы заказов МойСклад → Битрикс Каждые 5-15 мин Средний

Направление «МойСклад как master» для товаров — типичное. Контент-менеджер работает в МойСклад, сайт получает актуальные данные. Обратная синхронизация товаров (Битрикс → МойСклад) нужна редко и создаёт риск конфликтов.

API МойСклад: Remap API 1.2

МойСклад предоставляет REST API (JSON API 1.2) по адресу https://api.moysklad.ru/api/remap/1.2/. Авторизация — Basic Auth или Bearer Token.

Ключевые эндпоинты:

  • GET /entity/product — список товаров. Поддерживает фильтрацию (filter=updated>2024-03-01), пагинацию (limit, offset), раскрытие вложенных сущностей (expand=group,productFolder).
  • GET /entity/assortment — объединённый список товаров, модификаций, комплектов и услуг. Удобнее product, если нужно всё сразу.
  • GET /report/stock/all — остатки по всем товарам. Можно фильтровать по складу (stockstore).
  • POST /entity/customerorder — создание заказа покупателя.
  • GET /entity/customerorder/{id} — получение заказа со статусами.

Ограничения API:

  • Rate limit: 45 запросов за 3 секунды на аккаунт. При превышении — HTTP 429. Парсер должен учитывать задержки.
  • Максимум 1000 объектов в одном ответе. Для выгрузки полного каталога нужна пагинация.
  • Webhook-уведомления (МойСклад → ваш сервер) — доступны, но ненадёжны: нет гарантии доставки, нет повторных попыток. Для критичных данных (остатки) используйте polling.

Синхронизация товаров

Алгоритм инкрементальной синхронизации:

  1. Запрашиваем GET /entity/assortment?filter=updated>${lastSyncTime}&limit=1000.
  2. Для каждого товара ищем соответствие в инфоблоке Битрикс по внешнему коду (XML_ID = UUID товара в МойСклад).
  3. Если нашли — CIBlockElement::Update() с обновлёнными полями.
  4. Если не нашли — CIBlockElement::Add().
  5. Сохраняем lastSyncTime = now() в b_option.

Маппинг полей — ядро интеграции. Таблица соответствий:

МойСклад Битрикс (инфоблок) Примечания
name NAME
description DETAIL_TEXT HTML или plain text
article PROPERTY_ARTICLE Код свойства зависит от инфоблока
salePrices[0].value CATALOG_PRICE_1 Цена в копейках → делим на 100
buyPrice.value CATALOG_PRICE_2 (закупочная) Если используется
images[].filename DETAIL_PICTURE / MORE_PHOTO Скачиваем по URL из miniature.href
productFolder.name Секция инфоблока Создаём секцию, если не существует

Характеристики (модификации) в МойСклад — это variant внутри товара. В Битрикс им соответствуют торговые предложения (SKU) в отдельном инфоблоке. Каждый variant → элемент SKU-инфоблока с привязкой к родительскому товару через CHL_LINK (property CML2_LINK).

Синхронизация остатков

Остатки — самый чувствительный поток. Продажа товара с нулевым остатком — прямые убытки.

Вызываем GET /report/stock/all с фильтром по складам, которые участвуют в интернет-продажах. Результат содержит assortmentId и quantity. Обновляем поле CATALOG_QUANTITY в b_catalog_product или через \Bitrix\Catalog\ProductTable::update().

Для отображения остатков по складам на сайте (например, «в наличии в магазине на Ленина») используйте механизм складского учёта Битрикс: модуль catalog, таблица b_catalog_store_product. Каждый склад МойСклад маппится на склад Битрикс (b_catalog_store).

Частота: раз в 5 минут через cron-скрипт. Агенты Битрикс для этой задачи не подходят — они привязаны к хитам и не гарантируют интервал.

Передача заказов

При оформлении заказа в Битрикс (событие OnSaleOrderSaved или OnSaleComponentOrderComplete) создаём заказ в МойСклад через POST /entity/customerorder.

Структура тела запроса:

{
  "organization": {"meta": {"href": "...entity/organization/{id}"}},
  "agent": {"meta": {"href": "...entity/counterparty/{id}"}},
  "positions": [
    {
      "assortment": {"meta": {"href": "...entity/product/{id}"}},
      "quantity": 2,
      "price": 150000
    }
  ]
}

Контрагент (agent) — покупатель. При первом заказе создаём через POST /entity/counterparty, при повторном — ищем по email/телефону. UUID контрагента сохраняем в пользовательском свойстве заказа Битрикс или в UF_-поле пользователя.

Обработка ошибок и очередь

Сеть ненадёжна, API МойСклад иногда отвечает 500. Для заказов используйте очередь: при ошибке отправки сохраняем заказ в таблицу parser_queue (или b_sale_order с флагом «не отправлен в МойСклад»), агент повторяет отправку каждые 5 минут. Максимум 5 попыток, после чего — уведомление менеджеру.

Для товаров и остатков очередь не нужна — следующий цикл синхронизации подхватит изменения.

Сроки

Этап Время
Анализ структуры каталога + маппинг полей 1-2 дня
Синхронизация товаров + категорий 3-4 дня
Синхронизация остатков по складам 1-2 дня
Передача заказов + контрагенты 2-3 дня
Обратная синхронизация статусов 1 день
Тестирование, отладка, edge cases 2-3 дня
Итого 1-2 недели