Актуальные остатки на сайте — это результат корректно настроенного обмена с 1С, а не ручного редактирования каталога. Ниже разбираем, как работает синхронизация количества по протоколу CommerceML, как связать склады 1С со складами Битрикса и что делать, чтобы цифры на витрине совпадали с учётом.
Как устроен обмен остатками
Обмен между 1С и сайтом на 1С-Битрикс идёт по открытому протоколу CommerceML 2 (стандарт CommerceML). Со стороны сайта его обслуживает модуль «Торговый каталог» (catalog), а точкой входа служит файл /bitrix/admin/1c_exchange.php. Именно на этот URL «1С:Управление торговлей» или «1С:Комплексная автоматизация» отправляет пакеты данных.
Данные передаются двумя логическими потоками. Первый — каталог (import.xml): номенклатура, свойства, разделы, картинки. Второй — предложения и остатки (offers.xml): цены, торговые предложения и, собственно, количество на складах. Остатки почти всегда живут во втором пакете, поэтому для «быстрой» синхронизации количества настраивают отдельный, частый обмен только по предложениям, а тяжёлую выгрузку каталога оставляют реже.
- Каталог — раз в сутки или по изменению номенклатуры;
- Цены и остатки — каждые 5–30 минут, чтобы витрина не отставала от склада.
Что нужно включить до обмена
Прежде чем 1С начнёт присылать количество, магазин на сайте должен уметь его хранить. Проверьте связку модулей и настройки учёта:
- Установлены модули «Торговый каталог» (
catalog) и «Интернет-магазин» (sale). - В
Магазин → Настройки → Настройки проекта → Настройки модулей → Торговый каталогвключён нужный режим: количественный либо складской учёт. - Информационный блок каталога отмечен как «Торговый каталог», а для товаров с вариациями создан связанный инфоблок торговых предложений (SKU).
Настройка выгрузки на стороне 1С
В типовых конфигурациях узел обмена настраивается в разделе Администрирование → Синхронизация с сайтами / Обмен с сайтом (в разных редакциях пункт называется по-разному). Создаётся узел с адресом сайта, логином и паролем пользователя Битрикса, у которого есть право на обмен.
Ключевые параметры узла:
- Адрес — полный путь до
http(s)://site.ru/bitrix/admin/1c_exchange.php; - Выгружать остатки — флажок должен быть включён, иначе
offers.xmlуйдёт без количества; - Список складов — отметьте те склады 1С, чьи остатки должны попадать на сайт (например, только «розничный» или «отгрузочный»);
- Расписание — регламентное задание для автоматической выгрузки без участия оператора.
Важно: 1С выступает инициатором обмена. Сайт не «забирает» данные сам — 1С по расписанию стучится на 1c_exchange.php и передаёт пакеты. Поэтому автоматизация остатков — это регламентное задание в 1С, а не агент на стороне Битрикса.
Связь складов 1С и Битрикса
При складском учёте каждый склад из выгрузки должен соответствовать складу на сайте (Магазин → Склады). Идентификация идёт по внешнему коду (XML_ID): 1С передаёт GUID склада, а Битрикс сопоставляет его с записью в списке складов, создавая недостающие при первом обмене.
| Сценарий в 1С | Что получаем на сайте |
|---|---|
| Выгрузка без складов (количественный учёт) | Одно суммарное число в поле «Количество» товара |
| Выгрузка по одному складу | Остаток привязан к одному складу Битрикса |
| Выгрузка по нескольким складам | Разбивка по складам + итог как сумма |
Остатки, резерв и обратный обмен заказами
Синхронизация остатков не существует в отрыве от заказов. Обмен двусторонний: 1С не только присылает количество, но и забирает заказы с сайта, а затем возвращает их изменённые статусы. Из-за этого возникает вопрос «кто хозяин остатка».
На практике используют две схемы:
- 1С — единственный источник остатков. Списание и резерв ведутся в учётной системе, а сайт лишь отображает присланное количество. Резервирование на сайте при этом обычно отключают, чтобы не вычитать товар дважды.
- Битрикс резервирует, 1С списывает. Сайт держит резерв под неоплаченные заказы, а после отгрузки 1С присылает уже уменьшенный остаток. Требует аккуратной настройки правил резерва, иначе на витрине временно «минус».
Выберите одну модель и придерживайтесь её на всём проекте — смешение приводит к рассинхрону, когда сайт и учёт показывают разные цифры.
Проверка и типовые ошибки
Ход обмена видно в Магазин → Настройки → Загрузка данных 1С и в журнале событий (Настройки → Инструменты → Журнал событий). Для отладки помогает включение сохранения пакетов обмена в /upload/1c_catalog/ или /upload/1c_exchange/ — можно открыть offers.xml и глазами проверить, ушло ли количество.
Чаще всего остатки «не приезжают» по таким причинам:
- в узле 1С не стоит флаг «Выгружать остатки»;
- на сайте не включён учёт нужного типа — количество приходит, но не сохраняется;
- несовпадение
XML_IDскладов после переноса базы 1С; - обмен обрывается по таймауту на большом каталоге — тогда включают пошаговую выгрузку и увеличивают
max_execution_time; - кэш каталога и «умного фильтра» не сброшен — на витрине старые цифры, хотя в админке уже новые.
Итог
Надёжная синхронизация остатков с 1С держится на трёх вещах: правильно включённом типе учёта на сайте, корректной связке складов по XML_ID и выбранной единой модели «кто владеет остатком». Частую выгрузку количества выносят в отдельный обмен по предложениям, а тяжёлый каталог обновляют реже. Тогда цифры на витрине совпадают со складом без ручных правок.
Если обмен по CommerceML настраивается с нуля, база переносится между серверами или остатки на сайте регулярно расходятся с учётом — мы проектируем и отлаживаем интеграцию 1С с 1С-Битрикс так, чтобы каталог, цены, заказы и остатки жили в одном контуре и обновлялись предсказуемо.
Частые вопросы
По какому протоколу передаются остатки?
По открытому протоколу CommerceML 2. Остатки уходят в пакете предложений offers.xml, который 1С отправляет на файл /bitrix/admin/1c_exchange.php.
Кто инициирует обмен — сайт или 1С?
Инициатор — 1С. По регламентному заданию она сама обращается к сайту и передаёт данные. Битрикс не забирает остатки самостоятельно.
Как часто стоит синхронизировать количество?
Обычно каждые 5–30 минут для цен и остатков через отдельный обмен по предложениям. Полный каталог выгружают реже — раз в сутки или по изменению номенклатуры.
Почему остатки приходят, но на сайте не сохраняются?
Чаще всего на сайте не включён нужный тип учёта — количественный или складской. Без него Битрикс принимает пакет, но не сохраняет количество в карточке товара.
Как передать остатки по нескольким складам?
Включите складской учёт на сайте до первого обмена и отметьте нужные склады в узле 1С. Склады сопоставляются по XML_ID (GUID), суммарный остаток считается автоматически.
Появились дубли складов после переноса базы 1С — почему?
При пересоздании склада меняется его GUID, и Битрикс заводит новую запись, а старые остатки остаются на прежнем складе. Нужно сохранять внешние коды складов неизменными.
Нужно ли включать резервирование на сайте?
Зависит от модели. Если единственный источник остатков — 1С, резерв на сайте обычно отключают. Если сайт резервирует под неоплаченные заказы, а 1С списывает после отгрузки, резерв оставляют, но настраивают его правила аккуратно.
Где смотреть, что именно ушло из 1С?
Включите сохранение пакетов обмена и откройте offers.xml в папке /upload/1c_exchange/. Ход загрузки виден в разделе «Загрузка данных 1С» и в журнале событий.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.