Обмен каталогом по протоколу CommerceML 2 — базовый механизм, которым 1С-Битрикс синхронизирует товары, свойства, цены и остатки с 1С. Ниже разбираем, как настроить его правильно с обеих сторон и не получить дублей и «съехавших» разделов.
Что такое CommerceML и как работает обмен
CommerceML 2 (Commerce Markup Language) — открытый XML-стандарт обмена коммерческой информацией, разработанный фирмой «1С» и «1С-Битрикс». Именно по нему типовые конфигурации («1С:Управление торговлей», «1С:Управление нашей фирмой», «1С:Розница», «1С:Комплексная автоматизация») выгружают каталог на сайт.
Технически это не «прямой доступ к базе», а обмен файлами по протоколу: 1С инициирует сессию, сайт принимает и разбирает XML. Каталог передаётся двумя типами документов:
import.xml— классификатор и товары: разделы (группы), свойства, единицы измерения, сами номенклатурные позиции;offers.xml— торговые предложения: цены, остатки по складам, характеристики (SKU).
Крупный каталог 1С разбивает на пакеты import0.xml, import1.xml и т. д., а картинки складывает в подкаталог import_files. На стороне Битрикса приёмом занимается модуль catalog совместно с sale.
Что нужно подготовить перед настройкой
Обмен двусторонний, поэтому готовим обе стороны. Проверьте заранее:
- лицензию Битрикса с модулями «Торговый каталог» и «Интернет-магазин» — без них обмен по CommerceML недоступен;
- созданный инфоблок каталога нужного типа (обычно тип
1c_catalog) с включённым свойством «Признак товара» и, при необходимости, инфоблок торговых предложений (SKU); - в 1С — актуальный релиз конфигурации и заполненный узел обмена с сайтом;
- совпадающую кодировку и часовой пояс, чтобы даты изменения товаров сравнивались корректно.
Настройка точки обмена на стороне Битрикса
В административной части откройте Магазин → Настройки → Настройки обмена данными → Обмен с 1С (CommerceML 2). Здесь создаётся профиль импорта каталога и задаётся привязка к инфоблоку.
Ключевые параметры профиля:
- Инфоблок — куда принимать товары; для SKU указывается связанный инфоблок предложений;
- Группа товаров по умолчанию и права доступа на импортируемые разделы;
- Интервал сохранения (в секундах) — на сколько прерывать шаг импорта, чтобы не упереться в
max_execution_time; - Обновлять счётчик товаров, деактивировать отсутствующие в выгрузке позиции, использовать операции с ценами и т. д.
Точкой входа для 1С служит скрипт /bitrix/admin/1c_exchange.php. Именно его адрес указывается в 1С. Для доступа заводят отдельного пользователя Битрикса с правом на обмен — не используйте учётку главного администратора.
1c_exchange.php должна быть доступна по HTTPS и не блокироваться защитой от ботов, WAF или Basic-авторизацией веб-сервера — иначе 1С получит ошибку авторизации ещё до старта сессии.Настройка выгрузки в 1С
В типовой конфигурации откройте НСИ и администрирование → Обмен с сайтом (в старых релизах — «Обмен с сайтом (Битрикс)») и создайте узел обмена. Заполните:
- Адрес сайта — полный URL до точки входа, например
https://site.ru/bitrix/admin/1c_exchange.php; - Логин и пароль пользователя обмена, созданного в Битриксе;
- Способ выгрузки — «Полностью» для первого обмена, далее — «Только изменения»;
- Вид цен и склады, остатки которых уходят в
offers.xml; - Отбор номенклатуры — по группе, виду или произвольному условию, чтобы не выгружать лишнее.
Первую выгрузку запускают вручную кнопкой «Выгрузить каталог товаров». 1С последовательно отправит на точку входа команды checkauth, init, file (передача пакетов) и import (запуск разбора на сайте).
Как проходит сессия обмена по шагам
Понимание фаз протокола резко упрощает диагностику: по логам сразу видно, на каком шаге всё встало.
| Команда | Что происходит |
|---|---|
checkauth | Проверка логина/пароля, сайт возвращает cookie сессии |
init | Согласование: разрешён ли zip, максимальный размер файла (file_limit) |
file | Загрузка import.xml, offers.xml и картинок в /upload/1c_catalog/ |
import | Пошаговый разбор XML и запись в инфоблок; при таймауте 1С повторяет вызов до success |
Шаг import идёт итерациями: сайт разбирает часть данных, отвечает progress, и 1С снова дёргает точку входа. На больших каталогах это нормальное поведение, а не зависание.
Сопоставление данных и идентификаторы
Главный источник дублей — неверная привязка объектов. CommerceML связывает записи по внешнему коду (XML_ID), а не по названию. Для товаров это GUID номенклатуры из 1С, для разделов — GUID группы, для свойств — GUID характеристики.
- Не переименовывайте и не пересоздавайте инфоблок между выгрузками — потеряете привязку по
XML_ID; - если каталог уже вёлся на сайте вручную, перед первым обменом сопоставьте существующие разделы и товары, проставив им корректные
XML_ID, иначе 1С создаст всё заново; - единицы измерения и типы цен тоже матчатся по идентификаторам — заранее заведите нужные типы цен в модуле
catalog.
XML_ID, что и в 1С.Проверка и типовые проблемы
После первой выгрузки проверьте результат до того, как включать автоматику:
- количество товаров и разделов в инфоблоке совпадает с 1С;
- цены и остатки заполнены, привязаны к нужным типам цен и складам;
- торговые предложения прицепились к родительским товарам, а не висят отдельными позициями;
- картинки перенеслись, а не остались ссылками.
Ход сессии смотрите в Магазин → Настройки обмена данными → Журнал обмена и в файле /upload/1c_catalog/... .log. Частые причины сбоев: нехватка памяти PHP на разборе большого offers.xml, малый max_execution_time, блокировка точки входа фаерволом, несовпадение типов цен. При ошибке «неверная авторизация» проверьте, что у пользователя обмена есть право на модуль и не включена двухфакторная аутентификация.
Итог
Настройка обмена каталогом по CommerceML сводится к трём вещам: корректно подготовленный инфоблок и точка входа 1c_exchange.php на сайте, правильно заполненный узел обмена в 1С и аккуратное сопоставление объектов по XML_ID. Если соблюсти их с самого начала, дальнейшие выгрузки «только изменений» проходят быстро и без ручного вмешательства.
Мы в B2Bsite настраиваем и сопровождаем такой обмен «под ключ»: разворачиваем узел в 1С, готовим инфоблоки, сопоставляем существующий каталог, оптимизируем тяжёлые выгрузки и берём интеграцию на мониторинг, чтобы каталог, цены и остатки на сайте всегда были актуальны.
Частые вопросы
Какая версия CommerceML нужна для 1С-Битрикс?
Стандартный обмен каталогом идёт по CommerceML 2. Типовые конфигурации 1С поддерживают его из коробки, отдельная доработка формата обычно не требуется.
Где в Битриксе указывается адрес точки обмена?
Со стороны 1С в узле обмена задаётся URL скрипта /bitrix/admin/1c_exchange.php. Сам профиль импорта настраивается в разделе Магазин → Настройки обмена данными → Обмен с 1С.
Почему после выгрузки появились дубли товаров?
Чаще всего нарушена привязка по XML_ID: инфоблок пересоздали или у существующих позиций не проставлены внешние коды из 1С. Обмен связывает объекты по идентификаторам, а не по названию.
Чем отличаются import.xml и offers.xml?
import.xml содержит классификатор и сами товары (разделы, свойства, номенклатуру), а offers.xml — торговые предложения: цены, остатки и характеристики. На больших каталогах файлы разбиваются на пакеты.
Нужны ли особые модули лицензии Битрикса?
Да, для обмена каталогом требуются модули «Торговый каталог» и «Интернет-магазин». Они входят в редакции «Малый бизнес» и «Бизнес», в «Стандарте» их нет.
Как передаются цены и остатки?
Они уходят в offers.xml по видам цен и складам, выбранным в узле 1С. На сайте они матчатся с типами цен и складами модуля catalog, поэтому их нужно завести заранее.
Обмен зависает на шаге import — это ошибка?
Не обязательно. Шаг import идёт итерациями: сайт разбирает данные порциями и отвечает 1С командой progress. На крупном каталоге это нормально. Насторожить должны ошибки в журнале обмена или нехватка памяти PHP.
Можно ли выгружать только изменённые товары?
Да. Первый обмен делают полным, а затем в узле 1С включают режим «только изменения» — уходят лишь товары, менявшиеся с прошлой сессии, что заметно ускоряет обмен.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.