БесплатноБазовая интеграция с 1С в подарок при заказе интернет-магазина под ключ

Синхронизация номенклатуры МойСклад и 1С-Битрикс

Синхронизация номенклатуры МойСклад и 1С-Битрикс: обмен товарами, ценами и остатками по API

Менеджер поднял цену в МойСклад, кладовщик отгрузил последнюю коробку — а на сайте товар всё ещё «в наличии» по старой цене. Покупатель оформляет заказ, которого по факту нет, и вы теряете либо деньги, либо репутацию. Ровно эту дыру закрывает синхронизация номенклатуры между МойСклад и 1С-Битрикс: остатки, цены и карточки товаров живут в одном источнике правды, а витрина всегда показывает актуальную картину.

Ниже — практическая схема двустороннего обмена: как связать позиции по стабильному ключу, что и в какую сторону синхронизировать, как выбрать между вебхуками и опросом, и как построить очередь, которая не теряет заказы при сбое API. Это выжимка из наших проектов по интеграции МойСклад с 1С-Битрикс — без общих слов, с конкретикой по инфоблокам, свойствам и агентам платформы.

Коротко

  • У МойСклад нет CommerceML под Битрикс — обмен строится через REST JSON API и коннектор.
  • Свяжите позиции по стабильному UUID МойСклад в свойстве элемента, а не по названию.
  • Задайте владельца каждому полю: остатки и цены ведёт МойСклад, контент — сайт, заказы — сайт.
  • Остатки гоняйте по вебхуку или частым опросом, номенклатуру — реже, полную сверку — ночью.
  • Заказы пишите в очередь с повторами: витрина не должна зависеть от доступности МойСклад.

Зачем связывать МойСклад и Битрикс

МойСклад — это облачная система товароучёта: приёмка, отгрузка, себестоимость, резервы, ценообразование, документы. 1С-Битрикс — витрина и движок интернет-магазина: каталог, корзина, оформление заказа, личный кабинет, SEO. Пока эти две системы живут порознь, кто-то в компании вручную переносит между ними товары и остатки — и именно на этом ручном звене копятся ошибки.

Автоматическая синхронизация убирает ручной труд и делает данные согласованными. Практически это даёт четыре измеримых эффекта. Во-первых, витрина показывает реальные остатки, и покупатель не заказывает то, чего нет. Во-вторых, цена на сайте всегда совпадает с ценой в учёте — не бывает ситуации «на сайте дешевле, чем в кассе». В-третьих, новый товар, заведённый в МойСклад, автоматически появляется на сайте, а снятый с продажи — прячется. В-четвёртых, заказы с сайта сразу попадают в учёт как документы, и менеджеру не нужно перебивать их руками.

Отдельно стоит подчеркнуть: МойСклад часто выбирают именно небольшие и средние магазины, которым «полноценная» 1С избыточна. Для них связка «МойСклад + Битрикс» — это способ получить нормальный товароучёт без внедрения тяжёлой ERP. Но техническая цена такого выбора в том, что готового двустороннего протокола, как обмен с «1С:Предприятие», здесь нет — интеграцию нужно проектировать. Если у вас как раз стоит выбор между МойСклад и 1С, полезно заранее посмотреть на классический обмен магазина с 1С и оценить, какой сценарий ближе вашему процессу.

Важно: у МойСклад нет выгрузки в формате CommerceML под Битрикс. Не ищите «стандартный обмен» в админке платформы — его для МойСклад не существует. Интеграция всегда идёт через REST API: либо готовым модулем из Маркетплейса, либо собственным коннектором.

Архитектура обмена: кто с кем разговаривает

Чтобы проектировать интеграцию осознанно, полезно держать в голове её слои. Обмен между МойСклад и Битриксом — это не «одна кнопка», а конвейер из нескольких компонентов, у каждого своя зона ответственности.

Данные ходят по этой цепочке в обе стороны. От МойСклад к сайту движется «мастер-справочник»: товары, характеристики, цены, остатки. От сайта к МойСклад движутся заказы и, при необходимости, витринные правки, если сайт назначен владельцем какого-то поля. Понимание, где именно проходит каждый поток, сразу подсказывает, где искать проблему: если на сайте старый остаток — смотрим поток «МойСклад → сайт» и его триггер, если заказ не дошёл в учёт — смотрим очередь и поток «сайт → МойСклад».

МойСклад учёт · остатки REST API JSON Коннектор сопоставление Каталог Битрикс Товары · цены · остатки → ← Заказы с сайта
Схема: номенклатура, цены и остатки идут из МойСклад в каталог Битрикса, а заказы — обратно; посередине коннектор ведёт сопоставление и преобразование данных.

Ведущая система и владельцы полей

Главное проектное решение принимается до первой строчки кода: нужно определить, какая система «главная» по каждому полю. Если этого не сделать, две системы начнут писать в одно и то же поле навстречу друг другу, и обмен превратится в качели, где каждая сторона затирает изменения другой.

Правильный подход — назначить каждому полю ровно одного владельца. Владелец имеет право записи, остальные только читают. Типовое распределение для связки «МойСклад + Битрикс» выглядит так:

Поле / сущностьВладелецКто читает
Номенклатура, артикул, модификацииМойСкладСайт (создаёт карточки)
Отпускные цены, типы ценМойСкладСайт (витрина)
Остатки по складамМойСкладСайт (наличие)
Описание, SEO-поля, фото, разделыСайт—
Заказы покупателейСайтМойСклад (документы)
Статусы отгрузки заказаМойСкладСайт (личный кабинет)

Обратите внимание на строку с контентом: описания, SEO-теги и привязку к разделам каталога почти всегда лучше держать на стороне сайта. В МойСклад описание товара — это учётное поле, оно не заточено под витрину и SEO. Если разрешить МойСклад перезаписывать описание, при каждом обмене ваши вылизанные тексты и метатеги будут затираться скупыми учётными строками. Поэтому контентные поля исключают из потока «МойСклад → сайт» на уровне маппинга.

Правило одного владельца: если поле пишут обе системы, рано или поздно они устроят «войну правок». Составьте таблицу владельцев полей до старта интеграции и защитите её в коде маппинга — это дешевле, чем потом искать, почему описания то и дело обнуляются.

Сопоставление товаров: ключи связи

Второй фундаментальный вопрос — как система понимает, что «вот эта позиция в МойСклад» и «вот этот элемент каталога Битрикса» — один и тот же товар. Это называется сопоставлением (матчингом), и от надёжности ключа зависит, будет ли обмен создавать дубли или аккуратно обновлять существующие карточки.

Ключи сопоставления сильно различаются по надёжности:

Рабочая схема: основной ключ — UUID МойСклад, который сохраняется в служебное свойство элемента (например, MOYSKLAD_ID) при первом обмене; запасной ключ на этапе первичной сцепки существующего каталога — артикул. Дальше вся синхронизация идёт по UUID, а артикул остаётся человекочитаемым атрибутом. Такой подход мы разбираем и в общем материале про интеграцию с МойСклад, потому что от выбора ключа зависит устойчивость всей связки.

Ключ связи: UUID МойСклад Позиция МойСклад id: a1f9-… (UUID) Название: Кресло «Люкс» Артикул: KR-0417 Цена: 12 900 ₽ · Остаток: 4 Элемент каталога Битрикс MOYSKLAD_ID: a1f9-… Название: Кресло Люкс (SEO) Артикул: KR-0417 Цена · Наличие ← обмен match по UUID
Схема: UUID позиции МойСклад хранится в свойстве элемента каталога и служит неизменным ключом; название и SEO при этом ведёт сайт.

Что синхронизируем: номенклатура, цены, остатки

Полезно разложить обмен на три независимых потока данных. У каждого своя частота, свои поля и своя логика конфликтов, и смешивать их в один «большой обмен» — ошибка проектирования.

Номенклатура. Это «медленный» справочник: сами товары, их артикулы, единицы измерения, привязка к группам, набор характеристик. Меняется относительно редко — при заведении новых позиций или правке карточек. Из МойСклад приходят товары и модификации; на сайте они превращаются в элементы каталога и торговые предложения. Именно в этом потоке живут решения про контент: какие поля сайт принимает, а какие ведёт сам.

Цены. МойСклад умеет вести несколько типов цен (розничная, оптовая, специальная). На сайте им соответствуют типы цен торгового каталога. Здесь важно заранее договориться о маппинге: какой тип цены МойСклад в какой тип цены Битрикса ложится, и что показывать на витрине для розничного и оптового покупателя. Цены меняются чаще номенклатуры, но реже остатков.

Остатки. Это самый «горячий» и самый чувствительный к задержке поток. Остаток меняется при каждой продаже и отгрузке, и именно его рассинхрон бьёт по бизнесу сильнее всего — либо продаёте то, чего нет, либо прячете то, что есть. Если у вас несколько складов, остатки приходят в разрезе складов, и нужно решить, как их сводить в витринное «в наличии»: суммировать, брать по конкретному складу или считать по правилам доступности. Мультискладовую логику мы подробно разбираем в материале про обмен остатками при нескольких складах и WMS.

Три потока — три частоты Остатки вебхук / 3–10 мин Цены 15–60 мин / событие Номенклатура по событию / ночью Коннектор маппинг полей Каталог Битрикс цены · склады · SKU
Схема: остатки, цены и номенклатура — три отдельных потока со своей частотой; коннектор приводит их к формату каталога Битрикса.

Направления обмена и частота

Слово «двусторонний» звучит просто, но на деле у обмена не одно, а несколько направлений, и у каждого своя частота. Свести их в таблицу — значит сразу увидеть нагрузку на API и точки риска.

ПотокНаправлениеЧастотаТриггер
ОстаткиМойСклад → сайтПочти реального времениВебхук или частый агент
ЦеныМойСклад → сайт15–60 минутАгент по расписанию
Новые товарыМойСклад → сайтПо событию / раз в часВебхук создания
ЗаказыСайт → МойСкладРеального времени, через очередьСобытие оформления
Статусы отгрузкиМойСклад → сайт10–30 минутАгент по расписанию
Полная сверкаДвусторонняяРаз в сутки, ночьюАгент в часы низкой нагрузки

Ключевая мысль: не пытайтесь всё синхронизировать одинаково часто. Гонять полную номенклатуру каждые пять минут бессмысленно и вредно — вы упрётесь в лимиты API МойСклад и создадите лишнюю нагрузку. Наоборот, обновлять остатки раз в час опасно — за час можно продать несуществующий товар. Разнесите частоты по важности и изменчивости поля, а «тяжёлую» полную сверку уведите на ночь.

Важно: у REST API МойСклад есть лимиты на частоту запросов. Проектируйте обмен так, чтобы укладываться в них: используйте пакетную выборку изменённых позиций и фильтры по дате изменения вместо перебора всего справочника на каждом цикле.

Модификации и торговые предложения

Отдельная тема, на которой спотыкаются многие внедрения, — модификации. В МойСклад товар может иметь модификации (вариации по характеристикам: цвет, размер, объём). В Битриксе этому соответствует механизм торговых предложений (SKU) — отдельный инфоблок, привязанный к каталогу товаров. Задача обмена — корректно разложить одну сущность МойСклад на две сущности Битрикса.

Схема отображения такая: родительский товар МойСклад становится элементом каталога товаров, а каждая его модификация — элементом инфоблока торговых предложений, привязанным к этому товару. Характеристики модификации (тот самый «цвет: синий, размер: L») превращаются в свойства торгового предложения. Артикул, цена и остаток у каждой модификации свои, поэтому обмен ведёт их на уровне SKU, а не на уровне родителя.

На что обратить внимание при проектировании модификаций:

Тонкости разложения модификаций на торговые предложения и настройку свойств SKU мы подробно разбираем в отдельных материалах рубрики Интеграции — здесь же важно зафиксировать принцип: одна модификация МойСклад = одно торговое предложение Битрикса, связанные стабильными идентификаторами.

Вебхуки против опроса по расписанию

Есть два способа узнать, что в МойСклад что-то изменилось: спросить самому (опрос, polling) или дождаться, когда МойСклад сам сообщит (вебхук, webhook). У обоих есть место в правильной архитектуре, и обычно их комбинируют.

Опрос по расписанию (агент Битрикса). Сайт периодически ходит в API МойСклад и спрашивает: «что изменилось с прошлого раза?». Плюсы — простота и полный контроль на стороне сайта, устойчивость к пропущенным событиям. Минусы — задержка (изменение увидите только на следующем цикле) и лишние запросы вхолостую, когда ничего не менялось.

Вебхуки МойСклад. МойСклад сам шлёт HTTP-запрос на ваш эндпоинт в момент изменения товара, цены или остатка. Плюсы — минимальная задержка и отсутствие холостых опросов. Минусы — нужен публично доступный и защищённый эндпоинт, а также обработка ситуации, когда вебхук не дошёл (сеть, перезагрузка, ошибка). Вебхук нельзя считать «гарантированной доставкой».

КритерийВебхукиОпрос по расписанию
ЗадержкаСекундыИнтервал агента
Нагрузка на APIНизкая, только по событиюПостоянная, даже вхолостую
Надёжность доставкиСобытие можно потерятьВысокая, всегда доспросит
Требования к инфраструктуреПубличный защищённый эндпоинтТолько агент на сайте
Лучшее применениеОстатки, новые товарыПолная сверка, страховка

Практичная стратегия — гибрид: вебхуки для мгновенной реакции на остатки и новые товары, плюс ночной опрос-сверка как страховка, которая догоняет всё, что вебхуки могли пропустить. Так вы получаете и низкую задержку, и гарантию, что за сутки любой рассинхрон будет вычищен.

Реализация в 1С-Битрикс

Теперь конкретика по платформе. Вне зависимости от того, берёте ли вы готовый модуль из Маркетплейса или пишете свой коннектор, набор задач на стороне Битрикса примерно одинаковый. Разложим внедрение на шаги.

  1. Подготовьте структуру каталога. Создайте инфоблок товаров и инфоблок торговых предложений в модуле «Торговый каталог», задайте типы цен (розница, опт) и склады, соответствующие складам МойСклад.
  2. Добавьте служебные свойства. В инфоблоки товаров и предложений добавьте свойства для внешних идентификаторов: MOYSKLAD_ID (UUID) и, при необходимости, поле времени последней синхронизации. Это ключи и метки обмена.
  3. Получите доступ к API МойСклад. Заведите отдельного пользователя или токен доступа для интеграции, ограничьте права только нужными сущностями (товары, цены, остатки, заказы). Не используйте личный логин администратора.
  4. Опишите маппинг полей. Составьте таблицу соответствия «поле МойСклад → поле инфоблока», зафиксировав владельцев полей: какие данные сайт принимает, а какие ведёт сам и в обмен не отдаёт.
  5. Реализуйте импорт номенклатуры. Напишите обработчик, который читает изменённые позиции по API (с фильтром по дате изменения), создаёт или обновляет элементы каталога и торговые предложения по ключу UUID.
  6. Настройте обновление цен и остатков. Отдельными потоками обновляйте цены в таблицах торгового каталога и остатки по складам — по вебхуку и/или агентом с нужной частотой.
  7. Настройте агенты и вебхуки. Зарегистрируйте агенты платформы для опроса и сверки, поднимите защищённый эндпоинт под вебхуки МойСклад с проверкой подписи или секрета.
  8. Реализуйте выгрузку заказов. На событии оформления заказа кладите его в очередь, а фоновым агентом отправляйте в МойСклад с повторами и логированием.
  9. Включите журналирование. Пишите лог всех обменов: что пришло, что записалось, какие были ошибки. Без журнала разбирать инциденты рассинхрона практически невозможно.

Как это выглядит в админке

Со стороны Битрикса настройка обмена — это связка «служебные свойства инфоблока + агенты + панель модуля обмена». Схематично экран настройки коннектора выглядит так:

Обмен с МойСклад · настройки Токен API •••••••••••• подключено Остатки, интервал 5 мин + вебхук Цены, интервал 30 мин Маппинг: Розничная → BASE · Оптовая → OPT · Склад «Основной» → S1 Последняя сверка Сегодня 03:12 · без ошибок Запустить обмен
Схема: токен API, раздельные интервалы для остатков и цен, маппинг типов цен и складов, статус последней сверки. Реальные подписи зависят от модуля и версии.

Обратите внимание на две детали этой схемы. Первая — раздельные интервалы для остатков и цен: это прямое следствие принципа «три потока — три частоты». Вторая — маппинг типов цен и складов: без явного соответствия «розничная цена МойСклад → тип цены BASE в Битриксе» и «склад в МойСклад → склад в каталоге» обмен не будет знать, куда класть значения.

Очереди, повторы и защита от сбоев

Любая интеграция с внешним API обязана предполагать, что API иногда недоступно. МойСклад — облачный сервис: у него бывают технические работы, таймауты и превышения лимитов. Если ваш обмен написан в предположении «API всегда отвечает мгновенно и без ошибок», первый же сбой обернётся потерянными заказами или зависшим сайтом.

Правильная защита строится на трёх принципах.

Отдельно — обработка ошибок валидации. Одно дело, когда API недоступно (это лечится повтором), и совсем другое — когда МойСклад отклонил данные из-за некорректного поля (это повтором не лечится, нужен разбор). Разделяйте временные ошибки (сеть, таймаут, лимит) и постоянные (валидация, права): первые уводите в повтор, вторые — в журнал ошибок для ручного разбора, чтобы не зациклить очередь на заведомо «битой» операции.

Заказ оформлен Очередь на сайте Агент доставка МойСклад документ ошибка → повтор с паузой (backoff) успех → помечен доставленным
Схема: заказ идёт через очередь и фонового агента; при сбое МойСклад операция повторяется с нарастающей паузой, при успехе помечается доставленной.

Борьба с рассинхроном и дублями

Даже при аккуратной архитектуре данные со временем «расходятся»: где-то потерялся вебхук, где-то менеджер поправил позицию в обход обмена, где-то сбой прервал цикл на середине. Рассинхрон — не исключение, а нормальное состояние, к которому нужно быть готовым. Инструменты борьбы с ним такие.

Особый случай — дубли, которые появились до внедрения обмена, когда каталог вели вручную. Перед запуском синхронизации проведите разовую чистку и первичное сопоставление: сцепите существующие карточки с позициями МойСклад по артикулу, проставьте им UUID, а найденные дубли объедините. Запускать регулярный обмен на «грязном» каталоге — значит закрепить бардак и размножить его автоматически.

Важно: сверка должна быть безопасной по направлению. Если владелец остатков — МойСклад, ночная сверка правит остатки только на сайте и никогда не пишет их обратно в учёт. Нарушение направления сверки — прямой путь к тому, чтобы витринная ошибка «протекла» в товароучёт.

Заказы обратно в МойСклад

Синхронизация номенклатуры — половина дела. Вторая половина — вернуть в МойСклад то, ради чего всё затевалось: заказы. Когда покупатель оформляет заказ на сайте, он должен превратиться в документ МойСклад (заказ покупателя или отгрузка), чтобы менеджер работал с ним в привычной учётной системе, а остаток корректно зарезервировался.

Что важно передать вместе с заказом:

Обратный поток — статусы. Когда заказ в МойСклад проходит через сборку, отгрузку и доставку, эти статусы полезно возвращать на сайт в личный кабинет покупателя. Здесь снова работает связка по внешнему идентификатору: агент периодически спрашивает МойСклад о состоянии отгрузок и обновляет статусы соответствующих заказов на витрине. Тему обмена заказами и статусами мы разбираем отдельно, а общий принцип интеграции витрины с учётной системой — в материале про интеграцию магазина с 1С, где логика документооборота во многом схожая.

Частые ошибки

Мини-FAQ. Нужно ли гонять полную номенклатуру при каждом обмене? Нет — читайте только позиции, изменённые с прошлой синхронизации, по фильтру даты изменения. Полную выгрузку оставьте для ночной сверки.

Чек-лист внедрения

Сведём всё в практический список, по которому удобно принимать готовность интеграции перед запуском:

  1. Владельцы полей определены. Составлена таблица «поле → владелец», контентные и SEO-поля закреплены за сайтом и исключены из потока «МойСклад → сайт».
  2. Ключ сопоставления выбран. Основной ключ — UUID МойСклад в свойстве элемента; запасной — артикул; сопоставление по названию исключено.
  3. Каталог подготовлен. Инфоблоки товаров и предложений, типы цен и склады созданы и сопоставлены со складами и типами цен МойСклад.
  4. Потоки разнесены по частоте. Остатки — вебхук/частый агент, цены — реже, номенклатура — по событию, полная сверка — ночью.
  5. Модификации разложены. Модификации МойСклад ложатся в торговые предложения, характеристики вынесены в свойства SKU для фильтра.
  6. Заказы через очередь. Выгрузка заказов асинхронна, с повторами и идемпотентностью по внешнему ключу; витрина не зависит от доступности API.
  7. Журнал и сверка включены. Ведётся лог обмена, ночная сверка догоняет рассинхрон и пишет отчёт расхождений.
  8. Доступ ограничен. Интеграция ходит под отдельным токеном с минимально необходимыми правами, а не под администратором.

Вывод

Надёжная синхронизация МойСклад и 1С-Битрикс держится на нескольких простых, но обязательных решениях: стабильный ключ сопоставления по UUID, чёткие владельцы полей, разнесённые по частоте потоки данных и заказы через очередь с повторами. Соберите эти четыре опоры — и витрина всегда покажет актуальные остатки и цены, заказы не потеряются при сбое API, а каталог не обрастёт дублями. Всё остальное — детали маппинга, которые настраиваются под конкретный ассортимент и процесс.

Частые вопросы

Чем обмен с МойСклад отличается от классического обмена с 1С по CommerceML?

Обмен с 1С в Битриксе — это готовый двусторонний протокол CommerceML, который «из коробки» понимает и платформа, и «1С:Предприятие». МойСклад так не умеет: у него нет CommerceML-выгрузки под Битрикс, зато есть развитый REST JSON API. Поэтому интеграция строится либо через готовый модуль из Маркетплейса, либо через собственный коннектор, который читает и пишет данные по API. Логика сопоставления, очередей и обработки ошибок в этом случае целиком на стороне интеграции, а не на стороне платформы.

Что должно быть ведущей системой — МойСклад или сайт на Битрикс?

В большинстве проектов МойСклад ведёт номенклатуру, закупочные и отпускные цены и остатки, потому что именно там происходит учёт, приёмка и отгрузка. Сайт при этом ведёт витринный контент: описания, SEO-поля, фотографии, привязку к разделам каталога. Заказы, наоборот, рождаются на сайте и передаются в МойСклад. Ключевое правило — у каждого поля должен быть ровно один «владелец», иначе при встречной записи данные будут затирать друг друга.

Как связать товар в МойСклад с элементом каталога Битрикса?

Нужен стабильный ключ сопоставления, который не меняется со временем. Надёжнее всего хранить в свойстве элемента инфоблока внешний идентификатор позиции МойСклад (его UUID из поля id), а как запасной ключ использовать артикул или код. Сопоставление по названию использовать нельзя: названия правят, дублируют и переводят, и любая правка порвёт связь. UUID же живёт с позицией всю её жизнь.

Как часто нужно обновлять остатки и цены?

Остатки — самое «горячее» поле, их обновляют максимально оперативно: либо по вебхуку МойСклад в момент изменения, либо коротким опросом раз в 3–10 минут. Цены меняются реже, их достаточно синхронизировать раз в 15–60 минут или по событию. Полную сверку всей номенклатуры имеет смысл прогонять ночью по расписанию, чтобы вычистить накопленный за день рассинхрон и не гонять большой объём в часы пик.

Что делать с торговыми предложениями и модификациями?

Модификации МойСклад (вариации товара по цвету, размеру и другим характеристикам) на стороне Битрикса ложатся в отдельный инфоблок торговых предложений (SKU), привязанный к каталогу. Родительский товар МойСклад становится элементом каталога, а каждая модификация — торговым предложением с собственным артикулом, ценой и остатком. Важно заранее решить, какие характеристики модификации выносятся в свойства SKU и участвуют в умном фильтре.

Как не потерять заказы, если МойСклад временно недоступен?

Заказ никогда нельзя отправлять в МойСклад «в лоб» прямо из обработчика оформления. Правильная схема — записать заказ в собственную очередь на стороне сайта и отдать его фоновому агенту, который пытается доставить данные в МойСклад с повторами. Если API недоступно или вернуло ошибку, заказ остаётся в очереди и уходит при следующей попытке. Так покупатель всегда получает подтверждение, а данные не теряются даже при сбое внешнего сервиса.

Поделиться:

Нужна интеграция МойСклад и Битрикс без рассинхрона?

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

Игорь Воскресенский

Основатель студии B2Bsite. С 2014 года команда разрабатывает и поддерживает интернет-магазины и корпоративные сайты на 1С-Битрикс, настраивает каталоги, обмен с 1С и МойСклад и товароучёт для среднего и крупного бизнеса.

← Все статьи блога