CommerceML — это стандарт обмена данными между 1С и сайтом на 1С-Битрикс: каталог, цены, остатки и заказы передаются набором XML-файлов по фиксированному протоколу. Ниже — как настроить обмен от установки модулей до первого успешного сеанса, с реальными путями, параметрами и типовыми граблями.
Как устроен обмен по CommerceML
Обмен по CommerceML 2 — это диалог двух сторон по HTTP. 1С выступает клиентом, сайт — сервером. Точка входа на сайте — скрипт /bitrix/admin/1c_exchange.php, который принимает запросы и раскладывает данные по инфоблокам.
Каталог передаётся двумя типами файлов: import.xml — номенклатура, разделы, свойства, картинки; offers.xml — торговые предложения, цены и остатки. Заказы ходят в обратную сторону через модуль sale. Сопоставление объектов идёт не по названию, а по внешнему коду — 1С пишет GUID в поле XML_ID элемента, поэтому переименование товара не создаёт дубль.
Подготовка сайта: модули и инфоблок
Для обмена нужны установленные модули Информационные блоки (iblock), Торговый каталог (catalog) и Интернет-магазин (sale) — если планируете выгружать заказы. Проверить их можно в Настройки → Настройки продукта → Модули.
Далее нужен инфоблок-приёмник. Практичнее не создавать его руками, а позволить первому сеансу обмена создать инфоблок автоматически: 1С сама заведёт тип, свойства и разделы. Если инфоблок уже существует, убедитесь, что у него включён признак торгового каталога в Магазин → Торговый каталог, а к нему привязан инфоблок торговых предложений (SKU).
- Тип цен из 1С должен совпасть с типом цены в
Магазин → Настройки → Типы цен— иначе цены не привяжутся; - единицы измерения и склады подтягиваются автоматически при первой выгрузке;
- свойства, созданные обменом, получают префикс
CML2_(напримерCML2_ARTICLE,CML2_LINK) — не удаляйте их вручную.
Настройка узла обмена на стороне сайта
Параметры приёмной стороны собраны в Магазин → Настройки → Настройки обмена с 1С (либо в старых сборках — Настройки → Настройки продукта → Настройки модулей → Торговый каталог). Здесь задаются ключевые лимиты сеанса:
| Параметр | Назначение |
|---|---|
| Интервал сохранения | Сколько секунд обрабатывать за один шаг перед прерыванием (защита от таймаута) |
| Использовать zip | Сжатие файлов — экономит трафик, но требует расширения zlib |
| Отключать отсутствующие | Снимать с публикации товары, которых нет в новой выгрузке |
| Размер шага (записей) | Сколько элементов импортировать за одну итерацию |
Отдельного пользователя-администратора для обмена заводить не обязательно, но безопаснее создать сервисную учётную запись с правом на нужный инфоблок. Логин и пароль этой записи потом вводятся в 1С.
Настройка выгрузки в 1С
В типовых конфигурациях (УТ, УНФ, Розница, Комплексная) обмен настраивается в разделе «Обмен с сайтом» или «Обмен с 1С-Битрикс». Создаётся узел обмена, в котором нужно указать:
- адрес сайта в формате
http://site.ru/bitrix/admin/1c_exchange.php(без пути к скрипту 1С не «увидит» точку входа); - логин и пароль сервисного пользователя Битрикса;
- состав выгрузки — товары, цены выбранного типа, остатки по складам, картинки;
- периодичность автообмена (регламентное задание) или запуск вручную.
windows-1251 или UTF-8. Смешивать нельзя: если сайт в UTF-8, а выгрузка в 1251 без корректного заголовка encoding, кириллица «поедет». Битрикс ориентируется на объявленную в XML кодировку.Как проходит сеанс: протокол по шагам
Полезно понимать, что 1С дёргает 1c_exchange.php не одним запросом, а серией — по параметру mode. Диагностировать обмен без знания этих шагов практически невозможно:
mode=checkauth— авторизация; сайт возвращает cookie сессии, дальше 1С ходит с ней;mode=init— согласование: поддержка zip и максимальный размер файла (file_limit);mode=file— загрузкаimport.xmlиoffers.xml(крупные файлы бьются на части);mode=import— построчная обработка; повторяется, пока сайт отвечаетprogress, а неsuccess.
Ответ success на шаге import — признак завершённого сеанса. Ответ progress означает, что сработал интервал сохранения и импорт продолжится следующим запросом — это нормальное поведение на больших каталогах, а не ошибка.
Серверные лимиты и производительность
Самая частая причина «зависшего» обмена — не настройки Битрикса, а ограничения PHP и веб-сервера. Крупный offers.xml легко упирается в лимиты загрузки. Проверьте в php.ini (или через Настройки → Инструменты → Проверка системы):
upload_max_filesizeиpost_max_size— не меньше размера самого большого файла выгрузки;memory_limit— 256M и выше для каталогов от десятков тысяч SKU;max_execution_time— согласуйте с «Интервалом сохранения», чтобы шаг успевал завершиться до обрыва.
1c_exchange.php отдаётся напрямую и не кэшируется. Кэширование ответов обмена — верный способ получить «залипшую» сессию checkauth.Диагностика типовых ошибок
Когда обмен «не идёт», разбирайте по слоям — от авторизации к данным. Полезные ориентиры:
| Симптом | Вероятная причина |
|---|---|
| Ошибка авторизации на checkauth | Неверный логин/пароль или у пользователя нет прав на инфоблок |
| Файл не загружается (file) | Малый upload_max_filesize / post_max_size |
| Обмен обрывается на import | Таймаут: уменьшите размер шага или интервал сохранения |
| Товары дублируются | Сбит XML_ID — обмен не находит существующие элементы |
| Цены не привязались | Тип цены в 1С не совпал с типом цены на сайте |
Детали каждого сеанса пишутся в служебный лог обмена — начинайте разбор именно с него, а не с догадок. При ручной проверке можно открыть 1c_exchange.php?type=catalog&mode=checkauth в браузере: строка ответа сразу покажет, работает ли авторизация.
Итог
Настройка обмена CommerceML сводится к трём слоям: корректные модули и инфоблок на сайте, правильно заданный узел в 1С и серверные лимиты, которые выдержат объём каталога. Ключ к спокойной эксплуатации — понимание протокола (checkauth → init → file → import) и привычка начинать диагностику с лога обмена, а не с перенастройки всего подряд.
Если обмен нужно поднять на боевом каталоге в десятки тысяч позиций, синхронизировать заказы или доработать нестандартную конфигурацию 1С — мы в B2Bsite настраиваем такие интеграции «под ключ», ускоряем тяжёлые выгрузки и берём магазин на поддержку, чтобы обмен не ломался после обновлений.
Частые вопросы
Чем отличаются файлы import.xml и offers.xml?
import.xml содержит номенклатуру, разделы, свойства и картинки, а offers.xml — торговые предложения, цены и остатки. Сначала обрабатывается каталог, затем предложения.
Нужно ли создавать инфоблок вручную перед первым обменом?
Нет, надёжнее позволить 1С создать инфоблок автоматически при первой выгрузке. Тогда типы, свойства и разделы сформируются корректно и без ручных ошибок.
По какому адресу 1С подключается к сайту?
Точка входа — /bitrix/admin/1c_exchange.php. В узле обмена 1С указывается полный URL сайта именно с этим путём, иначе соединение не установится.
Почему обмен обрывается на середине больших каталогов?
Обычно это таймаут PHP или упор в лимиты загрузки файлов. Уменьшите размер шага импорта и интервал сохранения, поднимите upload_max_filesize, post_max_size и memory_limit.
Что означает ответ progress вместо success?
Это штатное поведение: сработал интервал сохранения, и импорт продолжится следующим запросом от 1С. Ошибкой является только явное сообщение об ошибке в ответе.
Почему после обмена появились дубли товаров?
Обмен сопоставляет элементы по XML_ID с GUID из 1С. Если внешние коды сбились или инфоблок пересоздали, старые элементы перестают находиться и товары задваиваются.
Как передавать заказы обратно в 1С?
Заказы выгружаются через модуль Интернет-магазин (sale) в рамках того же сеанса CommerceML. В 1С в узле обмена нужно включить загрузку заказов с сайта.
В какой кодировке должны быть файлы выгрузки?
Битрикс принимает и windows-1251, и UTF-8, ориентируясь на объявленную в XML кодировку. Важно, чтобы фактическая кодировка файла совпадала с заголовком encoding.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.